之前主要使用Java和C++作为自己的编程语言,最近想要全面的学习python,所以开始从基础学起,我是根据廖雪峰老师的[python网站学习](https://www.liaoxuefeng.com/wiki/1016959663602400)学习的,之前用python做项目的时候学习过一点,但是不系统,借此博客把不会的知识点放在这里用以之后的复习。
python用#表示注释
python字符串中如果想要使用一些特殊字符可以用转义字符 \ 来表示
空值用None表示
双除号//表示地板除,相除结果仍然是整数,比如
10//3 结果为3
三种编码:
ASCII编码:只有英文数字和一些特殊的符号,每一个字符占一个字节 Unicode编码:统一了所有语言到一个编码里面,其标准仍然在发展,每一个字符占两个字节 UTF-8编码:可变长编码,Unicode编码中不同的字符编译成不同的字节
classmates = ['Michael', 'Bob', 'Tracy'] len(classmates) #,获得列表的长度,结果为3 # 其访问和数组类似,下表从0开始,如果下标是负数的话表示倒数第几个,如classmates[-2]表示倒数第二个 classmates.append('Adam')# 追加元素 classmates.insert(1, 'Jack') #插入元素 classmates.pop() #删除末尾元素 classmates.pop(1) #删除指定位置元素 classmates[1] = 'Sarah' #直接赋值 s = ['python', 'java', ['asp', 'php'], 'scheme'] #元素类型也不一样,甚至可以包含列表
classmates = ('Michael', 'Bob', 'Tracy') #元组一旦初始化就不能更改,用以代码的安全性
其格式为:
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
字典因为有索引表,所以查找会很快
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
dict的key必须是不可变对象
切片是用来取出列表中某一个范围内的元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] L[0:3] # 取出['Michael', 'Sarah', 'Tracy'] # L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple
字符串’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
迭代就是循环遍历列表或者元组
列表生成器用来生成列表
list(range(1, 11)) #生成[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [x * x for x in range(1, 11)] # 生成[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] [x * x for x in range(1, 11) if x % 2 == 0] #增加了判断,生成[4, 16, 36, 64, 100] [m + n for m in 'ABC' for n in 'XYZ'] #使用两层循环生成全排列['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] # 接下来用来输出文件夹下的文件 import os # 导入os模块,模块的概念后面讲到 [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
生成器generator相对于列表生成器来说她是在循环中生成的
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
def f(x): ... return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) list(r) # 输出[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
过滤
排序函数
sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
sorted([36, 5, -12, 9, -21], key=abs)
比如lambda表达式
list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))