• 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)
  • 相关阅读:
    Socket编程基础——Socket选项
    Socket编程基础——无连接UDP
    Socket编程基础——面向连接TCP
    初探网络编程
    常用的正则表达式匹配
    iOS中的桥接方式
    iOS中的原生框架生成二维码
    iOS中的单例模式
    iOS
    iOS 中实现 快速归档 与 快速解档
  • 原文地址:https://www.cnblogs.com/Ryan-Fei/p/12119998.html
Copyright © 2020-2023  润新知