Python如果条件太短

时间:2015-02-26 05:20:52

标签: python if-statement

如果可能,我希望这个条件很短,我不希望每次都or

if not wall.twitter_access_token or not wall.twitter_access_token_secret or not wall.auth_user:
    raise Exception("Cannot open without verify with twitter account")

2 个答案:

答案 0 :(得分:4)

if not wall.twitter_access_token or not wall.twitter_access_token_secret or not wall.auth_user:

可以等效地编写为使用De Morgan's Law

if not(wall.twitter_access_token and wall.twitter_access_token_secret and wall.auth_user)

甚至更好地使用内置的all

if not all([wall.twitter_access_token, 
            wall.twitter_access_token_secret, 
            wall.auth_user]):

此外,考虑到when not all are true这一事实,最后一个表达式更具可读性。

然而,如果你多次重复这个表达式,采用DRY原则并将其重构为函数。

答案 1 :(得分:2)

执行此操作的最佳方法是使用.all()功能。你的代码就像:

if not all([
    wall.twitter_access_token, 
    wall.twitter_access_token_secret, 
    wall.auth_user,
    ]):

注意:最好将每个列表元素放入新行。它更具可读性,您可以只注释该行以跳过一个条件(在调试时很有用)。