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()
相關文章
相關標籤/搜索