首页 Python day10(闭包、import模块、函数命名空间)

day10(闭包、import模块、函数命名空间)

#闭包:嵌套函数,内部函数调用外部函数的变量# def outer():# a = 1# def inner():# print(a)# inner()# outer()def outer():a = 1def inner():print(a)return innerinn = outer()inn()# import urllib #模块from urllib.request import urlopen# ret = urlo

<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"> get

get_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()

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/kaifa/python/20200729/7336.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部