python class函数报错_Python 的函数是第一类 First-Class 对象
Python的函数是第一类对象(first-class object)。你可以把一个函数复制给变量,或者把函数存储在一个结构中。可以像参数一样把函数传递进另一个函数,还可以从一个函数中返回另一个函数。
知道了这些,有助于理解 lambda 和装饰器。这也是 面向函数编程 的一部分。
通过这篇文章,我用最简单的例子,为大家做个说明。
首先定义一个函数,然后调用它:
输出:hello alex!
函数是对象
和列表,字符串一样,函数是对象。我们可以把函数赋值给一个变量。
输出:hello john!
hi = hello 这一行并没有调用函数 hello 。实际上是 hi 引用了函数 hello。现在 hi 是可调用的,最后执行 hi('john'),调用函数代码。打印了 hello john!。
函数对象和函数的名称是两个概念,在上面的例子,hi 和 hello 都指向同一个函数对象。如果删除 hello 并不影响 hi,它继续指向原来的函数对象。
输出:hello everyone!
另外,函数在创建阶段就赋予了名称。上面的函数对象创建的时候,指定了名称 hello ,我们把 hi 指向了函数对象,并不影响它之前的名称。print(hi.__name__) # 输出 hello
可见,输出值还是 hello。
函数可以存储在数据结构中
因为函数是第一类对象,你可以把它存入数据结构中,比如列表:
输出:
可以不用赋值给变量,直接通过列表索引调用函数对象:print(funcs[0]('maggie')) # 输出 hello maggie!
函数可以传递给其他的函数
函数可以通过参数传递进其他函数。
输出:hello alex!
这里,把 hello 函数传递进了 hello_alex。在 hello_alex 调用了函数 hello,并打印。
另一个例子:
输出:HELLO ALEX!
我们写了新的函数 hello_alex_upper,这个函数将默认的输出大写。
函数作为参数传递进另一个函数,这个特性是非常强大的。你可以不修改之前的代码,直接为你的应用增加其他的行为。
函数能够接收另一个函数作为参数,这种函数被称为 高阶函数(high order function)。属于面向函数编程的范畴。
在 Python 中使用高阶函数的一个经典的例子是 map 函数。它接收一个函数和一个序列。序列的每一个元素都经过函数的处理,然后返回修改过的结果序列。>>> list(map(str.upper, ['hello', 'world']))['HELLO', 'WORLD']
函数可以嵌套
Python 允许一个函数定义在另一个函数里,这通常被称为 嵌套函数 (nested function) 或者 内部函数(inner function)。
输出:GREET ALEX
注意,内部函数 upper 在外部是访问不了的,如果你试图访问,会报 AttributeError 错误。print(greet.upper)
报错:Traceback (most recent call last): File "first-class-object.py", line 38, in
print(greet.upper)AttributeError: 'function' object has no attribute 'upper'
如果你想访问内部函数,需要返回该内部函数。
对象也可以像函数那样调用
我们从类实例化,得到一个对象,那么对象就可以调用类定义的相关方法。其实对象也可以像函数那样调用,只需要在类上定义一个函数 __call__。
输出:alexalex
在背后,能够像方法一样调用对象,实际上是对象调用它的 __call__ 方法。
python class函数报错_Python 的函数是第一类 First-Class 对象相关推荐
- mysql 自定义函数报错_Mysql自定义函数报错解决方法
[最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...
- mysql 自定义函数报错_Mysql自定义函数报错解决方法 | 学步园
1.在MySql中创建自定义函数报错信息如下: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READ ...
- JavaScript立即执行函数报错--立即执行函数原理分析
JavaScript立即执行函数报错 1.'()'在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行'()',环境会报出语法错误提示. 2.'()' ...
- python全局变量赋值报错_python全局变量、回调函数
1.python全局变量相关概念及使用 来自菜鸟教程上的例子: http://www.runoob.com/python3/python3-function.html 一.python入参需要注意地方 ...
- python class函数报错_Python multiprocess pool模块报错pickling error问题解决方法分析
本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法.分享给大家供大家参考,具体如下: 问题 之前在调用class内的函数用multiproc ...
- python时间函数报错_Python Day11-LEGB-global-时间函数
1.LEGB规则对变量名进行作用域解析 我们已经知道了多个命名空间可以独立存在,而且可以在不同的层次上包含相同的变量名."作用域"定义了Python在哪一个层次上查找某个" ...
- python read函数报错_python 使用read_csv读取 CSV 文件时报错
读取csv文件时报错 df = pd.read_csv('c:/Users/NUC/Desktop/成绩.csv' ) Traceback (most recent call last): File ...
- python join函数报错_python中join()函数的使用方法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分 ...
- python调用函数怎么错_python调用函数失败是什么原因
一.调用函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数. 也可以在交互式命令行通过help(abs)查看a ...
最新文章
- 最小割 ---- 集合冲突模型 ---- AGC038 F - Two Permutations[详解]
- VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)
- php 中 fastcgi
- Go 语言web 框架 Gin 练习8
- 汇编语言学习——第四章 第一个汇编程序
- Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作
- mac 源生安装mysql_Django执行源生mysql语句实现过程解析
- 作业MathExam
- go语言暂停命令_go test命令(Go语言测试命令)完全攻略
- 记录QT在实时显示摄像头数据时候切换TAB页出现异常
- Openlayers 杂项
- 58同城推荐系统设计与实现
- cachecloud 安装
- SimpleDateFormat 使用TimeZone
- C++17之std::apply与std::make_from_tuple
- TAPD使用方法学习
- SAP MM库存盘点流程
- hp打印机无法与计算机,电脑无法连接HP打印机怎么办?
- 计算机视觉就业怎么样?好找工作吗?
- 7-209 sdut-C语言实验-数位数7-210 sdut-C语言实验-小树快长高
热门文章
- 最美的Linux中文版的吗,号称最美的Linux发行版——Elementary OS
- 安装mysql 环境变量_win10系统安装mysql数据库后配置环境变量的图文教程
- 【Python】字符转换为 ASCII 码
- [云炬创业管理笔记]第十章商业计划书答辩测试2
- 逻辑回归还能这样解?关于Kernel Logistic Regression的详细解释
- 简述Hadoop和Spark的异同
- c#开发中程序集调用时容易忽略的问题
- c#中将对象序列化为xml(包括list)
- Sql获取表信息(包括结构及字段说明)
- 动态加载JS脚本的4种方法