#内置的命名空间 就是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()