python使用函数的结果来决定是否应该使用函数结果

标签 python function if-statement

通常您希望使用None 作为函数的返回值。如果函数返回 None 并且不使用函数的结果,如果您想做一件事,是否有 Python 习惯用法可以避免调用函数两次。下面是一个愚蠢的例子。

def foo(a, b):
  if b == 0:
    return(None)
  else:
    return(a/b)


a = b = 2
if foo(a, b) is None: #Do one thing. 1st call to function.
  print('b cannot be null')
else: #Use the result of function. 2nd function call.
  print('The result is: ' + str(foo(a,b)) )

这种有状态的方式是另一种选择吗(只有一个函数调用,但需要将可能很大的结果分配给一个变量)?:

res = foo(a, b)
if res is not None: 
  print('The result is: ' + str(res) )
else:
  print('b cannot be null')

最佳答案

在您的示例中,foo 返回 None 表示:“参数中的某些内容有误,我无法返回有效值”。 在那种情况下,使用异常会更清楚:

def foo(a, b):
    if b == 0:
        raise ValueError("b can't be zero")
    else:
        return a/b

所以,如果 b 为 null,foo 将不会返回任何东西——而且您不必测试返回值来检查它是否有效,或者它是否意味着“发生了错误”。如果 foo 返回某些内容,您可以确定它是有效结果。

现在,要使用 foo,您将使用 try ... except block :

a = 2
b = 0

try:
    print('The result is: ' + str(foo(a,b)) )
except ValueError as msg:
    print(msg)

# b can't be zero

如果您不将对 foo 的调用放在这样的 block 中,您的程序将停止并显示一条漂亮的、信息丰富的错误消息:

foo(a, b)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-89e9686ab4be> in <module>()
     14     print(msg)
     15 
---> 16 foo(a, b)

<ipython-input-36-89e9686ab4be> in foo(a, b)
      1 def foo(a, b):
      2     if b == 0:
----> 3         raise ValueError("b can't be zero")
      4     else:
      5         return a/b

ValueError: b can't be zero

这也很好,因为当出现问题时,您的程序应该立即失败。

关于python使用函数的结果来决定是否应该使用函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450436/

相关文章:

python - 在 lxml 中,如何删除标签但保留所有内容?

function - 如何使用ElasticSearch进一步 boost field_value_factor给出的分数?

mysql - 将 2 个复杂的 mysql 查询合并为一个

python - 确定数据集 "wiggliness"- Python

python - 零值的 Matplotlib 对数刻度

python - 在sympy中获取项系数

javascript - 在特定时间为视频添加链接

c - C中这个奇怪的函数定义语法是什么?

PHP - 连接 if 语句?

java - java中如何实现模式匹配,避免instanceof?