函数:
函数的定义与调用:
#函数定义 def my_len(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函数调用 my_len()
1. def 关键字,定义函数,加空格,函数名(变量)。
2. 函数名+(),就要执行此函数。
3. 函数是以功能为导向,函数内部尽量不要有 print。
1, 函数的返回值:
return
return
函数当中遇到 return程序就会终止,并且也就结束了。
1, 不写 return 返回 None
def daxiao(): if 1 > 0: return print(daxiao())
2,return None 返回 None
def daxiao(): if 1 > 0: return None print(daxiao())
3, 单个值,返回此单值
def fanc(): if 1 > 0: return'ghg' print(fanc())
4, 将多个值包在元祖中,返回给调用者次元组
def fanc(): if 1 > 0: return 1,2,3,111,222 print(fanc())
2, 函数的参数
1, 传参: 传参的形式有 形参(形式参数),实参(实际参数)。
1.1 从实参的角度:
① 按位置传参
def my_max(x,y): z = x if x > y else y return z r = my_max(10,20) print(r)
② 按关键字传参
def my_daxiao(x,y): z = x if x > y else y return z r = my_daxiao(x = 20,y = 10) print(r)
③ 混合传参 关键字参数永远在参数后面
def my_daxiao(a,b,x,y): print(x,y,a,b) z = x if x > y else y return z r = my_daxiao(1,2,x = 20,y = 10) print(r)
1.2 从形参的角度
① 位置参数
位置参数必须传值
def my_daxiao(a,b,x,y): print(x,y,a,b) z = x if x > y else y return z #调用 my_daxiao不传递参数 r = my_daxiao() print(r)
②默认参数
def stu_info(name,sex = "male"): """打印学生信息函数,由于班中大部分学生都是男生, 所以设置默认参数sex的默认值为'male' """ print(name,sex) stu_info('alex') stu_info('eva','female') 默认参数
3, 动态参数(形参)
位置参数
3.1 *args(包含在元祖所有的位置参数)
def fuce(*arge): print(arge) fuce(1,2,3,'alex',4,5)
3.2 **kwargs (包含在字典中的所有关键字参数)
def func(**kwargs): print(kwargs) func(a = 1,b = 3, c = 5)
*arge 和 **kwargs 组合
def func(a,b,c,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) func(1,3,5,6,'alex','taibai',x = 2,y = 1,z = 0)
万能参数:
def func(*args,**kwargs): print(args) print(kwargs) func(1,2,3,4,name = 'lzg',sex = 'man')
魔法运算:打散
def func(*args,**kwargs): print(args) l1 = [1,2,3,4,5] l2 = {'a':1,'b':2} func(*l1,*l2,)
4, 名称空间(命名空间),局部 全部:
名称空间分三种:
1, 全局名称空间
2, 局部名称空间
3, 内置名称空间
加载顺序:
内置命名空间 ——>全局名称空间 ——>局部名称空间
(函数调用时可用到局部名称空间)
取值顺序:
在局部调用:局部命名空间->全局命名空间->内置命名空间
在全局调用:全局命名空间->内置命名空间
作用域:按照生效范可以分为全局作用域和局部作用域。
全局作用域包含:全局名称空间,内置名称空间
局部作用域包含:局部名称空间
5,global(全局变量),nonlocal(局部变量)关键字
global:
1, 声明一个全局变量。
2,引用全局变量,并改变(限于字符串,数字)。
第一种情况:
def func(): global a a = 2 func() print(a)
第二种情况: count = 1 def func(): global count a = 2 func() print(a)
nonlocal:
1, 不能修改全局变量
2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
def add_b(): # b = 42 # def do_global(): # b = 10 # print(b) # def dd_nonlocal(): # nonlocal b # b = b + 20 # print(b) # dd_nonlocal() # print(b) # do_global() # print(b) # add_b()
函数的嵌套:
def fun2(): print(222) def fun3(): print(666) fun3() fun2()
print(111) # def fun2(): # print(222) # def fun3(): # print(666) # print(444) # fun3() # print(888) # print(333) # fun2() # print(555)
---恢复内容结束---