324*_*423 44 python if-statement
我有这个
bc = 'off'
if c.page == 'blog':
bc = 'on'
print bc
Run Code Online (Sandbox Code Playgroud)
在python中有更多的pythonic(和/或更短)的写法吗?
fre*_*net 98
最短的应该是:
bc = 'on' if c.page=='blog' else 'off'
Run Code Online (Sandbox Code Playgroud)
通常这可能看起来有点令人困惑,因此您应该只在明确其含义时使用它.不要将它用于大布尔条款,因为它开始看起来很难看.
Ark*_*ady 65
这是:
X if Z else Y
语法)有问题的可读性.考虑到这些警告,这里有:
bc = ("off","on")[c.page=="blog"]
Run Code Online (Sandbox Code Playgroud)编辑:根据要求,通用表格是:
result = (on_false, on_true)[condition]
Run Code Online (Sandbox Code Playgroud)
Explanation:condition
可以是任何求值为Boolean的值.然后将其视为整数,因为它用于索引元组:False == 0
,True == 1
然后从元组中选择正确的项.
Joh*_*ood 33
好吧,不要成为一个蟒蛇人,请带着一大堆盐,但多年来写了很多聪明的代码(并且,更难以阅读),我发现自己现在对可读代码有强烈的偏好.我得到了你的原始代码正在做的事情的要点,即使我是一个没有人作为Python人.可以肯定的是,你可以隐藏它并且可能会给Python一两个人留下深刻印象,但为什么呢?
Mar*_*off 13
或者您可以使用内联if语句:
>>> cpage = 'blog'
>>> bc = 'on' if cpage == 'blog' else 'off'
>>> bc
'on'
>>> cpage = 'asdf'
>>> bc = 'on' if cpage == 'blog' else 'off'
>>> bc
'off'
Run Code Online (Sandbox Code Playgroud)
在这个博客上有一些关于该功能的文章,相关的PEP是PEP308.内联if语句是在Python 2.5中引入的.
这个可能不那么pythonic,但你可以使用和/或以这种方式:
>>> cpage = 'asdf'
>>> bc = (cpage == 'blog') and 'on' or 'off'
>>> bc
'off'
>>> cpage = 'blog'
>>> bc = (cpage == 'blog') and 'on' or 'off'
>>> bc
'on'
Run Code Online (Sandbox Code Playgroud)
这个在lambda语句中比在一行本身更常用,但是形式
A and B or C
Run Code Online (Sandbox Code Playgroud)
类似于
if A:
return B
else:
return C
Run Code Online (Sandbox Code Playgroud)
我打算写出更长一点的解释,但他们在Dive into Python中更好地介绍了它.他们还注意到您可能需要了解的一些警告.
另一种可能性是使用dict,如果你可以计算访问它们的函数之外的值(即值是静态的,这也解决了scrible的答案评论中的评估问题).
want_bc = {True: "on", False: "off"}
# ...
bc = want_bc[c.page == "blog"]
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个和/或在优选计算到测试的一般标题下的元组索引解决方案.
归档时间: |
|
查看次数: |
46989 次 |
最近记录: |