• 16 命名空间和作用域


    #内置的命名空间  就是python解释器一启动就可以使用的名字存贮在内置命名空间中
    # print(),input(),list,tuple,等等
    #全局的会命名空间
    #局部的命名空间
    a = 1
    def func():
        global a    #声明后就可以修改全局的 a ,将会影响全局的 a  应尽量不使用,因为不安全
        a += 1
    func()
    print(a)        #2
    #求最大值函数  函数的嵌套
    def max(a,b):
        return a if a>b else b
    
    def the_max(x,y,z):
        c = max(x,y)
        return max(c,z)
    
    print(the_max(1,2,3))       #3
    #函数的嵌套定义和作用域链
    a = 5
    def outer():
        a = 1
        def inner():
            b = 4
            print(a)             #1
            print('inner')      #inner
            def inner2():
                nonlocal a      #声明上面第一层的局部变量 a 可以修改,对全局变量无效
                a += 1
                print(a,b)       #2 4
                print('inner2') #inner2
            inner2()
        inner()
        print('局部 a:',a)      #局部 a: 2
    outer()
    print('全局 a:',a)          #全局 a: 5
    def func():
        print(123)
    
    func2 = func    #函数名可以赋值
    func2()         #123
    
    l = [func,func2]    #函数名可以做为容器类型的元素
    for i in l:
        i()         #123
                    #123
    def func():
        print(123)
    
    def wahaha(f):
        f()
        return f                #函数名可以作为函数的返回值
    
    qqxing = wahaha(func)        #函数名可以作为函数的参数      123
    qqxing()                     #123
    #闭包     是一个嵌套的函数,且内部函数调用外部函数的变量
    def outer():
        a = 1
        def inner():
            print(a)
    #        print(inner.__closure__)
        return inner
    inn = outer()       #返回了内部闭包的函数地址
    inn()               #运行内部的函数
    #闭包的应用例程
    #import urllib       #调用模块
    from urllib.request import urlopen
    # ret = urlopen('https://home.cnblogs.com/u/bydzxzy/').read()
    # print(ret)
    def get_url():
        url = 'https://home.cnblogs.com/u/bydzxzy/'
        def get():
            ret = urlopen(url).read()   #爬取了网页的原码
            print(ret)
        return get
    get_func = get_url()
    get_func()
  • 相关阅读:
    链表
    java之Continue解析
    java之break解析
    数据库(Mysql)之count(column),count(1),count(*)用法
    数据结构(java语言描述)串与数组——稀疏矩阵的三元组表存储
    数据结构(java语言描述)串与数组——文件加解密
    数据结构(java语言描述)——串数组(n阶魔方)
    数据结构(java语言描述)模式匹配——KMP算法
    数据结构(java语言描述)模式匹配——Brute-Force(BF)算法
    java常见的软件包
  • 原文地址:https://www.cnblogs.com/bydzxzy/p/9649320.html
Copyright © 2020-2023  润新知