在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是一种动态语言,因此无法在编译时进行检查的结果,系统的运行时行为。
由于过程(那些不返回值的函数)和函数(那些不返回值的函数)之间没有区别,因此在编译时没有要执行的内容。这意味着,当我们进入运行时行为时,在某些情况下会发生灾难性的失败(抛出异常),或者在假定程序员知道他们在做什么并且理解默认行为的情况下默默地失败。
pythonic的方法是做后者,C风格的方法是做前者。
这似乎是这样做的一个很好的理由。
S.Lott的明确论据被埋在对已接受答案的评论中,因此我认为最好在这里进行总结。
我将稍等一下,看看S.Lott是否给出正式答案。否则,我将把分数给SilentGhost。
尽管每个函数都可能没有显式的返回,但它会有一个隐式的返回,即 None
,顺便说一句,这是一个普通的Python对象。此外,功能通常是return None
明确的。
我想隐式地返回None只是一种易于使用的优化。
PS 我不知道您建议在以下情况下进行编译:
def t():
if True:
return 'ham'
PPS return
声明表明,一些 需要
退换,是它None
,42
或'spam'
。但是,某些函数实际上并不会返回任何内容,例如list.sort
或__init__
,因此return None
在每个函数的末尾要求一条语句将是一项开销__init__
。
问题内容: 在oracle中,我想创建一个delete sproc,该过程基于删除的结果返回一个整数。 这是我到目前为止所拥有的。 我试过将一个RETURNS INTEGER放入,但该存储过程将无法编译。 问题答案: 使用函数和隐式SQL游标确定删除的行数 那应该工作
我有一个存储过程,它接受参数并返回一个长值。 我如何使用jdbcTemplate来调用这个存储过程并获得返回的值。 这样对吗?
本文向大家介绍Python中执行存储过程及获取存储过程返回值的方法,包括了Python中执行存储过程及获取存储过程返回值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下: 在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: 1. 使用adodbapi 2. 使用pymssq
问题内容: 我希望能够通过脚本的返回值定义变量。这是我目前拥有的: 我已经检查了SCRIPT的返回值,但是,当我尝试设置此变量时,它总是返回0(http://docs.python.org/library/subprocess.html#subprocess.call)。我将如何运行此脚本并捕获返回值以将其存储为变量? 问题答案: 使用代替。
创建过程GetLastUpdateDate()以$$的形式返回布尔语言javascript
问题内容: 我正在尝试从存储过程中获取返回值,但它始终返回0。 C#代码 SP 在所有情况下,它都返回0。我不知道问题所在。 问题答案: 我尝试了类似您的代码,并且可以按预期工作。 但是,您的代码中两次调用ExecuteNonQuery。 首次调用时,将按预期插入记录,然后为返回值添加参数并再次执行命令。但是现在记录已存在,并且存储过程始终落在else块中,因此始终返回零。