函数的进阶
一. 函数的动态传参
1 chi(*food): 2 print(food) 3 chi('盖浇饭','拉州拉面','牛肉丸子面','清汤小面') 4 chi('红烧牛肉面','镇江锅盖面','山西刀削面') 5 chi('陕西裤带面','新疆拉条子') 6 chi('广东竹升面') 7 chi()
结果为:
(盖浇饭', '拉州拉面', '牛肉丸子面', '清汤小面')
('红烧牛肉面', '镇江锅盖面', '山西刀削面')
('陕西裤带面', '新疆拉条子')
('广东竹升面',)
()
1 def chi(**food): 2 print(food) 3 chi(主食='馒头',副食='臭豆腐',汤='紫菜蛋花汤',水果="桃子",food='牛肉')
结果:
{'主食': '馒头', '副食': '臭豆腐', '汤': '紫菜蛋花汤', '水果': '桃子', 'food': '牛肉'}
def fun(*args,**kwargs)
print(args,kwargs)
fun(*args,**kwargs)
此函数的传参全部概括
另一种动态传参的方式:
1 def chi(*food): 2 print(food) 3 lst=['煎饼果子','肉夹馍','烤冷面','手抓饼','鸡蛋灌饼'] 4 chi(*lst) 5 6 def chi(**food): 7 print(food) 8 dic={'good_food':'大米饭','no_good_food':'猪肉炖粉条','soup':'排骨汤'} 9 chi(**dic)
函数的注释:
1 def fun(a,b): 2 """ 3 这里是函数的注释,先写当前这个函数是干什么的 4 :param a:参数a是什么意思 5 :param b:参数b是什么意思 6 :return:返回的是什么东西 7 """ 8 fun(a,b)
二, 命名空间
全局名称空间
局部名称空间
内部名称空间
作用域:
1全局作用域:内置+全局
2.局部作用域:局部(函数被调用)
globals()查看全家用中的内容
locals()查看当前作用域中的内容
a = 110 # 全局 def fn(): # b = 20 # 局部 def gn(): # 局部 print(globals()) # 可以查看全局作用域中的内容 print(locals()) # 查看当前作用域中的内容 gn() fn()
三. 函数嵌套
函数可以互相嵌套
1 def outer(): 2 print("哈哈") 3 def inner_1(): 4 print("呵呵") 5 def inner_1_1(): 6 print("嘻嘻") 7 inner_1_1() 8 print("吼吼") 9 def inner_2(): 10 print("嘿嘿") 11 inner_2() 12 inner_1() 13 outer()
四. global和nonlocal关键字
global:在局部访问全局的内容
1 a = 10 # 全局变量本身就是不安全的, 不能随意修改, 闭包 2 def func(): 3 global a # 1. 可以把全局中的内容引入到函数内部 , 2. 在全局创建一个变量 4 # a = 20 5 a += 10 # a = a+10 6 print(a)
nonlocal:在局部寻找外层函数中离他最近的那个变量
1 func() 2 print(a) 3 a = 10 4 def outer(): 5 6 def inner(): # 在inner中改变a的值 7 nonlocal a # 寻找外层函数中离他最近的那个变量 8 a = 20 9 inner() 10 11 outer()