<div class="cnblogs_code">
<span style="color: #0000ff">def<span style="color: #000000"> outer():
a = 1
<span style="color: #0000ff">def<span style="color: #000000"> inner():
<span style="color: #0000ff">print<span style="color: #000000">(a)
<span style="color: #0000ff">return<span style="color: #000000"> inner
inn =<span style="color: #000000"> outer()
inn()<span style="color: #008000">#<span style="color: #008000"> import urllib #模块
<span style="color: #0000ff">from urllib.request <span style="color: #0000ff">import<span style="color: #000000"> urlopen
<span style="color: #008000">#<span style="color: #008000"> ret = urlopen('http://www.xiaohua100.cn/index.html').read()<span style="color: #008000"><span style="color: #008000"> print(ret)<span style="color: #008000">
<span style="color: #008000"> def get_url():<span style="color: #008000">
<span style="color: #008000"> url = 'http://www.xiaohua100.cn/index.html'<span style="color: #008000">
<span style="color: #008000"> ret = urlopen(url).read()<span style="color: #008000">
<span style="color: #008000"> print(ret)<span style="color: #008000">
<span style="color: #008000"> get_url()
<span style="color: #0000ff">def<span style="color: #000000"> get_url():
url = <span style="color: #800000">'<span style="color: #800000">http://www.xiaohua100.cn/index.html<span style="color: #800000">'
<span style="color: #0000ff">def<span style="color: #000000"> get():
ret =<span style="color: #000000"> urlopen(url).read()
<span style="color: #0000ff">print<span style="color: #000000">(ret)
<span style="color: #0000ff">return<span style="color: #000000"> getget_func =<span style="color: #000000"> get_url()
get_func()
b else b
<span style="color: #008000">#<span style="color: #008000">函数的嵌套定义<span style="color: #008000">
<span style="color: #008000">内部函数可以使用外部函数的变量<span style="color: #008000">
<span style="color: #008000"> a = 1<span style="color: #008000">
<span style="color: #008000"> def outer():<span style="color: #008000">
<span style="color: #008000"> a = 1<span style="color: #008000">
<span style="color: #008000"> def inner():<span style="color: #008000">
<span style="color: #008000"> a = 2<span style="color: #008000">
<span style="color: #008000"> def inner2():<span style="color: #008000">
<span style="color: #008000"> nonlocal a #声明了一个上面第一层局部变量<span style="color: #008000">
<span style="color: #008000"> a += 1 #不可变数据类型的修改<span style="color: #008000">
<span style="color: #008000"> inner2()<span style="color: #008000">
<span style="color: #008000"> print('##a## : ',a)<span style="color: #008000">
<span style="color: #008000"> inner()<span style="color: #008000">
<span style="color: #008000"> print('a : ',a)
<span style="color: #008000">#<span style="color: #008000"> outer()<span style="color: #008000">
<span style="color: #008000"> print('全局 :',a)
<span style="color: #ff0000">#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量<span style="color: #008000">
<span style="color: #008000">声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量<span style="color: #008000">
<span style="color: #008000"> 对全局无效<span style="color: #008000">
<span style="color: #008000"> 对局部 也只是对 最近的 一层 有影响<span style="color: #008000">
<span style="color: #008000"> a = 0<span style="color: #008000">
<span style="color: #008000"> def outer():<span style="color: #008000">
<span style="color: #008000"> # a = 1<span style="color: #008000">
<span style="color: #008000"> def inner():<span style="color: #008000">
<span style="color: #008000"> # a = 2<span style="color: #008000">
<span style="color: #008000"> def inner2():<span style="color: #008000">
<span style="color: #008000"> nonlocal a<span style="color: #008000">
<span style="color: #008000"> print(a)<span style="color: #008000">
<span style="color: #008000"> inner2()<span style="color: #008000">
<span style="color: #008000"> inner()<span style="color: #008000">
<span style="color: #008000"> # outer()
<span style="color: #008000">#<span style="color: #008000"> def func():<span style="color: #008000">
<span style="color: #008000"> print(123)<span style="color: #008000">
<span style="color: #008000"> # func() #函数名就是内存地址<span style="color: #008000">
<span style="color: #008000"> func2 = func #函数名可以赋值<span style="color: #008000">
<span style="color: #008000"> func2()<span style="color: #008000">
<span style="color: #008000"> l = [func,func2] #函数名可以作为容器类型的元素<span style="color: #008000">
<span style="color: #008000"> print(l)<span style="color: #008000">
<span style="color: #008000"> for i in l:<span style="color: #008000">
<span style="color: #008000"> i()
<span style="color: #0000ff">def<span style="color: #000000"> func():
<span style="color: #0000ff">print(123<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> wahaha(f):
f()
<span style="color: #0000ff">return f <span style="color: #008000">#<span style="color: #008000">函数名可以作为函数的返回值
<span style="color: #000000">
qqxing = wahaha(func) <span style="color: #008000">#<span style="color: #008000"> 函数名可以作为函数的参数
qqxing()
#命名空间 有三种#内置命名空间 —— python解释器 # 就是python解释器一启动就可以使用的名字存储在内置命名空间中 # 内置的名字在启动解释器的时候被加载进内存里#全局命名空间 —— 我们写的代码但不是函数中的代码 # 是在程序从上到下被执行的过程中依次加载进内存的 # 放置了我们设置的所有变量名和函数名#局部命名空间 —— 函数 # 就是函数内部定义的名字 # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了#在局部:可以使用全局、内置命名空间中的名字#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用#在内置:不能使用局部和全局的名字的
#globals 永远打印全局的名字#locals 输出什么 根据locals所在的位置
# 作用域两种# 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals()# 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()