def func1(): print('你是谁,你来自哪里') print(func1) # <function func1 at 0x000001256F021E18>
二、函数名能够赋值给其余变量 网络
def func1(): print('这是函数1') # print(func1) res = func1 # 把函数当成一个变量赋值给另外一个变量 res() # 函数调用 func1() # 这是函数1
三、函数名能够看成容器类的元素 闭包
def func1(): print('大风吹1') def func2(): print('大风吹2') def func3(): print('大风吹3') def func4(): print('大风吹4') lst = [func1,func2,func3,func4] for i in lst: i()
四、函数名能够看成函数的参数进行传递 app
def func1(): print('这两天降温了') def func2(fn): print('我是函数2') fn() print('我是函数2') func2(func1)
def func1(): print('哈哈') def func2(): print('嘿嘿') def func3(): print('呵呵') # 代理装饰器雏形 def proxy( a ): # a 就是变量,形参 print('我是代理') a() print('代理完毕') proxy(func1) proxy(func2) proxy(func3)
五、函数名能够做为函数的返回值 函数
def func1(): print('这是函数1') def func2(): print('这是函数2') return func2 fn = func1() # 执行函数1,函数1返回的是函数2,这时fn之想的就是函数2 fn() # 执行上面返回的函数(也就是函数2)
def wapper(): name = '昂昂' # 局部变量常驻于内存 def inner(): print(name) # 在内层函数中调用外层函数的局部变量 return inner # 返回内部函数名 res = wapper() # res 是一个内层函数 res() # res 就是inner,执行的时间不肯定,必须保证里边的name存在
# 写一个简易爬虫 from urllib.request import urlopen # 去掉数字签名 import ssl ssl._create_default_https_contest = ssl._create_unverified_context def func(): #获取到网页中的内容,当网速很慢时,反复的去打开这个网站,会很慢 content = urlopen("https://www.dytt8.net/";).read() def inner(): return content.decode("gbk") # 网页内容 return inner print('开始网络请求') ret = func() # 网络请求已经完毕 print("网络请求完毕") print("第一次",ret()[30]) print("第二次",ret()[30])
def wapper(): name = 'xiaomeng' def inner(): print('zhangying') print(inner.__closure__) inner() wapper()
是闭包 网站
def wapper(): name = 'xiaomeng' def inner(): print(name) print(inner.__closure__) # (<cell at 0x000001B2D03086A8: str object at 0x000001B2D03A23F0>,) inner() wapper()
s = '你是谁啊' print(dir(s)) # 能够打印对象中的方法和函数 print(dir(str)) # 能够打印类中申明的方法和函数
lst = [1, 2, 3] # 模拟for循环 for el in lst it = lst.__iter__() # 拿迭代器 while 1: # 循环 try: # 尝试 it.__next__() except StopIteration: # 出现错误,意味着数据拿完了 break # 结束循环