加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 00:01:47 所属栏目:Python 来源:网络整理
导读: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 sty

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读