python学习第三天
一 集合
集合是一种无序的元素唯一的数据类型
1列表转换为集合
list = [1,2,3,3,6,8,9,12,12]
list = set(list)
2关系测试
set1 ={1,3,5,7,9}
set2 ={2,4,6,9}
set3 ={1,3}
交集
print(set1.intersection(set2))
print(set1 & set2)
并集
print(set1.union(set2))
print(set1 | set2)
差集
print(set1.difference(set2)) 输出集合set1中存在而集合set2中不存在的元素
print(set1 - ste2)
对称差集
print(set1.symmetric_difference(set2)) 排除set1和set2中都存在的元素
print(set1 ^ set2)
子集
print(set3.issubset(set1))
父集
print(set1.issuperset(set3))
测试两个集合是否没有交集
print(set1.isdisjoint(set3))
3集合操作
添加
set1.add(45)
set1.update([23,23,45])
删除
set1.remove(1)
set1.pop() 随机删除一个元素并显示被删除的元素
set1.discard(33) 删除指定元素,如果该元素在集合中则删除,不在集合中则返回None
求长度
len(set1)
二 文件操作
打开文件
使用open方法:f = open('/root/list.txt',r,encoding="utf-8")
其中open方法中第一个参数是文件路径,第二个参数为文件打开模式,第三个元素为打开文件时使用的字符编码。打开模式有a、a+、r、r+、rb、w、w+、wb,a为写模式,只能写不能读并且写的内容会追加到文件末尾;r为只读模式,只能读不能写,不会清空文件但是文件不存在时会报错;w为写模式,只能写不能读,但是会将文件内容清空后再写入内容。
写文件
data = f.write("asd")
读文件
data = f.read(5) 指定读取的字符数
data = f.readline()
data = f.readlines() 将文件内容以列表形式全部输出
for line in f: 一行一行读取文件,并且内存中只有读取的那行内容
print(line)
关闭文件
f.close()
查询文件指针位置
f.tell() 输出的是已读取得字符数
调整文件指针位置
f.seek(0) 将光标移到指定的字符数的位置
打印文件编码
f.encoding
实时刷新
f.flush() 将缓存的数据实时写入硬盘
截取文件
f.truncate(20) 从文件开始位置截取指定字符数,其余内容清空
修改文件
f = open('test','r',encoding='utf-8')
f_new = open('test1','w',encoding='utf-8')
for line in f:
if "ok" in line:
line = line.replace("ok","no")
f_new.write(line)
f.close()
f_new.close()
with方法
with open() as f,\
open() as f2: 用with方法打开文件当语句执行结束时会自动关闭文件,且可以同时打开多个文件,文件之间用逗号分隔
sys、time模块
import sys,time
for i in range(50):
sys.stdout.write("#") 不换行输出所有结果
sys.stdout.flush()
time.sleep(0.1) 每次输出间隔0.1秒
三 字符编码与转码
不同字符编码间转换都需要先解码(decode)成unicode,再转码(encode)成目标编码,并且在python3.X中数据转码后数据类型都会变成bytes类型。注意,在不申明字符编码时,python2.X的默认编码为ASCII码,python3.X中默认编码为Unicode。另外需要知道当前的默认字符编码时,可以通过sys模块的getdefaultencoding()方法获取
四 函数
函数的优点
代码重用、保持一致性、可扩展
函数定义
def 函数名(参数):
'''函数功能说明'''
函数体
函数返回值
返回值作用是输出函数运行结果
返回值个数为0,返回None
返回值个数为1,返回指定的值或者其他函数的内存地址
返回值个数大于1,返回一个元组
函数参数
函数定义中的参数为形参,调用函数时赋值的参数为实参,函数中赋值给形参的值叫默认参数,调用函数时如果没有传递参数给函数就会使用默认参数。*args,可以接收多个位置参数值,以元组形式显示;**kwargs,使用关键字形式传递参数值,结果以字典的形式显示,可接收多个参数.形参定义时,*args、**kwargs必须写在最后
def test(x,y):
print(x)
print(y)
test(1,2) 使用位置参数传递参数值,传递时按从左向右的顺序传递
test(y=2,x=1) 使用关键字参数传递参数值,传递时与顺序无关
test(1,y=2) 同时使用位置参数和关键参数字传递参数值,位置参数必须在关键字参数前面
def test(*args):
print(args)
test(1,2,3)
test(*[1,2,3])
def test(**kwargs):
print(kwargs['name'])
print(kwargs['age'])
test("name"="alex","age"=22)
test(**{"name":"alex","age":22})
变量作用域
函数中定义的变量只在函数中生效即局部变量,但是用global可以将局部变量声明为全局变量。在程序开头定义的变量在整个程序中生效即全局变量。列表、字典、集合、类等类型的全局变量值可以被局部变量修改
递归
必须有结束条件
每进入更深一层递归时,问题规模必须更小
递归效率不高,递归过多会导致栈溢出
def calc(n):
print(n)
if int(n/2) >0:
return calc(int(n/2))
print('->',n)
calc(10)
高阶函数
将一个函数作为参数传给另一个函数
def add(x,y,f):
return f(x)+f(y)
res = add(3,-6,abs)

浙公网安备 33010602011771号