一、python函数
函数是可以重复使用的一段代码,将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可,增强代码的重用性和可读性
二、自定义Python函数
def:表示函数的关键字
函数名:函数的名称,根据函数名调用函数
函数体:函数中进行一系列的逻辑计算
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据
def show(name): #show:函数名,name:参数 print(name) #函数体 return #返回值 show('yoyo') #调用函数
def func(a): a +=1 return a #返回a的值 result = func(4) print(result)
三、参数
普通参数
def show(name): #name是形式参数 print(name) show('yoyo') #yoyo是实际参数
默认参数
#默认参数,必须放在最后 def show(name, age=18): #定义默认参数age print("%s:%s" % (name, age)) show('yoyo') #使用默认参数
yoyo:18
关键字参数
def show(name, age): print("%s:%s" %(name, age)) show(name='yoyo', age=18) yoyo:18
动态参数
def myfun(*params): #参数转换成元组 print("有%d个参数"% len(params)) print("第二个参数是:", params[1]) print(type(params)) myfun('h', 'e', 'l', 'l', 'o') 有5个参数 第二个参数是: e <class 'tuple'>
def show(**arg): #字典 print(arg,type(arg)) show(n1=78,n2=23,n3=66)
{'n1': 78, 'n2': 23, 'n3': 66} <class 'dict'>
def show(*args,**kwargs): #元组和字典 print(args,type(args)) print(kwargs,type(kwargs)) l = [11,22,33] d = {'n1':88,'aa':'bb'} show(*l,**d)
(11, 22, 33) <class 'tuple'> {'n1': 88, 'aa': 'bb'} <class 'dict'>
函数内的变量为局部变量,外部无法访问函数内的局部变量
函数外部的为全局变量,函数内部可以访问,但无法修改全局变量
函数内使用global可以修改全局变量
x = 5 def fun(y): x = 4 #函数内无法修改全局变量 return x * y print(fun(4)) print(x) 16 5 #打印全局变量,结果没变
x = 5 def fun(y): global x #使用global修改全局变量 x = 4 return x * y print(fun(4)) print(x) 16 4 #修改了全局变量
内部函数对外部作用域的变量进行引用,这个内部函数为闭包
def funX(x): def funY(y): return x * y return funY print(funX(8)(5)) 40
内部函数修改外部函数局部变量的值,使用nonlocal
def funX(x): x = 8 print(x) def funY(y): nonlocal x x = 6 return x * y return funY print(funX(8)(5))
四、内置函数
1.all()
a = all([1,2,3,4]) #都为真是真 print(a)
2.any()
a = any(["",[],{},1]) #有一个为真即为真 print(a) #True
3.bin()
b = bin(10) #返回二进制 print(b)
4.bytearray()
p = bytearray('你好',encoding='utf-8') #转换成数组 print(p) #bytearray(b'xe4xbdxa0xe5xa5xbd')
5.bytes()
p = bytes('你好',encoding='utf-8') #转换成字符串 print(p) #b'xe4xbdxa0xe5xa5xbd'
6.chr()
chr(99) #数字转换ascii码
7.ord()
ord('a') #数字转换ascii码
8.enumerate()
li = ['yoyo','alex','eirc'] for i,item in enumerate(li,1):print(i,item) #1 yoyo #2 alex #3 eirc
9.eval()
eval("6*8") #计算
10.map()
l = [11,22,33,44] new_li = map(lambda x:x+100,l) a = list(new_li) print(a) #[111, 122, 133, 144]
11.filter()
def func(x): if x>33: return True else: return False n = filter(func,l) q = list(n) print(q) #44
max(11,22,33) #取最大值 min(11,22,33) #取最小值 hex(100) #16进制 oct(10) #8进制 round(8.9) #四舍五入 dir() #取的是键 vars() #取所有键值对
五、lambda表达式
#普通方法 def func(arg): return arg + 1 result = func(123) #lambda表达式 my_lambda = lambda arg : arg + 1 result = my_lambda(123)