zoukankan      html  css  js  c++  java
  • 动态参数与global和nonlocal

    1. 动态参数
    位置参数的动态参数: *args
    关键字参数的动态参数 : **kwargs
    顺序:
    位置,*args,默认值,**kwargs
    在形参上*聚合, **聚合
    在实参上*打散, **打散

    def chi(good_food, bad_food,drink, ice, jiu):
        print("我要吃", good_food, bad_food)
    
    chi("盖浇饭", "辣条")
    
    位置参数 > *动态参数 > 默认值参数
    
    
    def chi( *food, a, b): # 可以传入任意的位置参数
        print("我要吃", food)  # 动态参数接收到的是tuple类型的数据
    
    chi("盖浇饭", "辣条", "面条")
    def func(a, b, c, *args, d = 5):
        print(a, b, c, d, args)
    
    func(1,2,3)
    func(1,2,3,4,5,6,7, d ="马大哈")
    
    def chi(*food):
        print("我要吃", food)
    
     写函数. 给函数传递任意个整数. 返回这些数的和
    def he(*n):
        sum = 0
        for e in n:
            sum += e
        return sum
    print(he(5))
    
    
    动态接收关键字参数
     *位置参数
    **关键字参数
    def func(**food):   # **food动态接收关键字参数
        print(food) # 接收到的是字典
    
    func(good_food="盖浇饭", bad_food="辣条", drink="冰封")
    
    关键字参数一定在位置参数后面
    位置参数 > *args > 默认值 > **kwargs
    
    这个函数可以接收所有的参数(无敌的)
    def func(*args, **kwargs):
        print(args)
        print(kwargs)
    func(1, 2, 5, 6, name="taibai",age=18, sex="不详")
    
    把列表中的每一个元素作为参数, 传递给函数. 一次都传过去
    
    def func(*args, **kwargs):  # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
        print(args)
        print(kwargs)
    
    
    # lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
    # func(*lst)  # 实参, 打散, 迭代产生的
    
    dic = {"name":"太白", "alex":"wuse"}
    func(**dic) # 把字典打散. 以key=value形式进行传参
    
    
    def func(a, b):
        """
        计算a+b的和, 返回一个数
        :param a: 第一个数
        :param b: 第二个数
        :return: 返回计算之后的和
        """
        return a + b
    
    定义函数
    def 函数名(形参):  1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs
        函数体   return 返回值
    函数名(实参)    1. 位置参数. 2.关键字参数. 3. 混合参数,
    

      


    2. 命名空间和作用域
    命名空间:
    1. 内置命名空间: python解释内部运行时的变量函数
    2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
    3. 局部命名空间: 在函数内部声明的变量和函数.
    作用域:
    1.全局作用域:内置+全局
    2.局部作用域:局部
    globals() 查看全局作用域中的名字
    locals() 查看当前作用域中的名字

    a = "123"   # 全局
    b = 36  # 全局
    def func(): # 全局
        c = "马化腾"   # 局部
    
    def func2():
        print(c)
    
    a = 10
    def func():
        a = 20
        print(a)    # 就近原则
        print(globals())  # globals() 获取到全局作用域(内置,全局)中的所有名字
        print(locals())  # locals() 查看当前作用域中的所有名字
    func()
    

      

    3. global和nonlocal
    global: 把全局变量拿到局部来用.
    nonlocal: 把离他最近的一层的变量拿过来.不会找全局

    函数的嵌套
    def chi():
        print("我要吃")
    
    print(chi())
    
    def func1():
        print("哈哈")
    
    def func2():
        func1()
        print("呵呵")
        func1()
    func2()
    
    def func1():
        print("呵呵")
        def func2():
            print("哈哈")
        func2()
        print("吼吼")
    func1() #
    
    def func1():
        print("赵")
        def func2():
            print("钱")
            def func3():
                print("孙")
            print("李")
        def func4():
            print("哈哈")
            func2()
        print("周")
        func2()
    func1()
    
    
    
    def func():
        global a    # a 不再是局部变量. 是全局变量
        a = 30  # 把全局中的a重新赋值成30
        print(a)
    func()
    print(a)
    
    a = 10
    def func1():
    
        def func2():
            nonlocal a  # 找局部作用域中 离他最近的那个变量引入进来
            a = 20
            print(a)
        func2()
        print(a)
    func1()
    
    a = 1
    def fun_1():
        a = 2
        def fun_2():
             def fun_3():
                 nonlocal a
                 a =  4
                 print(a)
             print(a)
             fun_3()
             print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
    

      

      

  • 相关阅读:
    hashlib模块
    sys模块
    random模块
    time模块
    生成器、迭代器
    装饰器
    函数相关内容
    集合相关操作
    springcloud(四):Eureka的配置详解
    springcloud(二):Eureka服务注册与发现
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9305177.html
Copyright © 2011-2022 走看看