python定义公民类_Python-理解函数为”一等公民”

本文探讨Python中函数作为“一等公民”的特性,如何自定义、动态赋值、作为参数传递和返回值。举例展示了函数的原生属性,并通过`dir()`函数查看其内置属性。此外,介绍了高阶函数的概念,如`map`、`filter`,以及函数作为参数传递的示例。最后提到了函数作为一等公民带来的闭包现象及其理解。
摘要由CSDN通过智能技术生成

Python中一切皆对象,函数也是对象,也就是说对象能干什么、函数也能干。如拥有原生属性、自定义创建、动态赋值、作为参数传递、作为返回值返回。

作为“一等公民”的函数

一等公民?对于这个描述,难道在编程的代码世界里,也会分369等吗,那么这种划分方式是什么呢

没错在编程的世界里,不同的对象有不同的权利、不同的作用范围、不同的生命周期。同时其赋值、传递、使用方式也大为不同。举一个简单的例子,java作为编译型语言的代表,哪一种类型的对象作为一等公民,拥有最多权限呢,毫无疑问,大家会想到类(class)。对于类我们可以自定义创建、可以动态赋值、可以在函数中传递类的实例化对象,同时类拥有大量的原生属性,以及java字节码为其提供支持、由jvm直接管理。以类作为参考,函数的地位是在太低了,函数只能依赖类或者接口而存在,函数在字节码中也没有自己的属性。动态赋值、参数传递都必须依赖类为媒介,显然是一个“弱势公民”。

在Python中函数荣升为“一等公民”,拥有自己的原生属性,由Python解释器直接管理,能够在函数中以参数的形式直接传递,能够直接进行赋值。在Python中可以直接定义函数而不用依赖类。

一个栗子

>>> def sum(a,b):

... return a+b

...

>>> sum(5,3)

8

>>> type(sum)

>>> dir(sum)

['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

通过内置函数type可以看出Python中对函数有固定的类型支持,同时通过内置函数dir可查看自定义函数sum所内置的函数,从而简单的感受了Python对函数的支持。

高阶函数

“一等公民”函数的一个特点是可以作为参数进行传递,在Python中将函数作为一个参数传递给另外一个函数,是一件非常简单的事,同时能够接受函数作为参数的函数称为高阶函数。如内置函数map、filter、sorted等等都是高阶函数。

“一等公民”函数带来的闭包问题

闭包指:延伸了作用域的函数,其中包含函数定义体中引用、但是不再定义体中定义的非全局变量。

对这个定义,一个最简单的理解就是:只有涉及嵌套函数时才有闭包问题。

具体闭包问题可以参考之前闭包文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值