zoukankan      html  css  js  c++  java
  • 动态传参(*args **kwargs 无敌传参) 作用域globals locals和名称空间 函数的嵌套 关键字nonlcas global

    动态传参(重点)  *, **
    *, ** :
    形参: 聚合

    位置参数* -> 元组
    关键字** -> 字典

    实参: 打散

    列表, 字符串, 元素 -> *
    字典 -> **
    形参的顺序(重点):
    位置 *args(位置参数动态传参) 默认值 **kwargs(关键字动态传参)
    以后写参数. 可以随意的进行搭配, 但是, 顺序不能串

    * 在形参位置. * 表示不定参数-接收的是位置参数
    接收到的位置参数的动态传参: 都是元组
    def chi(*food): # 在形参这里把传递过来的实参进行了聚合,聚合成了元组
    print(food)
    **在形参表示动态传参-关键字参数
    关键字动态传参接收到的是字典
    def func(**kwargs): # 也是聚合. ** 聚合成字典
    print(kwargs)
    # 无敌传参
    def func(*args, **kwargs): # 参数没有限制. 随便传递
        print(args)
        print(kwargs)
    形参:
    *->元组, **->字典 表示聚合
    实参:
    *->列表,字符串,元组, **->字典 表示打散
    名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的
    
    1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
    2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
    3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)
    
    名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰
    作用域:
    1. 全局作用域: 内置+全局
    2. 局部作用域: 局部
    globals() 查看全局作用域
    locals() 查看当前作用域
     
    从全局去找局部 -> 找不到
    局部去找全局 -> 可以找到
    # print(locals()) # 全局
    # print(globals()) # 全局
    globals() 查看全局作用域      locals() 查看当前作用域



    函数的嵌套

    在函数中声明函数
    在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置
    函数的嵌套:
    def
    func1(): print("1") def func2(): print("2") def func3(): print("3") print("4") func3() print(5) print("6") func2() print("7") func1() # 1 # 6 # 2 # 4 # 3 # 5 # 7
    全局变量一般是不能随意的修改的
    a = 10
    def func():
        # 慎用.
        global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
        a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
        print("里面的打印",a)
    func()
    print("外面的打印", a)
    # 里面的打印 20
    # 外面的打印 20

    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) 这里会报错
    从全局去找局部 -> 找不到
    局部去找全局 -> 可以找到
    # 如果没有nonlocalglobal 查找变量的顺序: 自己, 上一层, 上一层, 上一层
    global的用法:
    当需要用户贴吧需要登录才能发帖的时候需要改变全局的变量
    flag = False
    
    def login():
        global flag
        uname = input("用户名:")
        upwd = input("密码:")
        if uname == "alex" and upwd == "123":
            flag = True
        else:
            flag = False
    
    def fatie():
        if flag == True:
            print("可以发帖")
        else:
            print("滚去登录")
    
    login()
    
    fatie()
    fatie()
    fatie()
    fatie()
    
    
  • 相关阅读:
    Docker(35)- docker inspect 命令详解
    Docker(34)- 如何修改 docker 容器的目录映射
    Docker(33)- 如何修改 docker 容器的端口映射
    Docker(32)- 如何修改 docker 容器的启动参数
    Docker(31)- docker import 命令详解
    Docker(30)- docker export 命令详解
    Docker(29)- docker top 命令详解
    Docker(28)- docker port 命令详解
    Docker
    Docker(27)- docker push 命令详解
  • 原文地址:https://www.cnblogs.com/H1050676808/p/10085369.html
Copyright © 2011-2022 走看看