zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    owlsuddimatchmaker安装
    类集
    jsp基本语法
    心得思路记录下
    nyoj517 最小公倍数
    poj1250 Tanning Salon
    poj1686 Lazy Math Instructor
    poj3250 Bad Hair Day
    poj1047 Round and Round We Go
    poj2359 Questions
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9449424.html
Copyright © 2011-2022 走看看