• Python Day11


    一 命名空间

    命名空间也叫做名称空间

     内置名称空间:人家直接写好的,我们直接就可以调用的,就叫做内置名称空间

     全局变量:除了函数内部定义的内容外,自己写的代码就叫做全局变量

     局部变量:在函数内部定义的内容,就叫做局部名称空间

    a=1       #全局变量
    def func():
        a=2       #局部变量
        def func1():
            a=3        #局部里的局部变量
            print(a)
        func1()
        print(a)      #print:就属于内置的名称空间
    func()
    print(a)

    三种命名空间之间的加载与取值顺序:

    加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

    取值:

      在局部调用:局部命名空间->全局命名空间->内置命名空间

    x = 1
    def f(x):
        print(x)
    
    print(10)
    
    输出结果
    
    10

          在全局调用:全局命名空间->内置命名空间

    x = 1
    def f(x):
        print(x)
    
    f(10)
    print(x)
    
    print(max)
    
    
    输出结果
    
    10
    1

    在全局是不可以直接调用局部的变量,局部变量只能在低于该层和该层的函数去调用,而在局部是可以调用全局的变量的

    a=1       #全局变量
    def func():
        def func1():
            print(a)
        func1()
        print(a)
    func()
    print(a)
    
    输出结果
    1
    1
    1

    在全局内部可以同时创建多个同等级的局部命名空间,而这些命名空间之间是没有关系的

    a=1
    def wahaha():
        a=2
        print(a)
    def shuangwaiwai():
        print(a)
    wahaha()
    shuangwaiwai()
    
    输出结果
    2
    1

    作用域

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

    全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

    局部作用域:局部名称空间,只能在局部范围内生效

    globals和locals方法

    global:就是在局部里面修改全局的变量值

    a=0
    def aa():
        a=1
        def bb():
            global a     #global:在局部变量修改全局变量的值
            a=2
    
            print(a)
        bb()
        print(a)
    aa()
    print(a)
    
    输出结果
    2
    1
    2

    nonlocal:只修改局部的变量值,从该层的上一层一层一层的查找,找到第一个并修改

    a=0
    def aa():
        a = 2
        def cc():
            def bb():
                nonlocal a    #总结:只修改局部的变量值,从该层向外层找到第一个并修改
                a=1
                print(a)
            bb()
            print(a)
        cc()
        print(a)
    aa()
    print(a)
    
    输出结果
    1
    1
    1
    0

    先有了作用域,才有了名称空间

     什么是全局作用域:从调用的那层向外层一层一层的查找需要调用的内容,直到找到第一个,就会停止查找

    二 函数名

     直接用print打印函数名,不加上括号,结果打印出来会是这个函数的内存地址和函数名

       函数名就是一个内存地址,相当于就是一个变量

    def wahaha():
        print(123)
    print(wahaha)
    
    
    输出结果
    <function wahaha at 0x0000000001FD3E18>

    函数名可以赋值,也可以作为其他容器的元素

    def func():
        print('alex_aa')
    print(func)
    a=func
    print(a)
    a()
    l=[func]
    print(l)
    l[0]()
    
    输出结果
    
    <function func at 0x0000000002093E18>
    <function func at 0x0000000002093E18>
    alex_aa
    [<function func at 0x0000000002093E18>]
    alex_aa

    函数名还可以作为函数的返回值或者参数

    def wahaha():
        name='alex'
        def shuangwaiwai():
            print(name)
        return shuangwaiwai
    yousanru=wahaha()
    yousanru()
    
    输出结果
    alex

    三, 三元表达式

     三元表达式就是将一些简单的执行语句用更简单的代码写出来

      比如:执行结构=判断语句成立的执行语句   if   判断语句   else   判断语句不成立的执行语句

    a=10
    b=9
    c=a if a>b else b
    print(c)
    
    输出结果
    10

    四 闭包函数

     闭包函数一定要用到嵌套函数

     什么是闭包函数:内部函数引用了外部函数的变量,这个内部函数就叫做闭包函数,闭包就是一种函数

    def wahaha():
        name='dadada'
        def shuangwaiwai():    #这个函数就是闭包函数
            print(name)
        shuangwaiwai()
    wahaha()
    
    输出结果
    
    dadada
  • 相关阅读:
    RabbitMQ 简介与入门
    jmeter添加变量方法
    防火墙相关
    jmeter结果分析
    centos7安装jenkins
    jmeter断言
    jmeter循环控制器使用
    Net6加密类过期更新
    windows 下javajar启动的jar包怎么停
    SQL Server数据库使用情况
  • 原文地址:https://www.cnblogs.com/liuduo/p/7454579.html
Copyright © 2020-2023  润新知