本节内容:
1、集合(去重与关系测试)
2、文件操作
3、函数
----------------------------------------------------------------------------/-----------------------------------------------------------------
1、集合
(去重与关系测试)
1.1
集合是一个无序的,不重复的数据组合,它的主要作用如下:
•去重,把一个列表变成集合,就自动去重了
•关系测试,测试两组数据之前的交集、差集、并集等关系
1.2 基础操作
1.创建集合,集合会自动去重,集合是无序的
>>> s = set([1,2,3,4,4,4])
>>> s
{1, 2, 3, 4}
>>> s = set("Hello")
>>> s
{'e', 'l', 'H', 'o'}
2.符号操作
>>> a = set([1,2,3,4])
>>> b = set([2,3,7,8,9])
>>> c = a|b #求两个集合的并集
>>> c
{1, 2, 3, 4, 7, 8, 9}
>>> c = a&b #求两个集合的交集
>>> c
{2, 3}
>>> c = a-b #求两个集合的差集,注意谁在前谁在后结果不一样,即a有,b没有的
>>> c
{1, 4}
>>> c = b-a #差集,即b有,a没有的
>>> c
{8, 9, 7}
>>> c = a^b #对称差集,即a与b的并集减去a与b的交集,也就是求只在a出现或者只在b出现的元素集合
>>> c
{1, 4, 7, 8, 9}
3.集合修改
>>> s
{'e', 'l', 'H', 'o'}
>>> s.add(6) #添加一项
>>> s
{'e', 'l', 'H', 'o', 6}
>>> s.update(["add",5,7878]) #添加多项
>>> s
{5, 6, 7878, 'e', 'o', 'add', 'l', 'H'}
t.remove('H') #删除一项
len(s) #查看集合长度
x in s #若x元素在s集合中返回True
x not in s #
若x元素不在s集合中返回True
1.3 关系测试
s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中
s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中
s.union(t)
s | t
返回一个新的 set 包含 s 和 t 中的每一个元素
s.intersection(t)
s & t
返回一个新的 set 包含 s 和 t 中的公共元素
s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素
s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s 和 t 中不重复的元素
s.copy()
返回 set “s”的一个浅复制
2、文件操作
2.1 打开文件
open(name[.mode[.buffering]])
name是文件路径(名字);mode是模式(可选);buffering是缓冲(可选)
例如: f = open(r‘C:\test\somefile.txt’)即打开C盘的somefile.txt文件,若C盘无此文件将会出现异常
值 | 描述 |
‘r’ | 读模式 (可省略,因为默认打开文件是r模式) |
‘w’ | 写模式 |
‘a’ | 追加模式 |
‘b’ | 二进制模式(可添加其他模式使用) |
‘+’ | 读/写模式(可添加其他模式使用) |
2.2 基本操作
2.2.1 读写文件
写文件:
>>> f = open('someflie.txt','w')
>>> f.write('Hello,')
6
>>> f.write('World!')
6
>>> f.close()
读文件:
>>> f = open('someflie.txt','r')
>>> f.read(4)
'Hell'
>>> f.read()
'o,World!'
2.2.2 读写行
readline函数可以一次性读出文件的一行字符
readlines函数可以一次性读取文件所有字符,每一行为一个元素,以列表的形式呈现
2.2.3 关闭文件
close()
3、函数
3.1 创建函数
3.1.1 用callable函数判断一个函数是否可以被调用
>>> import math
>>> x = 1
>>> y = math.sqrt
>>> callable(x)
False
>>> callable(y)
True
3.1.2 以def为关键字创建函数
>>> def hello(name):
return print("Hello,",name+'!') ——如果想return多个参数可以用元组
>>> hello('xasdsa')
Hello, xasdsa!
3.1.3 文档化函数
如果在函数或者模块的开头写下字符串,它会作为函数的一部分进行存储,这称为文档字符串
>>> def hello(x):
'zhe shi yi ge wen dang zi fu chuan'
return x*x
>>> hello(6)
36
>>> help(hello) ——————可以用help来查看
Help on function hello in module __main__:
hello(x)
zhe shi yi ge wen dang zi fu chuan
3. 1.4 python中的函数可以只有一个return,而不return任何东西,系统会默认返回 None
3.2 函数的使用
3.2.1 参数作用域
例子1:
>>> def try_to_change(n):
n = 'ABC'
>>> name = "DEF"
>>> try_to_change(name)
>>> name
'DEF' ——字符串是不能被改变的
例子2:
>>> def try_to_change(n):
n[0] = 'ABC'
>>> name = ['DEF','KJJK' ]
>>> try_to_change(name)
>>> name
['ABC', 'KJJK'] ——列表是可以被改变的,形参和实参变量指向了同一个列表
例子3:
>>> def try_to_change(n):
n[0] = 'ABC'
>>> name = ['DEF','KJJK' ]
>>> try_to_change(
name[:]
) ——把name复制了一个新列表传给形参,所以后面的name列表不被改变
>>> name
['DEF', 'KJJK']
3.2.2 关键字参数和默认值
函数在传值的时候除了可以用位置参数的方式,还是根据形参名来传参数,这样子的方式不需要按照特定顺序
>>> def hello(greeting,name):
print("%s,%s!"%(greeting,name))
>>> hello('zxcz','zxczx')
zxcz,zxczx!
>>> hello(name = "king",greeting = "hei")
hei,king!
注意这样是不行的
>>> hello('King',greeting = "hei")
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
hello('King',greeting = "hei")
TypeError: hello() got multiple values for argument 'greeting'
#也可以在定义函数时给定默认形参值(在调用函数时可以修改)
>>> def hello(name = "King",greeting = 'hei'):
print("%s,%s!"%(greeting,name))
>>> hello()
hei,King!
>>> hello('James','hello')
hello,James!
>>> hello(name = "K",greeting = 'hi')
hi,K!
3.2.3 收集参数
用‘ * ’ 来收集位置参数,会生成一个元组
用‘ ** ’来收集关键字参数,会生成一个字典
例子1:
>>> def hello(*data):
print(data)
>>> hello('zxczx','sdds',651,'az')
('zxczx', 'sdds', 651, 'az')
例子2:
>>> hello('zxczx','sdds',651,'az')
zxczx
('sdds', 651, 'az')
例子中的*data就是用来收集剩余的位置参数的,若没有,则返回一个空元组
>>> def hello(**name):
print(name)
>>> hello(x=1,y=2,z=3)
{'x': 1, 'y': 2, 'z': 3}
#把 * 和 ** 联合起来用
>>> def hello(x,y,z=3,*A,**B):
print(x,y,z)
print(A)
print(B)
>>> hello(1,2,3,5,6,7,8,go = 15,back ='zxc')
1 2 3
(5, 6, 7, 8)
{'go': 15, 'back': 'zxc'}
>>> hello(1,2)
1 2 3
()
{}
3.2.4 参数收集的逆过程
可以在函数定义或者调用时用*来引入元组(列表),用**来引入字典
例子1:
>>> def add(x,y):
return x+y
>>> a = [1,2]
>>> add(*a)
3
例子2:
>>> def a(**hei):
print(hei['name'],'is',hei['age'],'years old')
>>> k ={'name':'King','age':26}
>>> a(**k)
King is 26 years old
3.3 讨论全局变量与局部变量
在函数内创建赋的值默认是局部变量,无法影响外部的全局变量,但是也可以通过处理把局部变量变成全局变量
>>> x = 1
>>> def change():
x = 5
return
>>> change()
>>> x
1
>>> x = 1
>>> def change():
global
x
x = 5
return
>>> change()
>>> x
5