【发布时间】:2015-02-18 16:14:34
【问题描述】:
使用 Python 3.4。已尝试从 IF 语句中调用返回布尔值的函数 prime/2(始终为 True 或 False)。该函数运行起来很昂贵,所以我只想在知道需要它时调用它,因此从决策点内调用。被调用的函数不能可靠地返回 True/False。有时返回为 None,此时测试失败。我使用 Python 的 IDLE 及其调试器。我调用 primes(2, 5, []) 并逐步执行代码。当 prime/2 在 n = 5 和 p = 5 时到达 elif n
def primes(m, n, l): # the calling function
if m > n: # creates a list of primes from
print(l, end='\n') # m through n, inclusive
elif m < 2:
primes(2, n, l)
elif m == 2:
l.append(2)
primes(3, n, l)
elif m % 2 == 0:
primes(m + 1, n, l)
elif prime(m, 2): # calling the second function
l.append(m) # to test m for primality
primes(m + 2, n, l)
else:
primes(m + 2, n, l)
def prime(n, p): # the called function will return
if n < 2: # True if m is prime, False otherwise
return False
elif n < 4:
return True
elif n <= p:
return True
elif (n > 2) and (n % p == 0):
return False
elif p == 2:
prime(n, 3)
else:
prime(n, p + 2)
【问题讨论】:
-
请出示您的代码,以便我们知道您在说什么
-
“参考手册语法不允许我在 IF 中尝试执行的操作”。你是说
if myFunctionCall():不适合你?这是完全有效的语法。 -
Python 短路了布尔表达式。虽然没有您的代码很难准确判断,但如果
need_time_consuming_func为 False,if need_time_consuming_func and time_consuming_func():之类的代码不会调用 time_sumption_func()。 -
Python3.x 参考手册。我对所读内容的理解是,IF 条件可以是 (1) 等价测试,例如 ==、\=、
-
我会提供一些代码。只需要弄清楚这是如何完成的。
标签: python function if-statement python-3.x functional-programming