• python--动态传参,作用域,函数嵌套


    一 . 动态传参(重点)  * ,  **

      * 与 **

    复制代码
    * 在形参位置. * 表示不定参数, 接收的是位置参数
    接收到的位置参数的动态传参: 都是元组
    def eat(*food): # 在形参这里把传递过来的实参进行了聚合,聚合成了元组
        print(food)
    eat("小米粥")
    eat("小米粥", "咸鸭蛋")
    eat("小米粥", "爆米花", "咸鸭蛋", "蒜茄子")
    复制代码
    **在形参表示动态传参-关键字参数
    关键字动态传参接收到的是字典
    def func(**kwargs):  # 也是聚合. ** 聚合成字典
        print(kwargs)
    func(a=1, b=2, c=3, haha="呵呵", good="not bad")

      无敌传参

    # 无敌传参
    def func(*args, **kwargs): # 参数没有限制. 随便传递
        print(args)
        print(kwargs)
    func(1,2,3,4, a=3,b=5)

      聚合与打散

    复制代码
    def chi(*food):  # 这里是形参  聚合
        print(food)
    lst = ["胡萝卜", "大白菜", "大萝卜", "草", "果冻"]  # 这里要输入列表或元组
    chi(*lst)   # 这里的*是打散 形成元组
    
    def chi(**food): # 聚合, 聚合成字典
        print(food)
    dic = {"主食":'面条', "副食":"土豆泥", "汤":"疙瘩汤"} # 这里要输入字典
    chi(**dic, 甜点="冰激凌") # 打散. 打散成关键字, 甜点 = '冰激凌' 可加可不加
    
    #  * 与 ** 放在形参是聚合, 放在实参是打散
    复制代码

      传参顺序

    位置参数, *args, 默认值, **kwargs

    二 . 作用域与名称空间

    复制代码
    名称空间顾名思义就是装名称的,比如我定义一个a = 10,那么这个a 所在的空间就是名称空间
    作用域可以理解为起作用的区域,全局作用域就是在全局都起作用的,是内置+全局名称空间, print , input 就是内置,局部作用域就是在局部起作用的区域.  
    
    globals() 查看全局作用域
    locals() 查看当前作用域
    复制代码

    三 . 函数的嵌套

      函数的嵌套: 在函数中声明函数

        函在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置 

    复制代码
    def outer():
        def inner():
            print("我的天哪")
        print("还可以这样写???")
        inner()
    outer()
    复制代码

    四 . nonlocal 和 global关键字

      global: 在局部引入全局变量

      nonlocal: 在局部..内层函数引入外层理他最近的那个变量

    复制代码
    # 全局变量一般是不能随意的修改的
    a = 10
    def func():
        # 慎用.
        global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
        a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在试图改全局变量
        print("里面的打印",a)
    func()
    print("外面的打印", a)
    
    # nonlocal  在局部, 寻找离他最近的外层的一个变量
    a = 50
    def func1():
        # a = 10 # 局部
        def func2():
            nonlocal a # 不找全局, global找全局
            a += 10 # a = a + 10 python不让这么干
            print("func2", a)
        func2()
        print(a)
    func1()
    print(a)
    复制代码
  • 相关阅读:
    JS实现前台表格排序功能
    openoffice安装手记
    OpenOffice 实现OFFICE在线预览
    毫秒事件转换小方法
    axis2 jar包详解及缺少jar包异常分析
    Android EditText控件完美实现只读(ReadOnly/NonEditable)
    android:获取联系人信息(姓名和电话)
    dex2jar.bat反编译apk的classes.dex文件错误:
    服务器压力测试系列二:服务器监控工具tsar安装
    memcache list all keys
  • 原文地址:https://www.cnblogs.com/uiys/p/10673132.html
Copyright © 2020-2023  润新知