gpt4 book ai didi

Python 过程返回值

转载 作者:IT老高 更新时间:2023-10-28 21:15:09 25 4
gpt4 key购买 nike

在 Python 中,可以创建一个没有显式返回的过程。即:

def test(val):
if 0 == val:
return 8

此外,可以将该函数的结果分配到一个变量:

>>> a = test(7)
>>> print `a`
'None'

这到底是为什么?这个令人费解的设计决策背后的语言逻辑是什么?为什么不简单地引发编译器错误?

编辑:是的,我意识到它是这样工作的。谢谢。我的问题是为什么?将细微的错误引入代码中似乎是一种可靠的方法。正如下面 e-satis 所提到的,这似乎违背了非常明智的 Python 格言,即“显式优于隐式”。

那么,这是怎么回事?这只是设计疏忽还是简化假设或深思熟虑的决定?

编辑:每个人都同意以这种方式表达意图要好得多:

def test(val):
if 0 == val:
return 8
else:
return None

如果是这样,为什么 Python 会更喜欢前一种风格而不是引发编译时异常?

编辑:S.Lott 明确提出了这一点(其他人也这样做,他对我来说似乎最清楚)这种行为是 Python 是一种动态语言的结果,因此无法在编译时检查time,系统的运行时行为。

由于过程(那些不返回值的函数)和函数(那些返回值的函数)之间没有区别,因此在编译时没有什么要强制执行的。这意味着当我们谈到运行时行为时,我们要么在某些情况下发生灾难性故障(我们抛出异常),要么假设程序员知道他们在做什么并理解默认行为,我们就会默默地失败。

pythonic的方式是后者,C风格的方式是前者。
作为这样做的一个很好的理由,这似乎是有道理的。

S.Lott 的明确理由隐藏在对已接受答案的评论中,所以我认为最好在这里总结一下。

我会暂缓接受答案,看看 S.Lott 是否会做出正式回答。否则,我就给 SilentGhost 打分。

最佳答案

虽然每个函数可能没有显式返回,但它会有一个隐式返回,即 None,顺便说一下,它是一个普通的 Python 对象。此外,函数通常return None显式。

我想隐式返回 None 只是一个易于使用的优化。

P.S.我想知道您建议 compile 在以下情况下会做什么:

def t():
if True:
return 'ham'

P.P.S. return 语句表示需要返回一些东西,可以是 None42 '垃圾邮件'。然而,有些函数并没有真正返回任何内容,例如 list.sort__init__,因此要求 return None 会产生开销> 每个 __init__ 末尾的语句。

关于Python 过程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com