前言
在实验楼根据python路线学习了基础,把一些知识点记录下来方便记忆
基本特性
赋值
a, b = b, a + b
表示先对右边的表达式运算,再把运算的值给左边,即等价于
t1=b
t2=a+b
a=t1
b=t2
列表
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
+ [a:b:c]
切片索引
左边第一个元素的索引为 0,而长度为 n 的列表其最后一个元素的右界索引为 n。
省略的第一个索引默认为零,省略的第二个索引默认为切片的字符串的大小.
一个过大的索引值将被列表实际长度所代替,当上边界比下边界大时返回空列表.
c是步长,每隔c个字符取值,默认为1
对切片赋值,可以改变列表的尺寸,或清空它:
letters[2:5] = [‘C’, ‘D’, ‘E’]
letters[:] = []
'c' in letters
检查值的存在
if 列表名
检查列表为空
多维嵌套:
x=[[‘a’, ‘b’, ‘c’], [1, 2, 3]]
x[0][1]=’b’
+ for循环
for x in a
或者for x in a[a:b:c]
+ 生成等差序列
for x in range(a,b,c)
list(range(a,b,c))
+ 对列表元素操作的函数
len(列表名)
长度
append(元素)
添加元素到末尾
insert(位置,元素)
在索引位置插入元素
count(元素)
统计元素数目
remove(元素)
删除所有等值元素
列表[t:t+1]=[]
或者del 列表[t]
删除指定位置元素
reverse()
反转列表
a=a+b
或者a=extend(b)
连接两个列表a和b
for i,x in enumerate(序列名)
返回索引的位置和元素值
+ 列表推导式
squares = [x**2 for x in range(10)]
或者p = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
或者z = [x + 1 for x in [x ** 2 for x in a]]
+ 同时遍历两个序列类型,你可以使用 zip()
a = [‘Pradeepto’, ‘Kushal’]
b = [‘OpenSUSE’, ‘Fedora’]
for x, y in zip(a, b):
print(“{} uses {}”.format(x, y))
Pradeepto uses OpenSUSE
Kushal uses Fedora
+ 遍历列表(或任何序列类型)的同时获得元素索引值,你可以使用 enumerate()
for i, j in enumerate([‘a’, ‘b’, ‘c’]):
print(i, j)
0 a
1 b
2 c
元组
不可变类型
创建只含有一个元素的元组,在值后面跟一个逗号。
a=(123,)
可以执行拆封操作并赋值给多个变量
x, y = divmod(15,2)
集合
集合是一个无序不重复元素的集
{}
或者set()
来创建
字典
字典是是无序的键值对(key:value)集合,键是不可变类型.
+ 创建新的键值对
字典[newkey]=newvalue
+ dict()
可以从包含键值对的元组中创建字典。
dict(((‘Indian’,’Delhi’),(‘Bangladesh’,’Dhaka’)))
得到{‘Indian’: ‘Delhi’, ‘Bangladesh’: ‘Dhaka’}
+ 遍历字典
for x, y in data.items()
+ 查找键的值
如果字典中包含有给定键,则返回该键对应的值;
如果没有这个键,则创建一个新的键值对,返回为该键设置的值(不写第二个参数默认是None,写了就是值)。
字典.setdefault(key, default=None)
+ 索引
用字典[key]索引不存在的key会报错,采用get()函数能不报错返回指定值.
字典.get(key,default=None)
字符串
s=”you are good”
+
直接连接字符串
swapcase
()大小写交换
isalnum
()检测全为字母数字
isalpha
()只有字母
strip
(剥离字符)默认剥离左边空格和右边换行符,还有lstrip和rstrip
split
(分割符)用分割符划分字符串为列表,默认为空格
find
(目标字符串)用来在原字符串找目标字符串,返回目标字符串首字符的位置
连接符.join(列表)
用连接符连接成字符串
s=”you are good”
print(“-“.join(s.split()))
you-are-good
高阶函数
使用一个或多个函数作为参数,返回另一个函数作为输出
+ map(函数,列表)
把列表的每个元素变成对应函数值,生成新列表。这个函数里边可以是查字典dict方法,也可以是匿名函数单表达式lambda
+ reduce(函数,列表)和 reduce(lambda 变量:变量处理方法,列表)
是把列表前后两个值按函数累计起来,得到的值继续和下个元素累计。
+ reduce(lambda x,y :x+(y/10**len(str(y))) ,map(int,s.split('.')))
整数和小数部分分开成列表两个元素,小数部分的数除10^长度来变成小数
+ filter(函数,列表)筛选函数
构建列表里每个值满足函数的新的惰性列表
+ sorted(列表,key=定义大者函数,反转reverse=1)
用来排序
+ 新函数名=functools.partial(旧函数名,初始化的参数)
偏函数
文件
fobj=open(文件名,r/w/a)打开文件,默认为r
close()关闭文件
read()读整个文件
readline()读一行
readlines()读多行到列表
for x in fobj也可以读多行
import sys
if len(sys.argv) < 3:
print(“Wrong parameter”)
print(“./copyfile.py file1 file2”)
sys.exit(1)
f1 = open(sys.argv[1])
s = f1.read()
f1.close()
f2 = open(sys.argv[2], ‘w’)
f2.write(s)
f2.close()
with
open(‘sample.txt’) as fobj:能自动使用关闭文件
异常
try..except...
为例外指定处理
raise
语句允许程序员强行产生指定的例外
finally
在任何情况下都一定要执行
模块
if __name__ == '__main__':
当模块被执行时,这个作为主函数执行;当模块被导入时,这个部分不执行.
高级特性
迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型
__iter__()
,返回迭代器对象自身。这用在 for 和 in 语句中。
__next__()
,返回迭代器的下一个值。如果没有下一个值可以返回,那么应该抛出 StopIteration 异常。
生成器
生成器是一次生成一个值的特殊类型函数.在 While 循环中,每当执行到 yield 语句时,返回指定变量
生成器表达式
迭代和列表解析的组合
闭包
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用
装饰器
返回包装对象实现间接调用,以此插入额外逻辑。@functools.wraps(原函数) 将原函数对象的指定属性复制给包装函数对象。
面向对象编程
- 创建类
class 类名 (object):
def init(self,。。。)
类中的函数都要加(self) - 函数等级
前无下划线的函数的公开函数。
_函数
单下划线的是类和子类可访问的保护函数
__函数
双下划线的仅是类可访问的私有函数
__函数__
两边双下划线的是特殊函数 - 封装
客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏 - 继承:让某个类型的对象获得另一个类型的对象的属性的方法。
- 多态:一个类实例的相同方法在不同情形有不同表现形式。
面向对象的高级编程
__slots__
= (属性名1,属性名2.。。。)限制类可绑定的属性名,对其子类无效。- 两个把函数变成类的属性方法函数装饰器,体现读写性。
@property
能把获取值函数变成类属性来返回值,即读。
@函数名.setter
能够把设定值方法变成类属性来检查和赋值,即写。 - 多重继承
子类(父类1,父类2,。。。)