zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    通用权限管理设计 之 数据库结构设计
    jQuery LigerUI 插件介绍及使用之ligerDateEditor
    jQuery LigerUI 插件介绍及使用之ligerTree
    jQuery LigerUI V1.01(包括API和全部源码) 发布
    jQuery liger ui ligerGrid 打造通用的分页排序查询表格(提供下载)
    jQuery LigerUI V1.1.5 (包括API和全部源码) 发布
    jQuery LigerUI 使用教程表格篇(1)
    jQuery LigerUI V1.0(包括API和全部源码) 发布
    jQuery LigerUI V1.1.0 (包括API和全部源码) 发布
    nginx keepalived
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7097946.html
Copyright © 2011-2022 走看看