python函数可以返回多个函数值吗_python - 函数返回多个值是pythonic吗?
python - 函数返回多个值是pythonic吗?
在python中,您可以让函数返回多个值。 这是一个人为的例子:
def divide(x, y):
quotient = x/y
remainder = x % y
return quotient, remainder
(q, r) = divide(22, 7)
这似乎非常有用,但看起来它也可能被滥用(“嗯......功能X已经计算出我们需要的中间值。让我们让X返回那个值”)。
你什么时候画线并定义一个不同的方法?
9个解决方案
98 votes
绝对(就你提供的例子而言)。
元组是Python中的一等公民
内置函数(x, y)就是这样做的。
q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y + mod == x
还有其他例子:(x, y),Point(x, y),dict.items。
for i, e in enumerate([1, 3, 3]):
print "index=%d, element=%s" % (i, e)
# reverse keys and values in a dictionary
d = dict((v, k) for k, v in adict.items()) # or
d = dict(zip(adict.values(), adict.keys()))
顺便说一下,括号在大多数情况下都不是必需的。Python库参考引文:
元组可以通过多种方式构建:
使用一对括号表示空元组:()
对单例元组使用尾随逗号:a或(a,)
用逗号分隔项目:a,b,c或(a,b,c)
使用内置的元组():tuple()或元组(可迭代)
功能应该用于单一目的
因此他们应该返回一个对象。 在你的情况下,这个对象是一个元组。 将元组视为ad-hoc复合数据结构。 有些语言几乎每个函数都返回多个值(Lisp中的列表)。
有时返回(x, y)而不是Point(x, y)就足够了。
命名为元组
通过在Python 2.6中引入命名元组,在许多情况下,最好返回命名元组而不是普通元组。
>>> import collections
>>> Point = collections.namedtuple('Point', 'x y')
>>> x, y = Point(0, 1)
>>> p = Point(x, y)
>>> x, y, p
(0, 1, Point(x=0, y=1))
>>> p.x, p.y, p[0], p[1]
(0, 1, 0, 1)
>>> for i in p:
... print(i)
...
0
1
jfs answered 2019-05-24T08:17:00Z
26 votes
首先,请注意Python允许以下内容(不需要括号):
q, r = divide(22, 7)
关于你的问题,任何方式都没有硬性规定。 对于简单(通常是人为的)示例,似乎给定函数始终可以具有单一目的,从而产生单个值。 但是,在将Python用于实际应用程序时,很快就会遇到需要返回多个值的许多情况,从而使代码更加清晰。
所以,我会说做任何有意义的事情,不要试图遵循一个人为的约定。 Python支持多个返回值,因此请在适当时使用它。
Jason Etheridge answered 2019-05-24T08:17:56Z
12 votes
你给出的例子实际上是一个python内置函数,名为divmod。所以有人在某个时间点认为它是pythonic足以包含在核心功能中。
对我而言,如果它使代码更清晰,它就是pythonic。 比较这两个代码块:
seconds = 1234
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
seconds = 1234
minutes = seconds / 60
seconds = seconds % 60
hours = minutes / 60
minutes = minutes % 60
Nathan Jones answered 2019-05-24T08:18:33Z
3 votes
是的,返回多个值(即元组)肯定是pythonic。 正如其他人所指出的那样,Python标准库中有很多例子,以及备受推崇的Python项目。 另外两条评论:
返回多个值有时非常非常有用。 例如,采用可选地处理事件的方法(在执行此操作时返回一些值)并返回成功或失败。 这可能出现在一系列责任模式中。 在其他情况下,您希望返回多个紧密相连的数据 - 如给出的示例所示。 在此设置中,返回多个值类似于返回具有多个成员变量的匿名类的单个实例。
Python对方法参数的处理需要能够直接返回多个值。 例如,在C ++中,方法参数可以通过引用传递,因此除了正式的返回值之外,您还可以为它们分配输出值。 在Python中,参数是“通过引用”传递的(但在Java意义上,而不是C ++)。 您不能将新值分配给方法参数,并将其反映在方法范围之外。 例如:
// C++
void test(int& arg)
{
arg = 1;
}
int foo = 0;
test(foo); // foo is now 1!
与之比较:
# Python
def test(arg):
arg = 1
foo = 0
test(foo) # foo is still 0
zweiterlinde answered 2019-05-24T08:19:43Z
1 votes
它绝对是pythonic。 事实上,您可以使用C语言从函数中返回多个值,您需要为某些类型的组合定义结构。
但是,如果你达到了从单个函数返回10个值的疯狂点的地步,你应该认真考虑将它们捆绑在一个类中,因为那时它变得笨拙。
indentation answered 2019-05-24T08:20:24Z
1 votes
返回一个元组很酷。 另请注意新的namedtuple这是在python 2.6中添加的,这可能会让你更适合你:[http://docs.python.org/dev/library/collections.html#collections.namedtuple]
pixelbeat answered 2019-05-24T08:20:58Z
1 votes
我对Python很新,但对我来说,元组技术看起来非常pythonic。 但是,我有另一个可能提高可读性的想法。 使用字典允许按名称而不是位置访问不同的值。 例如:
def divide(x, y):
return {'quotient': x/y, 'remainder':x%y }
answer = divide(22, 7)
print answer['quotient']
print answer['remainder']
Fred Larson answered 2019-05-24T08:21:27Z
1 votes
OT:RSRE的Algol68有一个好奇的“/:=”运算符。 例如。
INT quotient:=355, remainder;
remainder := (quotient /:= 113);
给出3的商,剩余的16。
注意:通常会丢弃“(x /:= y)”的值,因为商“x”是通过引用分配的,但在RSRE的情况下,返回的值是余数。
C.F. 整数算术 - Algol68
NevilleDNZ answered 2019-05-24T08:22:35Z
0 votes
对于像divmod这样的简单函数,使用元组返回多个值是很好的。如果它使代码可读,那就是Pythonic。
如果返回值开始变得混乱,请检查该函数是否执行过多,如果是,则将其拆分。 如果像对象一样使用大元组,则将其作为对象。 另外,请考虑使用命名元组,它将成为Python 2.6中标准库的一部分。
Will Harris answered 2019-05-24T08:23:14Z
python函数可以返回多个函数值吗_python - 函数返回多个值是pythonic吗?相关推荐
- python函数只有被调用才会执行_Python函数
1.函数的定义 python内置了很多函数,可以直接调用,多数情况下,还需要自定义函数,自定义函数的主体,换行的缩进表示代码属于该函数.定义的函数只有被调用的时候才会执行.函数只有有返回值的情况下才可 ...
- python不允许使用关键字作为变量名_python函数变量_python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数 - 云+社区 - 腾讯云...
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在python 中, ...
- python函数中可变参数的传递方式是_Python函数可变参数定义及其参数传递方式实例详解...
本文实例讲述了Python函数可变参数定义及其参数传递方式.分享给大家供大家参考.具体分析如下: python中 函数不定参数的定义形式如下: 1.func(*args) 传入的参数为以元组形式存在a ...
- python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...
python中为什么用json有什么作用 如何用python读取json里面的值啊我爱你,所以我给了你伤害我的权力,只要我能忍受,我会一直陪伴着你,但你不能伤害我太多. 数据如下,我想要读取name. ...
- python中如何替换某列特定数值_python 怎么根据两列值,修改对应的某列值,其中一列的为需要修改的列标题...
自己造了些数据,不知道是否符合题主的意思. 原始数据: no wrong_item 0 001 a 1 003 a 2 002 b 3 004 c 处理后结果: Out[1]: no a b c 0 ...
- python返回函数值并退出函数_Python函数的返回值和作用域
函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: return "<= 3&quo ...
- python返回函数值并退出函数_python3函数中如何退出程序
在定义python3函数时,以 def关键词开头,后接函数标识符名称和圆括号 (),可以无返回值,也可以有返回值.那么,python3函数中如何退出程序? 工具/原料 python pycharm 截 ...
- python函数实例解析_python支持返回函数的实例解析
这篇文章主要介绍了python支持返回函数的实例解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近接触python,看到了python中返回函数的概念,以前只接触过 ...
- python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数返回浮点数
python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点 ...
- python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点数 目录
最新文章
- 阿里云rds mysql数据库数据恢复到ecs中
- Linux上新建用户及赋权操作
- Python 5种不为人知的高级特征
- Android之View绘制流程开胃菜---setContentView(...)详细分析
- 安装meme_我见过的最好JavaScript Meme,详细说明了
- 微信公众号模板消息 access_token missing
- 如何彻底卸载3dmax2020_3DMax如何才能彻底卸载干净啊?
- 线阵相机与面阵相机的区别在哪里?
- php 许愿墙 阶段案例_PHP+jQueryUI实现许愿墙功能、贴便签、贴标签功能(案例)...
- 斯坦福大学公开课 :Andrew Ng 机器学习课堂笔记之第一节(机器学习的动机与应用)
- oracle rman optimization,Oracle rman备份的使用(转)
- linux查看统计数据命令,查看,统计、正则表达式――Linux基本命令(9)
- Codesys电子凸轮功能的设计与可视化仿真
- C语言编程从键盘输入n
- 如何协助企业IT架构转型
- 产品读书《麦肯锡工作法:麦肯锡精英的39个工作习惯》
- 计算机网络自顶向下第一章读书笔记
- 【洞察人性】 理解行为背后的动机
- 计算机英语论文及翻译,计算机英语 论文翻译例子(初级)
- 数据结构算法设计题 (超详细)
热门文章
- AngularJS开发指南10:AngularJS依赖注入的详解
- CentOS上安装Git
- Grails 技巧 - View 篇
- HENXU-SOA的业务规划和建模方法之八——组件化业务模型(CBM)介绍
- 如何解决It's likely you're attempting to run Eclipse using the JRE instead of the JDK
- js高级学习笔记(b站尚硅谷)-6-IIFE
- nginx访问日志配置及访问日志切割实战
- Linux远程传输命令scp、rsync(tar打包归档并在系统之间传输文件)
- pe修改rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
- python科赫曲线编程实现雪花下落的效果_基于python绘制科赫雪花