美文网首页Python
Python的函数是第一类对象(函数特性总结)

Python的函数是第一类对象(函数特性总结)

作者: 苦逼李 | 来源:发表于2018-04-21 21:19 被阅读6次

本文对Python中的函数做了一个系统的总结。但涉及到的有一些概念并不会具体展开。

前段时间我在学习闭包,而后又接触了装饰器。我在学习装饰器时经常被函数的嵌套搞的晕头转向——不都说Python好学,可这装饰器为啥这么难懂/(ㄒoㄒ)/~~。后来通过了解,我认识到了问题出在函数身上,对于它的某些特性我还是非常陌生。痛定思痛之后我系统的学习了函数,也就有了下面的这篇文章。
plus:如果你还不了解闭包或者装饰器,那么这篇文章也能为你了解它们做个铺垫。

1.第一类对象

说到函数不得不先引出这个概念。

维基百科上的定义是这样的:第一类对象(英语:First-class object)在计算机科学中指可以在执行期创造并作为参数传递给其他函数或存入一个变数的实体。将一个实体变为第一类对象的过程叫做“物件化”(Reification)

定义归定义,看不懂就算了(逃~),下面给出第一类对象的性质,并分别作介绍(介绍完你就清楚了):

第一类对象

  • 可以被存入变量或其他结构
  • 可以被作为参数传递给其他函数
  • 可以被作为函数的返回值
  • 可以在执行期创造,而无需完全在设计期全部写出
  • 即使没有被系结至某一名称,也可以存在

1.1.可以被存入变量或其他结构

Python中的函数可以被赋值给变量。你可以像使用其他变量一样使用函数。

def f1():
    pass
a = f1  # 建立了a对函数f1的一个引用 
a()     

被引用的函数也可以是内建函数:
b = abs()

函数可以被存放于容器之中,在python中这类容器变量有list,tuple,set,dict。

def f1():
    pass
def f2():
    pass
a,b = [f1, f2]  # 函数f1,f2存在在列表中,并分别被变量a,b引用

1.2.可以被作为参数传递给其他函数

def foo(func):
    print("Hello")
    func()
def func():
    print("world")
foo(func)   

Hello
world

1.3.可以被作为函数的返回值

def foo(func):
    print("Hello")
    return func
def func():
    print("world")
foo(func)

Hello
<function __main__.func>

1.4.可以在执行期创造,而无需完全在设计期全部写出

def f1():
    x = 1
    def f2():
        print(x)
    return f2
a = f1()
a()  # 1

# 函数f1内嵌套了函数f2,当执行f1时,f2才被定义。

1.5.即使没有被系结至某一名称,也可以存在

最典型的例子莫过于lambda函数了。

>>>lambda x:x*x
 <function __main__.<lambda>>

a = lambda x:x*x
a(2)  # 4

2.函数是第一类对象

你可以发现,上面我举的例子中都是以函数作为例子,没错,在Python中,函数是第一类对象。

如果你接触过C或其他编程语言,你就会发现,Python中的函数拥有这些编程语言所不具有的可作为参数,可作为返回值,可以嵌套等特性。这也解释了为什么Python能够支持像装饰器这样的强大功能。

知道了这些,你再去了解闭包,装饰器,相信就会轻松的多了。

相关文章

  • Python的函数是第一类对象(函数特性总结)

    本文对Python中的函数做了一个系统的总结。但涉及到的有一些概念并不会具体展开。 前段时间我在学习闭包,而后又接...

  • 函数进阶(闭包函数,装饰器)

    一、函数对象 一、函数是第一类对象,即函数可以当作数据传递 二、利用该特性,优雅地取代多分支的if 二、函数嵌套 ...

  • 函数篇

    函数做为第一类对象 javascript中一个重要的概念:函数是第一类对象,或者称为一等公民。因为它具有对象的特性...

  • Python 函数是第一类对象

    在很多资料中,经常会看到这样一句话:“Python 中的函数是第一类对象”。这里所说的第一类对象,其实是指函数作为...

  • 神级程序员为了带实习生入门Python花25天整理最全面向对象教

    总结:函数式的应用场景 –> 各个函数之间是独立且无共用的数据。 面向对象三大特性 面向对象的三大特性是指:封装、...

  • 闭包

    曾经介绍过两篇关于函数的文章,第一篇是 关于 Python 函数是第一类对象,第二篇是关于 Lambda 函数,今...

  • python-迭代对象处理

    参考廖雪峰python3知识点的总结 使用函数对迭代对象进行处理 map函数:map(函数对象,可迭代对象)map...

  • 廖雪峰python3 教程

    观其大纲 1 python基础 2 函数 3 高级特性 4 函数式编程 5 模块 6 面向对象编程 7 面向对象高...

  • 《Fluent Python》读书笔记-First-Class

    概览     函数在python里是作为第一类对象(First Class Objects)。在编程语言理论里,定...

  • JS回调函数(深入篇)

    阅读来源:JS回调函数(深入篇) 在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类...

网友评论

    本文标题:Python的函数是第一类对象(函数特性总结)

    本文链接:https://www.haomeiwen.com/subject/zppflftx.html