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

Posted 被嫌弃的胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python(动态传参命名空间函数嵌套global和nonlocal关键字)的主要内容,如果未能解决你的问题,请参考以下文章

python函数的动态传参.作用域与命名空间

python 函数动态参数,名称空间,global,nonlocal

10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量

函数的动态参数,命名空间

python 函数进阶

递归函数