一、函数名的运用
1、函数名可以赋值给其它变量
def func(): print("我是一个函数") a = func # 把函数名当成一个变量赋值给另一个变量 a() # 等同于func()
2、函数名可以作为容器类的元素
def func1(): print("我是函数——1") def func2(): print("我是函数——2") def func3(): print("我是函数——3") list_1 = [func1, func2, func3] # 把函数名当做列表的元素 for i in list_1: i() # 等同于func1()、func2()、func3() # 运行结果: 我是函数——1 我是函数——2 我是函数——3
3、函数名可以当做其它函数的参数
def func1(): print("我是函数——1") def func2(f): f() print("我是函数——2") func2(func1) # 运行结果: 我是函数——1 我是函数——2
4、函数名可以作为返回值
二、闭包
1、什么是闭包
内部函数包含对外部作用域而非全局作用域名字的引用,则这个内部函数就叫做闭包。
如果一个内部函数是一个闭包,那么这个闭包引用的外部函数的变量会一直存在内存中,不会随着函数的结束而消失。
def func(): name = '闭包' def inner(): print(name)
2、判断闭包函数的方法:__closure__
# #输出的__closure__有cell元素 :是闭包函数 def outer(): name = "wahaha" def inner(): print(name) print(inner.__closure__) return inner f = outer() f() # 输出的__closure__无cell元素 :不是闭包函数 def outer(): name = "wahaha" def inner(): print("KFC") print(inner.__closure__) return inner f = outer() f() #输出的__closure__无cell元素 :不是闭包函数 name = "wahaha" def outer(): def inner(): print(name) print(inner.__closure__) return inner f = outer() f()
3、闭包最常用的方式
def outer(): age = 18 def inner(): print(age) return inner f = outer() f()
4、闭包示例
def wrapper(): money = 1000 def func(): name = 'eva' def inner(): print(name,money) return inner return func f = wrapper() i = f() i()
from urllib.request import urlopen def get_url(url): def get_source(): content = urlopen(url).read() return content return get_source url = "https://www.runoob.com/python3/python3-string.html" f = get_url(url) content = f() print(content)