#函数的进阶
#命名空间和作用域
#内置命名空间:
    #python解释器一启动就可以使用的名字
    #内置的名字在启动解释器的时候被加载进内存里
#全局命名空间
    #在程序从上到下被执行的过程中依次加载进内存的
    #放置我们设置的所有变量名和函数名
#局部命名空间
    #就是函数内部定义的名字
    #当调用函数的时候 才会产生这个名称的空间随着函数执行结束,这个命名空间就消失了
#在局部:可以使用全局、内置命名空间的名字
#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
#在内置:不能使用局部和全局的名字的
def max():
    print('in max func')
max()
#作用域两种
# 全局作用域——作用在全局——内置和全局
# 局部作用域——作用在局部——函数——使用locals
a=1
def func():
    global a  #全局申明
    a+=1
func()
print(a)
#globals 永远打印全局的名字
#locals 根据locals所在的位置


def max(a,b):
    return a if a>b else b
def the_max(a,b,c):
    x =max(a,b)
    return max(x,c)
print(the_max(1,2,3))

#函数的嵌套定义
def outer():
    def inner():
        a=1
        print('inner')
        def inner2():
            nonlocal a #用于局部变量的声明
            print('inner2')
        inner2()
    inner()
outer()
#函数名相当于函数的内存地址 可以当作变量用
def func():
    print(123)
def fun(f):
    f()
fun(func)
#闭包:嵌套的函数,内部函数调用外部的变量
def oh():
    a=1
    def oi():
        print(a)
    return oi
ch=oh() #将oi的地址给与变量ch
ch() #将ch使用oi的地址形成一个函数,就相当于使用oi()


#闭包:嵌套的函数,内部函数调用外部的变量
def oh():
    a=1
    def oi():
        print(a)
    return oi
ch=oh() #将oi的地址给与变量ch
ch() #将ch使用oi的地址形成一个函数,就相当于使用oi()
import urllib #模块
from urllib.request import urlopen
ret =urlopen('https://www.taobao.com').read()
print(ret)
#闭包可以节省空间不用循环打开变量
def ger_htm():
    url='https://www.taobao.com'
    def ger_us():
        ret =urlopen(url).read()
        print(ret)
    return ger_us
get_func=ger_htm()
get_func()

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。