命名空间与闭包
1 名称空间与作用域
在Python中所有名字的定义都放到namespace中
名称空间分类:
内置名称空间
import this
dir(buil-in) 查看全部内置
全局名称空间
局部名称空间
在函数体内等
查询全局和局部
globals()方法可以获得全局的内容
该方法获得的全局内容是调用的时候程序之前已经定义过的全局内容
locals()方法可以获得局部的内容
2 函数嵌套和静态嵌套域
函数嵌套调用
函数里面调用别的函数
函数的嵌套定义
在函数里面定义别的函数
3 函数对象与闭包
函数对象
函数名称可以被赋值给变量
函数的执行时函数名称加()
新赋值的变量也可以加括号执行
闭包
闭包用于包裹函数内部的作用域, 不包裹外部的作用域
闭包的基本形式是:
在函数F1中, 定义F2, F2只能引用F1定义的变量, 之后F1函数返回F2的函数名字
这样就保证了可以将F1的执行结果赋予给一个变量, 该变量可以在之后的任何时刻随时可以运行
x = 100
def f1():
x=1
y=2
def f2():
print(x,y)
return f2
f=f1()
f()
print(f.__closure__)
print(f.__closure__[0].cell_contents)
print(f.__closure__[1].cell_contents)
利用闭包完成爬取Python官网页面
from urllib.request import urlopen
def f1(url):
def f2():
print(urlopen(url).read())
return f2
python=f1('http://www.python.org')
python()
python()
人若有恒 无所不成