Python 为什么我的布尔函数有时返回None?

Python 为什么我的布尔函数有时返回None?,python,function,if-statement,python-3.x,functional-programming,Python,Function,If Statement,Python 3.x,Functional Programming,使用Python 3.4。尝试调用函数prime/2,该函数从IF语句中返回布尔值(始终为True或False)。这个函数运行起来很昂贵,所以我只想在我知道需要它的时候调用它,因此在决策点内调用它。被调用函数不能可靠地返回True/False。有时返回值为None,此时测试失败。我使用Python的IDLE及其调试器。我调用素数(2,5,[])并逐步完成代码。当prime/2到达行elif n:#从 打印(l,end='\n')#m到n,包括 elif m

使用Python 3.4。尝试调用函数prime/2,该函数从IF语句中返回布尔值(始终为True或False)。这个函数运行起来很昂贵,所以我只想在我知道需要它的时候调用它,因此在决策点内调用它。被调用函数不能可靠地返回True/False。有时返回值为None,此时测试失败。我使用Python的IDLE及其调试器。我调用素数(2,5,[])并逐步完成代码。当prime/2到达行elif n:#从 打印(l,end='\n')#m到n,包括 elif m<2: 素数(2,n,l) elif m==2: l、 附加(2) 素数(3,n,l) elif m%2==0: 素数(m+1,n,l) elif素数(m,2):#调用第二个函数 l、 附加(m)#测试m的素性 素数(m+2,n,l) 其他: 素数(m+2,n,l) def prime(n,p):#被调用函数将返回 如果n<2:#如果m是素数,则为真,否则为假 返回错误 elif n<4: 返回真值 elif n 2)和(n%p==0): 返回错误 elif p==2: 素数(n,3) 其他: 素数(n,p+2)
错误在于如何递归调用prime()。您需要显式返回该值。像这样:

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:
        return prime(n, 3)   # <--- RETURN VALUE
    return prime(n, p + 2)   # <--- & RETURN VALUE
def prime(n,p):#被调用函数将返回
如果n<2:#如果m是素数,则为真,否则为假
返回错误
elif n<4:
返回真值
elif n 2)和(n%p==0):
返回错误
elif p==2:

return prime(n,3)#请显示您的代码,以便我们知道您在说什么“参考手册语法不允许我在IF中尝试执行的操作”。你是说如果myFunctionCall():
对你不起作用?这是非常有效的语法。Python对布尔表达式短路。虽然没有你的代码很难准确地说出来,但是像
if need\u time\u-consuming\u-func和time\u-consuming\u-func()这样的东西:
不会调用time\u-consuming\u-func(),如果
need\u-time\u-consuming\u-func
是假的。Python3.x参考手册。我对所读内容的理解是,IF条件可以是(1)一个等价测试,如==,\=,我将提供一些代码。我得弄清楚是怎么做到的。是的,我已经证实了这一点。非常感谢,没问题。如果您认为这解决了问题,stackoverflow过程将把它标记为答案。
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:
        return prime(n, 3)   # <--- RETURN VALUE
    return prime(n, p + 2)   # <--- & RETURN VALUE