python基础篇(三)
一、集合
集合是一个无序的,不重复的数据组合,主要功能如下:
- 去重,把一个列表变成集合时,会自动把重复的去掉
- 关系测试,测试两组数据之间的交集、并集、差集等关系
基本操作
# 定义两个集合 >>> s = set([1,2,3,4]) >>> s set([1,2,3,4]) >>> t = set('hello') >>> t set(['h', 'e', 'l', 'o']) # 已经把hello中的两个l,去重 # 求并集 >>> a = s | b >>> a set([1, 2, 3, 'e', 'h', 'l', 'o', 4]) # 求交集 >>> b = s & b >>> b set([]) # 求差集 >>> c = s - t >>> c set([1, 2, 3, 4]) # 对称差集 >>> d = s ^ t >>> d set([1, 2, 3, 4, 'h', 'l', 'o', 'e']) 其它操作 # 定义两个集群 >>> s = set([1,2,3,4]) >>> t = set('hello') # 增加一项 >>> t.add('bb') >>> t set(['bb', 'h', 'e', 'l', 'o']) # 增加多项 >>> s.update([6,7,8]) >>> s set([1, 2, 3, 4, 6, 7, 8]) # 删除 >>> s.remove(1) >>> s set([2, 3, 4, 6, 7, 8]) # 查集合的长度 >>> len(s) 6 # 测试 x 是否是 s 的成员 >>> "x" in s Flase # 测试 x 是否不是 s 的成员 >>> "x" not in s True # 复制 >>> s.copy()
二、文件操作
1. 读
>>> f = open('text.txt', 'r') # r 表示以只读的方式打开文件,不能写 >>> for line in f: ... print(line.strip()) # line.strip() 去除多余的回车 ... aaa 123 bbb 345 ccc 789 ddd 135 eee 246 >>> f.close() #关闭文件 >>> f = open('text.txt', 'r') # read 读取文件内所有的内容,返回是字符串 >>> f.read() 'aaa 123\nbbb 345\nccc 789\nddd 135\neee 246\n' >>> f.read() # 文件的指针已在最末尾,所以读不到文件 '' >>> f.seek(0) # 把文件的指针重新指向初初的位置0 # readline 一行一行的读取文件中的内容,每次只读取一行,返回是字符串 >>> f.readline() 'aaa 123\n' >>> f.readline() 'bbb 345\n' >>> f.readline() 'ccc 789\n' >>> f.readline() 'ddd 135\n' >>> f.readline() 'eee 246\n' >>> f.readline() '' >>> f.seek(0) # readlines 读取文件内所有的内容,返回是列表 >>> f.readlines() ['aaa 123\n', 'bbb 345\n', 'ccc 789\n', 'ddd 135\n', 'eee 246\n'] >>> f.close() #关闭文件
2. 写
# w表示写,但是使用时,会先清空文件里之前的内容,若是不存在刚创建 >>> f = open('test.txt', 'w') >>> f.write('Hello,world!!!') >>>f = open('test.txt', 'r') >>>for line in f: ... print(line) ... Hello,world!!! >>> f.close() #关闭文件
3. 追加(写)
# a 表示追加,即用此种文件打开,只会在文件最后写入,不会清空文件的内容 >>> f = open('test.txt', 'a') >>> f.write('Second Hello!!') >>> f = open('test.txt', 'r') >>> for line in f: ... print(line) ... Hello,world!!!Second Hello!! >>> f.close() #关闭文件 #已在最后追加上
4. with 语句
用with语句的好处就是不需要再另外写一行去关闭操作的文件
#打开文件用with避免打开文件忘记关闭
with open('test.txt' 'r') as f:
pass
# 也可以同时打开多个进程操作
with open('log1', 'r') as obj1, oepn('log2', 'r+') as boj2:
pass
关于open模式
w 以写方式打开, a 以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 (参见 w ) a+ 以读写模式打开 (参见 a ) rb 以二进制读模式打开 wb 以二进制写模式打开 (参见 w ) ab 以二进制追加模式打开 (参见 a ) rb+ 以二进制读写模式打开 (参见 r+ ) wb+ 以二进制读写模式打开 (参见 w+ ) ab+ 以二进制读写模式打开 (参见 a+ )
flush 从内存中刷新到磁盘中
三、函数
1. 函数基本语法及特性
- 避免使用过多的重复代码,提高效率
- 方便日后的修改、更新
# 定义函数
def hello():
print('Hello,World!')
# 调用函数
hello()
2. 函数的参数
# 定义一个函数
def hello(x,y): # 这里定义的x,y是函数的形参
print('hello',x,y)
# 位置参数
hello('jace','maker') # 这里的jace maker是函数的实参
#输出
hello jace maker
#关键参数
hello('jace',y='mac')
#输出
hello jace mac
#注: 关键参数一定不能写在位置参数的左边
非固定参数
# 定义一个函数 def name(x, y ,*args): # 这里的*args 表示可以输入大于等于0个参数 print(x, y, *args) name('jack', 'macker') #输出: jack macker #传入更多的实参 name('jack', 'macker', 'xiao', 'dajia') #输出: jack macker xiao dajia #如果在输出的时候把args前面的*号去掉,就会把传入的随机参数输出成元组形式 jack macker ('xiao', 'dajia') ###还有**kwargs,这个可以传入字典的格式 def status(name, age, *args, **kwargs): print(name, age, args, kwargs) status('jace', '22', '123abc', 'ABC', sex='Male', ligin=55) #输出: jace 22 ('123abc', 'ABC') {'ligin': 55, 'sex': 'Male'}
3.局部变量和全局变量
4. 递归
在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,那这个函数就是递归函数。
def calc(n): print(n) if int(n/2) == 0: return n return calc(int(n/2)) calc(10) 输出: 10 5 2 1
递归特性:
- 有明确的结束条件
- 问题规模每递归一次都应该比上一次的问题规模有所减少
- 效率低
5. 匿名函数
res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
print(i)
# 再来个一例子,把列表中的偶数加100
l1 = [11,22,33,44,55]
ret = list(map(lambda x: x + 100 if x % 2 == 0 else x, l1))
print(ret)
[11,122,33,144,55]
# abs 相当于取绝对值
a = -3
abs(a)
3
匿名函数与列表生成一起使用,屌的不行
# 匿名函数与列表生成一起使用 s = list(map(lambda x: x+100 if x % 2 == 0 else x, [x for x in range(10)])) print(s) [100, 1, 102, 3, 104, 5, 106, 7, 108, 9]
6. 返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
浙公网安备 33010602011771号