近来准备学一下python,研究生主要做有关数据挖掘方面的,因此要学。只看书和码代码感觉很虚,写一写博客感觉会好很多。
head first使用的是python 3.7,因此我也先学3.7,听说2.4和3.7大多数都是相同的,所以并无大碍。
笔记上一般只记录自己觉得需要记的或者易错的地方。
1、import 与 from import
import 后面接的是模块,模块里面有一大堆函数。因此
import datetime
print(datetime.datetime.now())
上述代码中,import引入的是整个datetime模块,该模块中有一个叫datetime的类,这个类中有一个叫now的函数,调用这个函数可以返回当前时间。因此,我要想调用这个函数,就需要连续层层剥开三次,找到这个函数。
这种方式下,调用函数较为麻烦,但是可以一下子引入一大堆函数。
from A import B
这句话的意思是从模块A中引入对象或者函数B。因此
import datetime from datetime
print(datetime.now())
上述代码中,点名引入datetime模块中的datetime类。调用函数now就可以少剥一层了。
这种方式调用函数较为简单,但是不能用datetime模块中的其他类或者函数。
这两种方法都可以用,看喜好,但当两个模块A和B中有一个同名函数c时,就必须使用第一种方式了,因为第二种方式没法区别到底是想用哪个c。
2、冒号:
在C中使用{}的地方。这里都用:来代替。我总是忘,然后就会报错。
冒号:一定会引入一个必须向右缩进的代码组。
else也有冒号。TMD
elif也有冒号,lzzscl
3、for循环
python的for循环很厉害,比C++的厉害多了。
对于数组或者字符串,python可以按数组元素或者字符串中的字符一个一个从前往后循环,如下:
for i in [1,2,3]:
print(i)
for ch in "abc":
print(ch)
上述代码中,有两点要注意,其一是for循环的结构,是for a in A,A就是循环范围,a就是循环变量,其二则是for循环后面有冒号。
另外,print函数后面默认带有换行,表示字符串时,单引号和双引号都行,但是字符串中有单引号时,用双引号好点。
还有一种循环方式如下:
for num in range(5)
print("LGD是不可战胜的!")
与上面的区别就是,in后面跟着的是range,意思就是范围是5,整段代码会调用print5次。
range函数默认有三个参数,range(start,stop,step)
start是起点,stop是终点,step是步长。如果range只有一个参数,那么这个参数就是stop值,start默认为0,step默认为1。
当step为正数时,那么就是从起点到终点,起点要小于终点;当step为负数时,那么还是起点到终点,但起点要大于终点,如果起点小于终点,那么就什么都得不到。
注意一点,stop的值是不会得到的,也就是说,range提供一个左闭右开的区间。
step的值的效果如下:
range(0,10,2)
0,2,4,6,8
range(0,10,3)
0,3,6,9
也就是说,start是一定会输出的,然后隔step-1个元素输出第二个,直到stop,stop不输出。
再注意一点,见以下两组代码:
for i in range(0,10,2):
print(i)
for i in range(0,10,2):
i=9
print(i)
其输出如下:
也就是说,在循环体中,如果不更改循环变量的值,那么循环变量的值就会按照range的指示一点点往上跳;如果更改循环变量的值,那么循环变量值会变化,但是循环次数不变。这是因为,python中的循环其实是新建一个迭代器,在for那句写完之后,循环次数就确定了,除了用break以外,循环次数不能变化。
4、input函数
input函数的参数可以是一个字符串,返回的就是输入值,相当于scanf和printf的合体。如下:
word=input("Please provide a word:")
这样将会显示出后面的那个字符串,同时,word的值会是你键入的值。