一、为什么要用函数
1.避免代码重用
2.提高代码的可读性
二、函数的定义
def 函数名(参数1,参数2):
'''函数注释'''
print("函数体")
return "返回值"
三、函数调用
返回值 = 函数名(参数1,参数2)
函数定义——返回值
关键字:return
return的作用:
1.结束函数的执行
2.返回要返回的值
返回值的两种情况:
<1>返回值为None:
ef mylen(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) str_len = mylen() print(str_len)
def ret(): print(111) return print(222) re = ret() print(re)
def ret(): print(111) return None print(222) re = ret() print(re)
<2>返回值不为None
1.返会一个值
def mylen(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 return length str_len = mylen() print(str_len)
2.返回多个值
函数调用——接收返回值
返回值为None 不接收
返回值不为None
1.返会一个值
用一个变量接收
2.返回多个值
用一个变量接收,接收的结果是一个元组
有多少个返回值就用多少个变量接收
四、参数——站在定义函数的角度上
1.位置参数
2.默认参数
3.动态参数
*args
**kwargs
顺序: 位置参数 *args 默认参数 **kwargs
(2)参数——站在调用函数的角度上
1.按照位置传参
2.按照关键字传参
3.动态传参 *tup **dic
(3)参数分为形参和实参
实参:调用函数的时候传入的参数
(4)位置参数
位置参数必须传值
def aaa(a,b): print(a,b) aaa(1,2)
(5)默认参数
默认参数可以不传值
def bbb(x=10): print(x) bbb() #x = 10 bbb(20) #x = 20
(6)动态参数
def ccc(*args):#1,2,3,4,5 print(args) ccc(1,2,3,4,5)#按位置传参数 t = (1,2,3,4,5) ccc(t) ((1, 2, 3, 4, 5),) ccc(*t) (1, 2, 3, 4, 5)
def ddd(**kwargs): print(kwargs) ddd(k = 'a',j = 'b')#按关键字传参数
def eee(*args,**kwargs): print(args,kwargs) eee(12,123)
内置函数
1、isinstance 判断变量的数据类型
temp = "asdfsdfs" r = isinstance(temp, list) print(r)
2、lambda用法:
def f1(): return 123 f2 = lambda :123 r1 = f1() r2 = f2() print(r1,r2)
def f3(a1,a2): return a1 + a2 f4 = lambda a1,a2: a1 + a2 r3 = f3(1,2) r4 = f4(3,4) print(r3,r4)
3、abs--取绝对值
i = abs(-123) print(123)
4、divmod 除商得余数---例如分页
a = 10 / 3 print(a) r = divmod(10,3) print(r) 结果: 3.33333335 (3,1)
5、eval -----强制不转换输入类型的格式
ret = eval("1 + 3") print(ret) 结果:4
6、filter (过滤)
ret = filter(lambda x: x >22, [11,22,33,44]) for i in ret: print(i)
7、map 无论是map还是filter,得到的结果都是可迭代的对象,迭代器的实例
def f1(x): if x % 2 == 1: return x + 100 else: return x ret = map(f1, [1,2,3,4,5]) ret2 = map(lambda x: x + 100if x % 2 == 1 else x ,[1,2,3,4,5]) print(ret) for i in ret : print(i)
def comp(y): c = y > 11 return c ret1 = map(comp, [1,2,4,11,22, 33]) for i in ret1: print(i)
8、max()最大数 min() 最小数
li = [11,22,123,1] r = max(li) print(r) a = min(li) print(a)
9、pow(x,y) ----就是求x的y次方
i = pow(2,100) print(i)
10、zip ---意思就是取两个变量中索引相对应的值
li1 = [11,22,33,44] li2 =["a",'VV',"c","E"] r = zip(li1,li2) print(r) for i in r : print(i)
11、open---打开,关闭,close
模式 描述 r 打开一个文件为只读。文件指针被放置在文件的开头。这是默认模式。 rb 打开一个文件只能以二进制格式读取。文件指针被放置在文件的开头。这是默认模式。 r+ 打开用于读和写文件。文件指针置于该文件的开头。 rb+ 打开用于读取和写入二进制格式的文件。文件指针置于该文件的开头。 w 打开一个文件只写。如果文件存在覆盖该文件。如果该文件不存在,则创建写入新文件。 wb 打开一个文件只能以二进制格式写入。如果文件存在覆盖该文件。如果该文件不存在,则创建写入新文件。 w+ 打开文件为写入和读取模式。如果文件存在覆盖现有文件。如果该文件不存在,创建用于读写操作的新文件。 wb+ 打开用于以二进制格式写入和读出文件。如果文件存在覆盖现有文件。如果该文件不存在,创建用于读写操作的新文件。 a 打开用于追加的文件。文件指针是在文件是否存在该文件的末尾。也就是说,该文件是在追加模式。如果该文件不存在,它会创建一个用于写入的新文件。 ab 打开文件用于二进制格式追加。文件指针是在文件是否存在该文件的末尾。也就是说,文件是在追加模式。 如果该文件不存在,它会创建一个用于写入的新文件。 a+ 打开文件为追加和读取方式。文件指针是在文件是否存在该文件的末尾。该文件以追加模式打开。如果该文件不存在,它将创建用于读写操作的新文件。 ab+ 打开一个文件以附加和二进制格式读取模式。如果该文件存在文件指针在该文件的末尾。该文件以追加模式打开。如果该文件不存在,它将创建读写操作的新文件。
(1)、只读,r
f = open("路径文件","r") f.write("asdfasdf") f.close()
(2)、w只写模式【不可读;文件不存在则创建;存在则清空内容】
f =open("ha1.log",'a') a1 = f.tell() ---查看指针位置 print(a1) f.write("nini") ----如果文件存在清空后出现”nini“ a = f.tell()----在查看指针 print(a) f.seek(0) #c = f.read() ----不可读 #print(c) f.close() -----------关闭 #print(c)
(3)、x 不可读,不存在则创建,存在则报错
f =open("ha3.log",'x') a1 = f.tell() print(a1) f.write("nini") a = f.tell() print(a) f.seek(0) #c = f.read() ---=不可读 #print(c) f.close()
(4)、a 不可读,不存在则创建,存在则只追加
f =open("ha3.log",'a') a1 = f.tell() print(a1) f.write("cccc")-----上面已经写入了"nini " ,存在则只追加内容 a = f.tell() print(a) f.seek(0) #c = f.read() #print(c) f.close()