python学习:函数---函数名的运用、闭包

一、函数名的运用

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)
原文地址:https://www.cnblogs.com/Ryan-Fei/p/12119998.html