python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

一、函数的动态传参

  1.*args位置参数动态传参

def chi(*food):
    print(food)
chi("烧烤","火锅","虾吃虾涮","烤鱼")
View Code

    多个位置参数传递进去,收到的内容是元组tuple,动态参数的位置必须要在位置参数后面

  2**kwargs 关键字参数动态传参

def chi(**food):
    print(food)
chi(zhangqing="吃点好的",lianda="吃不辣的",徐建="方便面")
#{'zhangqing': '吃点好的', 'lianda': '吃不辣的', '徐建': '方便面'}
#输出结果是以字典的形式
View Code

  顺序:位置参数、*args、默认值、**kwargs

  def func(*args,**kwargs):   这个样式的函数比较强大,能满足的需求很多。

    pass

  形参的位置*,**:聚合

  实参的位置*,**:打散

    位置参数的动态传参:把list、tuple、set、str 进行迭代打散

    关键字动态传参: 打散成字典

二、命名空间

  1.内置命名空间:存放在python解释器为我们提供名字的如list、tuple、str等这些都是内置命名空间。

  2.全局命名空间:我们在py文件中,函数外生命的变量都属于全局命名空间。

  3.局部命名空间:在函数中生命的变量会放在局部命名空间。

  作用域:

    1.全局作用域:内置+全局

    2.局部作用域:局部(函数被调用)

  globals() 查看全局中的内容

  locals() 查看当前作用域中的内容

三、函数嵌套

  *只要遇见了()就是函数的调用,如果没有()就不是函数的调用。

  *函数可以互相的嵌套,无限的嵌套。

四、global和nonlocal关键字

  global:在局部访问全局中的内容

a = 100 
def func():    
    global a    # 加了了个global表示不不再局部创建这个变量量了了. ⽽而是直    接使⽤用全局的a    
    a = 28    
    print(a)
func() 
print(a)    
#global表⽰示. 不再使⽤用局部作⽤用域中的内容了了. ⽽而改⽤用全局作⽤用域中的变量量
View Code

  nonlocal:在局部寻找外层函数中离他最近的那个变量,但是不会到全局中寻找。

a = 10 
def func1():    
    a = 20    
    def func2():
        nonlocal a        
        a = 30        
        print(a)    
    func2()    
    print(a)
func1() 
结果: 
加了nonlocal 
30 
30 
不不加nonlocal 
30 
20    
View Code
原文地址:https://www.cnblogs.com/qq849784670/p/9449424.html