【Python3之函数对象】
2024-09-26 19:46:57
函数对象
函数(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
最新文章
- 如何将Debug文件夹下的资源打包成一个EXE文件直接执行
- iOS-数据持久化-属性列表
- Redis自定义动态字符串(sds)模块(二)
- acpi参考网站
- C语言实现二叉树-02版
- Trianglify – 五彩缤纷的 SVG 背景图案
- URL和DNS解析
- git查看某个文件的修改历史
- [string]Reverse Words in a String
- 【android自己定义控件】自己定义View属性
- 错误:The request sent by the client was syntactically incorrect的解决
- 常用css样式颜色值: 64位真彩和256位值
- hibernate框架学习笔记9:多对多关系案例
- poj2449 (第k条最短路)
- 求出100以内的素数(java实现)
- RSA算法原理——(1)目前常见加密算法简介
- Linux 内核空间与用户空间
- H5页面测试实战总结
- Win32汇编学习(11):对话框(2)
- vue的技巧代码
热门文章
- linux crontab yum安装
- HDFS对象存储--Ozone架构设计
- keystone V3 与Microsoft Active Directory(AD)的集成
- &;lt;LeetCode OJ&;gt; 58. Length of Last Word
- ajax接收json
- 以List为例浅谈C#的学习方法
- 使用Flink时遇到的问题(不断更新中)
- Python学习日记:day5-------dict字典
- 两个HC-05蓝牙模块互相绑定构成无线串口模块
- Sum of odd and even elements