函数的对象特征

注:本文整理自今日头条作者:菜鸟学python,原标题:这个概念是每一个学习Python的人必须掌握的知识点。部分内容有增减。

函数的对象特征

Python中一切都是对象(int,str,list,class),函数也是对象的一种。

Python中所有对象都有三个特征:身份、类型、值

  • 身份:每个对象都有一个唯一的身份标识,都可以通过id()获取
  • 类型:对象都是有类型的,这个类型会告诉你有什么属性和方法
  • 值:对象所表示的数据

这些特点函数都具备。

#示例1
def func():
    print('Hi,I am a fun')
    
print(type(func))    #func的类型
<class 'function'>
print(func)  #func的内存地址
<function func at 0x109a3d158>
print(id(func))  #func的id值
4456698200

函数可以赋值

一般的变量可以赋值,函数也可以赋值

从下面的例子可以看出,func像普通赋值一样赋值给了func2,同时func2可以直接当函数使用

func2 = func

print("func的内存地址:   " + str(func))
print("func2的内存地址:  " + str(func2))

func2()
func的内存地址:   <function func at 0x109a3d158>
func2的内存地址:  <function func at 0x109a3d158>
Hi,I am a fun

函数可以当参数传递

通常我们参数一般都是字典、列表、字符串,其实函数也可以当参数传递,示例如下:

def another_fun(func):
    print('Hello,I am another func')
    func()  #执行传递进来的函数func()
    
another_fun(func)
    
Hello,I am another func
Hi,I am a fun

another_fun函数有一个参数是func,实际上是讲func函数的内存地址当做参数传给了antoher_fun,接着我们就可以在another_fun函数里面直接使用了。

返回值也可以是函数

Python的返回值设计得很灵活,例如可以返回单个,也可以返回多个,函数也可以当做返回值返回。实际上经常玩的闭包、装饰器就是这么使用的。

def show_name(name):
    def inner(age):
        print('My name is : ',name)
        print('My age is : ' + age)
    return inner

f = show_name('Amy')
f('14')
My name is :  Amy
My age is : 14

在上面的例子中,我们定义了一个函数叫show_name,这个函数的返回值是一个函数。也就是说变量f就是返回值inner函数的内存地址。所以我们可以用f('14')来执行这个函数,这就是闭包的概念。

顺便复习一下什么是闭包。
首先是维基百科中关于闭包的概念:
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给>定函数被多次调用的过程中,这些私有变量能够保持其持久性。

根据这句话,其实我们自己就可以总结出在python语言中形成闭包的三个条件,缺一不可:

  1. 必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
  2. 内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
  3. 外部函数必须返回内嵌函数——必须返回那个内部函数

函数可以在字典里面使用

函数可以在容器中使用,例如列表、字典。函数可以像参数一样使用,示例如下:

def show_apple(price):
    print('The apple price is:', price)
    
def show_orange(price):
    print('The orange price is:', price)
    
def process(your_choice,price):
    switch[your_choice](price)

switch = {'apple':show_apple,'orange':show_orange}
    
process('apple',5.8)
process('orange',6.4)
The apple price is: 5.8
The orange price is: 6.4

我们把函数show_apple 和 show_orange当做变量存放在字典里,外面设计一个函数可以根据类别来动态的调用函数,这样的设计实在是太好用了。
python中一切皆对象,这个特其实是python语言灵活的根本。

转载于:https://www.cnblogs.com/Amyziyao/p/9276623.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值