函数对象

函数(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

最新文章

  1. 如何将Debug文件夹下的资源打包成一个EXE文件直接执行
  2. iOS-数据持久化-属性列表
  3. Redis自定义动态字符串(sds)模块(二)
  4. acpi参考网站
  5. C语言实现二叉树-02版
  6. Trianglify – 五彩缤纷的 SVG 背景图案
  7. URL和DNS解析
  8. git查看某个文件的修改历史
  9. [string]Reverse Words in a String
  10. 【android自己定义控件】自己定义View属性
  11. 错误:The request sent by the client was syntactically incorrect的解决
  12. 常用css样式颜色值: 64位真彩和256位值
  13. hibernate框架学习笔记9:多对多关系案例
  14. poj2449 (第k条最短路)
  15. 求出100以内的素数(java实现)
  16. RSA算法原理——(1)目前常见加密算法简介
  17. Linux 内核空间与用户空间
  18. H5页面测试实战总结
  19. Win32汇编学习(11):对话框(2)
  20. vue的技巧代码

热门文章

  1. linux crontab yum安装
  2. HDFS对象存储--Ozone架构设计
  3. keystone V3 与Microsoft Active Directory(AD)的集成
  4. &amp;lt;LeetCode OJ&amp;gt; 58. Length of Last Word
  5. ajax接收json
  6. 以List为例浅谈C#的学习方法
  7. 使用Flink时遇到的问题(不断更新中)
  8. Python学习日记:day5-------dict字典
  9. 两个HC-05蓝牙模块互相绑定构成无线串口模块
  10. Sum of odd and even elements