zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Jenkins中构建Testcomplete项目的方法介绍
    抖音批量,批量运营抖音_不要迷恋我_【单月抖音变现7000万】教程
    java 读取 excel 表格内容
    .NET Core 2.1中的分层编译(预览)
    Windows10上使用Linux子系统(WSL)
    swagger上传文件并支持jwt认证
    .NET微服务 容器化.NET应用架构指南(支持.NET Core2)
    用C#编写Linux守护进程
    安装mysql后运行.net程序出错
    2018 你好
  • 原文地址:https://www.cnblogs.com/Ryan-Fei/p/12119998.html
Copyright © 2011-2022 走看看