今日内容
-
函数的参数 动态参数
-
动态接收位置参数
-
动态接收关键字参数
-
-
函数的注释
-
名称空间
-
函数的嵌套
-
global、nonlocal
-
global的宗旨
-
nonlocal宗旨
-
1.函数的参数 动态参数
动态接收位置参数:
# 动态位置参数
# def eat(*args): # 函数的定义阶段 *聚合(打包)
# print(args) # tuple
# print(*args) # 函数体中的*表示打散(解包)
def eat(*args):
pirnt('我想吃',args)
eat('大米饭', '米饭', '饭')
# 收到的结果是一个tuple元组
动态接收参数的时候:动态参数必须在位置参数后面
无论是否给*args值,它都是一个元组(),若不给值,就是()
def eat(a, b,*args):
print("我想吃",args,a,b)
eat('大米饭','米饭','饭')
# 我想吃 ('饭',) 大米饭 米饭
# 默认参数放在最后边,通过关键字传参
def eat(a,b,*args,c='白菜'):
print('我想吃',a,b,args,c)
eat('猪肉','粉条','豆腐','大葱')
结果:
我想吃 猪肉 粉条 ('豆腐', '大葱') 白菜
注意: 形参的顺序: 位置参数 , 动态参数 , 默认参数
动态接收关键字参数:
def func(*args,**kwargs):
print(args,kwargs)
lst = [1,23,5]
dic = {'k1':4, 'k2':5}
func(*lst,**kwargs)
func(1,23,5,k1=4,k2=5)
最终顺序:
位置参数 > *args(动态位置参数) > 默认值参数 > **kwargs(动态默认参数)
总结
# 总结:
# *args(聚合位置参数) 大家伙都用的名字, 可以进行修改但是不建议修改
# **kwargs(聚合关键字参数) 大家伙都用的名字, 可以进行修改但是不建议修改
# 函数的定义阶段 * 和 ** 都是聚合
# 函数体中 * 就是打散, *args将元组中的元组进行打散 *kwargs将字典的键获取
# 实参和函数体:
# * 打散
# ** 实参时能够使用
2.函数的注释
def func(a, b):
"""
计算两数相加
:param a:
:param b:
:return: a + b
"""
return a + b
func(1, 10)
# print(a.__doc__)
# print(b.__doc__) # 查看函数的注释
# print(a.__name__) # 查看函数的名字
3.名称空间
-
内置空间:Python解释器自带的空间
-
全局空间:py文件中顶格写的就是全局空间
-
局部空间:函数中就是局部空间
取值顺序:
# 1.局部空间
# 2.全局空间
# 3.内置空间加载顺序:
# 1.内置空间 # 2.全局空间 # 3.局部空间
4.函数的嵌套
不管在什么位置,只要是函数名()就是在调用一个函数
5.global、nonlocal
global : 只修改全局,如果全局没有就创建一个全局变量
nonlocal : 只修改局部,修改离nonlocal最近的一层,上一层没有继续向上上层查找.只限在局部
a = 10 def func(): global a # 声明之后,就可以对全局变量进行修改 a += 1 print(a) func() # nonlocal只能修改离nonlocal最近的一层,且不包括全局变量,如果没有就报错 def run(): a = 19 def func(): print('123') def fun(): nonlocal a a = 10 print(a) fun() run()