• 【Python3之函数对象】


    函数对象

    函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性。

    那到底什么是第一类对象(First-Class Object)呢?

    在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

    1.函数身为一个对象,拥有对象模型的三个通用属性:id、类型、和值。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    def foo():
        print('from foo')
    foo()
    
    print(id(foo))
    print(type(foo))
    print(foo)

    输出

    from foo
    4406808360
    <class 'function'>
    <function foo at 0x106aa8f28>

    2.函数可以被引用,即函数可以赋值给一个变量

    还可以把该函数赋值给更多的变量,唯一变化的是该函数对象的引用计数不断地增加,本质上这些变量最终指向的都是同一个函数对象。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    def foo():
        print('from foo')
    
    foo()
    func=foo    #引用,赋值
    print(foo)
    print(func)
    func()

    输出

    from foo
    <function foo at 0x10eed8f28>
    <function foo at 0x10eed8f28>
    from foo

    3.函数可以当做参数传递

    def foo():
        print('from foo')
    
    def bar(func):
        print(func)
        func()
    
    bar(foo)

    输出

    <function foo at 0x1047eff28>
    from foo

    4.函数可以作返回值

    函数接受一个或多个函数作为输入或者函数输出(返回)的值是函数时,我们称这样的函数为高阶函数

    def foo():
        print('from foo')
    
    def bar(func):
        return func     
    
    f=bar(foo)
    
    print(f)
    
    f()

    输出

    <function foo at 0x107f29f28>
    from foo

    5.函数可以当作容器类型的元素

    容器对象(list、dict、set等)中可以存放任何对象,包括整数、字符串,函数也可以作存放到容器对象中

    def foo():
        print('from foo')
    dic={'func':foo}
    
    foo()
    
    print(dic['func'])
    
    dic['func']()

    输出

    from foo
    <function foo at 0x10997ef28>
    from foo

    6.函数还可以嵌套

    函数嵌套的定义

    def f1():
    
        def f2():
            print('from f2')
            def f3():
                print('from f3')
            f3()
        f2()
    
    
    f1()

    输出

    from f2
    from f3

    应用

    def get(text):
        def clean(t):   #2
            return t[1:]
        new_text = clean(text)  #1
        return len(new_text)
    
    print(get('python'))

    输出

    5

  • 相关阅读:
    express框架总结
    http协议和file协议的区别
    苹果和安卓机的兼容问题
    nodejs搭建服务器
    VsCode编辑器
    编辑器统一 快捷键
    前后端分离 方案
    资源
    commonJs的运行时加载和es6的编译时加载
    mock 数据 解决方案
  • 原文地址:https://www.cnblogs.com/smallmars/p/6936871.html
Copyright © 2020-2023  润新知