语法:
def + 函数名():
函数体/代码块
调用:函数名()
return 不写返回None,写了不写值返回None,多个返回值显示的是元组
return 返回的内容不受限制 谁调的,返回谁
return 以下代码不执行,终止函数
eg:
1 def yue(name,name1): # 括号内的是形参 2 print('乔狗去约了一条小母狗') 3 print('俩人开了一个房间') 4 print('一晚上没出来') 5 return '惨不忍睹啊' 6 print(yue())
参数:
定义的参数是 形参
调用的参数是 实参 # 形参和实参的数量要一致
从实参到形参的过程叫传参
被使用的形参会变色
yue('乔狗','乔二狗') # 位置参数
yue(name='乔狗',name1='乔二狗') # 关键字参数
yue('乔狗',name1='乔二狗') # 混合参数
eg:
1 def func(name,age,addr,sex='男'): 2 print(f'{name},{age},{addr},{sex}') 3 func('乔狗',20,'鸡西') 4 func('乔二狗',22,'哈尔滨') 5 func('乔二哈',23,'北京') 6 func('乔二拆',24,'上海')
不写其他值,sex默认为男,写了添加自己写的值。
介绍一下无敌传参:
1 def func(*args,**kwargs): #用此方法万能传参 2 print(args) 3 print(kwargs) 4 func(1,2,3,a=4,b=5)
位置参数 > 关键字参数
讲一下形参的位置:
位置 *args 默认值 **kwargs
1 def chi(*food): 2 print(food) 3 chi("大米饭") 4 chi("大米饭","炒鸡蛋") 5 chi("大米饭","炒鸡蛋","吃完就滚蛋") 6 chi("大米饭","炒鸡蛋","兄dei你还吃吗?")
动态传参:
*,**:
形参:聚合
位置参数 * 得到元组
关键字** 得到字典
实参:打散
列表,字符串,元素 —>*
字典 —>**
位置参数聚合:
1 def func(a,b,*args): # 聚合 2 print(a,b,*args) # 打散 3 func(1,2,3,4,5,6)
默认参数聚合:
1 def func(a=1,b=2,**kwargs): # 默认参数 聚合 2 print(a,b,kwargs)
1 def func(a,b,*args,c=1,**kwargs): # 位置 > 动态位置 > 默认参数 > 默认动态参数 2 print(a,b,c,args,kwargs)
1 lst=[1,2,3,4,5] 2 def func(*args): # 聚合 3 print(*args) # 打散 4 func(*lst) # 打散
作用域和名称空间:
名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的
1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)
名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰
作用域:
1. 全局作用域: 内置+全局
2. 局部作用域: 局部
globals() 查看全局作用域
locals() 查看当前作用域
函数的嵌套:
在函数中声明函数
在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置
nonlocal和global关键字(重点):
global: 在局部引入全局变量
nonlocal: 在局部...内层函数引入外层离他最近的那个变量.外层没有再找外层,找全局最外层局部
print(func.__doc__) # 函数名.__doc__ 查看函数的注释