• 动态参数,作用域


    一.函数的动态参数

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

    def chi(name,*food, location="北京"): # 参数名是food  *表示动态传参
         print(location)
         print(name+"要吃", food)
    chi("刘旺鑫","狗不理","大麻花","天津")
    chi("刘旺鑫","大米饭","小米饭")
    chi("刘旺鑫","馒头")

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

    形参列表顺序:位置参数  ,   *args   ,  默认值参数 ,   *kwargs

    以上参数可以随意搭配使用

    def chi(**food): 
         print(food)
    chi(good_food="狗不理", no_good_food="汉堡",drink="大梨",ice_cream="巧乐兹")

    def func(*food,**food2)  #参数名是food,food2.动态传参*,**

    def fun(a, *args, c="哈哈",  **kwargs):
        print(a, args, c, kwargs)
    fun(1, 2, 3, c=4,d=5, e=6)#c d e是变量名不能加""
    结果:
    1 (2, 3) 4 {'d': 5, 'e': 6}#key值加""

    def func(*args,*kwargs ):   #使用情况多,  无敌参数

      pass

    3函数注释

     def func(a, b):
         """
         这个函数是用来计算a和b的和       
         :param a: 第一个数据
         :param b: 第二个数据
         :return: 返回的是两个数的和
         """
         return a + b
    
    print(func.__doc__) # document文档       打印是不加()的函数名.__doc__
    结果:
    这个函数是用来计算a和b的和
        :param a: 第一个数据
        :param b: 第二个数据
        :return: 返回的是两个数的和
        

    养成写注释的好习惯,能够让我们在工作中更顺利

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

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

    def func(*food): # 聚合, 位置参数
         print(food)
    lst = ["鸡蛋","煎饼果子","猪蹄","滋滋冒油"]
    #  实参: 打散
    func(*lst) # 打散. 把list, tuple, set, str 进行迭代打散
    # 聚合成关键字参数
    def func(**kwargs):
        print(kwargs)
    dic = {"name":'alex', 'age':'18'}
    func(**dic) # 打散成关键字参数

    二.命名空间

    1.内置名称空间

    2.全局名称空间

    3.局部名称空间

    a = 10 # 全局名称空间中的内容
    def fn(): # fn也在全局名称空间
        b = 20 # 局部名称空间
        print(a)
    def gn():
        print(a)
    fn()
    gn()

    作用域:

    1.全局作用域:内置名称空间+全局名称空间

    2.局部作用域:局部名称空间

    3.globals()和locals()的使用

      globals():  查看全局中的内容

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

    a = 110 # 全局
    def fn(): #
        b = 20 # 局部
        def gn(): # 局部
            print(globals())  # 可以查看全局作用域中的内容
            print(locals())  # 查看当前作用域中的内容
        gn()
    fn()

    三.函数的嵌套

      函数可以互相嵌套

    def outer():
        print("哈哈")
        def inner_1():
            print("呵呵")
            def inner_1_1():
                print("嘻嘻")
            inner_1_1()
            print("吼吼")
        def inner_2():
            print("嘿嘿")
        inner_2()
        inner_1()
    outer()

    1.在函数嵌套中global和nonlocal的使用

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

    nonlocal: 在局部寻找外层函数中离他最近的那个变量

    a = 10 # 全局变量本身就是不安全的, 不能随意修改
    def func():
        global a  # 1. 可以把全局中的内容引入到函数内部 , 2. 在全局创建一个变量
        a = 20
        print(a)
    func()
    print(a)
    
    
    
    def outer():
        a = 10
        def inner(): # 在inner中改变a的值
            nonlocal a # 寻找外层函数中离他最近的那个变量
            a = 20
        inner()
    
    outer()

    作用域的练习题:

    a = 1
    def fun_1():
        a = 2
        def fun_2():
            global a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)

    总结:综上,函数嵌套后全局和局部的变量要分清,

  • 相关阅读:
    如何使用Eclipse和GCC搭建STM32环境
    增量式pid和位置式PID参数整定过程对比
    webrtc 源码结构
    小米路由器刷Xiaomi Mi WiFi Mini openwrt
    js jQuery 右键菜单 清屏
    沉默的大多数 (王小波)
    kindle书摘-活着-余华-活着不易,珍惜
    kindle书摘-围城-相爱勿相伤
    Nagios系列1,选择
    红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要
  • 原文地址:https://www.cnblogs.com/Bug66/p/9449926.html
Copyright © 2020-2023  润新知