字符串:不可在原内存上修改
一、集合
1. 集合的主要功能:
(1)去重:把一个列表变成集合,就自动去重了
(2)关系测试:测试两组数据之间的交集、差集等。
集合是无序的,所以也没有位置下标。
2. 集合操作
A.intersection(B) ——求交集,等价于A&B
A.union(B)——求并集,等价于A|B
A.difference(B)——求差集(A中有,B中无)等价于A-B
A.issubset(B)——判断A是不是B的子集 等价于 A<=B
A.issuperset(B)——判断A是不是B的父集,等价于A>=B
A.symmetric_different(B)——求A、B交集的补集,等价于A^B
A.isdisjoint(B) 判断A和B是否无交集
A.add(项)在集合中添加一项
A.update([10,37,42])添加多项
A.remove(项),删除项
A.pop(项),随机删除一项并返回该项。
A.disgard(项),项存在就删除,不存在就跳过
二、文件操作
1.文件打开格式1
此种方式打开后不会自动关闭,除非程序运行结束。所以需要人为关闭,即加上f.close()语句
2.文件打开格式2
1 with open('文件名','打开方式',编码方式) as f: 2 3 同时打开多个: 4 with open('log1') as obj1,open('log'2)as obj2:
3.文件的打开方式:
r:只读
w:只写,若已经有内容则擦除再写
rb:只读二进制
wb:只写二进制
a:在文件内容末尾增加内容
r+:读写,= a+r
w+:写读,= w+r
a+:追加读写
3.文件读取:
将整个文件读取为字符串:
data = f.read()
读完后,f内指针指向最后,若此时再次读取:
data2 = f.read()
由于指针已经在最后,所以data2没有内容。
4.读取文件的循环方式:
1 for line in f: 2 print(line)
其中f不是列表,二是迭代器,想将文件存为列表需要写逐行存入列表语句。
f.tell()——返回文件句柄指针所在位置
f.read(数)——可读指定个数字符,并将指针停留在相应位置
f.seek()将指针返回到特定位置,一般是返回到开头,即默认0.
f.encoding ——返回编码规则
f.truncate(数)——从开始截取指定数量的内容,多出部分删除。
f.flush()——将内容由内存强制(实时)刷到硬盘上
打印进度条
三:字符编码(待完善)
不同字符编码之间相互转换都要经过unicode,python 2.x中默认的编码方式是ascii,故要在开头声明使用utf-8才能正确显示中文,python3.x中默认的编码方式是unicode,故不需要声明。
# -*- coding:utf-8 -*-
四、函数
1. 面向对象:以“类”为特征
面向过程:以“过程”为特征
函数式编程:以“函数”为特征,“函数式”指的是一种方法论。
过程和函数的区别:
过程没有返回值(仅定义一些操作),函数有返回值(return),python中过程就是没有返回值(return none)的函数。
使用函数的优点:1.代码重用,2.保持一致性,3.可扩展性
2. 返回值:函数返回一个执行结果,便于下一步操作。
python可返回多个值:
return 1,'a','weng',['a','b']
当返回多个值时,其实返回的是一个元组。
返回值数量=0:返回none
返回值数量=1:返回object
返回值数量>1:返回tuple
注:函数中return之后的语句得不到执行,即函数执行到return就停止。
3.函数调用:
位置参数:位置实参按照顺序传给位置形参
关键字参数:关键字参数可不按顺序调用
test(y=2,x=1)
关键字参数和位置参数混用时,关键字参数必须放在位置参数之前,同时应该避免关键字参数和位置参数重复比如
test(1,x=2)(两个参数都传给了x)
默认参数:调用函数时,若不传入则使用默认值。默认参数在调用时可以不写。
可变参数:当参数个数不确定的时候,在定义函数时,采用“*参数名”(一般是*args)的形式作为可变参数,可以接收若干个不同的实参。
键-值对参数:**kwargs
实参以:key=value的形式出现,被当做键值对处理为一个字典
当出现多类型参数,编写顺序为:位置参数——默认参数——可变参数:
五、局部变量和全局变量
局部变量:子程序(往往是函数)中定义的变量,只在子程序内起作用,子程序就是该变量的作用域。
全局变量:要在第一层定义,对于Int和str类的全局变量,不能通过局部变量修改,其他类型如list等则可以通过局部变量,即函数内部修改。
在函数中修改全局变量的方法:
六、
递归函数:函数在内部调用本身
1. 特征:(1)必须有一个明确的结束条件 (2)每进入更深一层递归时,问题规模相比上一层都应有减少(3)递归效率不高,容易栈溢出。
七、
高阶函数:变量可以指向函数,函数的参数能接收变量,一个函数接收另一个函数最为参数,则为高阶函数。
高阶函数主要分为两类:(1)把函数名当做参数传给另外一个函数
(2)返回值中包含函数名
1 import time 2 def bar(): 3 time.sleep(2) 4 print("in the bar") 5 6 def test2(func): 7 print(func) 8 return func #返回func的内存地址,即原本bar()的地址 9 bar = test2(bar) 10 bar()
八、嵌套函数
在函数定义中定义新函数。
def fool(): print('in the foo') def bar(): print('in the bar')
bar()是在fool()中定义的函数,执行fool()时,就会定义这个bar(),但是bar()不会在执行fool时执行,因为执行fool()只是定义bar()。要执行bar()需要在fool()中返回bar()地址。然后执行。