函数的进阶
本节的只要内容
1.函数参数--动态传参
2.名称空间,几部名称空间,全局名称空间,作用域,加载顺序.
3. 函数的嵌套
4. gloabal, nonlocal 关键字
一 ,
函数参数--动态参数
当在参数不确定是用动态参数,又是形参的第三种:动态参数
动态参数又分为两种
1,动态接收位置参数
固定位置的传参
def chi(quality_food,junk_food): print("我要吃",quality_food,junk_food) chi('大米饭',"小米饭") #大米饭传递给quality_food #小米饭传递给junk_food # 按照位置传递
结果
我要吃 大米饭 小米饭
接收任意内容的传参 "*"
def li(*wan): print('我要玩',wan) li('足球','篮球','平棒球') 结果 我要玩 ('足球', '篮球', '平棒球')
注; 动态接收参数的时候要注意顺序,动态参数要在位置参数的后面
def li(*wan,a,b): print('我要玩',wan,a,b) li('足球','篮球','平棒球') 结果 当位置参数在动态参数的后面时,所输入的参数全被动态参数接收,a,b不会接收到参数 所以程序会报错
在这里主要强调位置参数与动态参数的先后顺序
当用关键字时a='篮球' b='平棒球'这时候a与b就会有值,从这里知道默认参数是在动态参数的后面
这样的话那么位置参数就是在动态参数的前面,这样位置参数才能得到值
顺序 : 位置参数.动态参数*.默认值参数
动态关键字参数
1 def li(**wan): 2 print('我要玩',wan) 3 li(a='足球',b='篮球',c='平棒球') 4 5 结果 6 我要玩 {'a': '足球', 'b': '篮球', 'c': '平棒球'} 7 8 这时候输出的结果为一个字典型的
在这个**kwargs的位置顺序:
位置参数>*args>默认值>**kwargs 注: 在**kwargs的情况下实参必须用关键字传参
def li(**wan): print('我要玩',wan) li('足球','篮球','平棒球') 结果 Traceback (most recent call last): File "F:/qwer/0713课堂.py", line 26, in <module> li('足球','篮球','平棒球') TypeError: li() takes 0 positional arguments but 3 were given 在这种情况下实参没有用关键字来传参,程序会出现报错
位置参数必须在关键字参数的前面,动态接收关键字参数也要在后面
1 def li(*args,**wan): 2 print('我要玩',args,wan) 3 li('足球','篮球',a='平棒球') 4 结果 5 我要玩 ('足球', '篮球') {'a': '平棒球'}
动态参数的的另一种传递参数
def li(*args):
print('我要玩',args)
li1 = ['你好','在干吗','啦啦']
li(li1[0],li1[1],li1[2])
结果
我要玩 ('你好', '在干吗', '啦啦')
当fun(*lst) #可以使用*把一个列表按顺序打散
s = "你好呀"
# 字符串也是可以打散(可迭代对象)
函数的注释
...
注释主要是对自己写的程序与变量的解释
...
二,命名空间
1.全局命名空间
2.局部命名空间
3.内置命名空间
加载的顺序;
1.内置命名空间
2.全局命名空间
3.局部命名空间
取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间
作用域命名空间:
全局作用域: 全局命名空间+内置命名空间
局部作用域: 局部命名空间
三 函数的嵌套
1.只要有()存在就是函数的调用,如果没有(就不用函数的调用)
2. 函数的执行顺序
四 关键字globals和nonlocal
首先我们写这样一个代码,首先全局一个变量,然后在局部的调用这个变量,并改变这个变量的值
1 a = 100 2 def li(): 3 global a # global表示.a不再是局部的a了而是全局的a 4 a = 28 5 print(a) 6 li() 7 print(a) 8 9 结果: 10 28 11 28
nonloal : 表示在局部作用域中,调用最近一级命名空间的变量
1 a = 5 2 def li(): 3 a = 65 4 def l1(): 5 nonlocal a 6 a = 11 7 print(a) 8 l1() 9 print(a) 10 li() 11 结果 12 11 13 11 14 15 不加nonlocal 16 17 18 a = 5 19 def li(): 20 a = 65 21 def l1(): 22 a = 11 23 print(a) 24 l1() 25 print(a) 26 li() 27 结果 28 11 29 65
五个英文单词:
1.nonlocal:表示局部作用域
2.global:表示全局作用域
3.**kwargs:表示动态关键字参数
4. *args:动态接收位置参数
5.split:切割

浙公网安备 33010602011771号