我经常在这里看到某人的代码以及看起来像是“单行”的内容,这是一个单行语句,以传统的'if'语句或'for'循环的标准方式执行。< / p>
我已经google了,无法真正找到你能演出的那种?任何人都可以提出建议并最好提供一些例子吗?
例如,我可以在一行中执行此操作:
example = "example"
if "exam" in example:
print "yes!"
或者:
for a in someList:
list.append(splitColon.split(a))
答案 0 :(得分:53)
那么,
if "exam" in "example": print "yes!"
这是改善吗? 否即可。您甚至可以通过用分号分隔它们来向if
- 子句的主体添加更多语句。我建议反对。
答案 1 :(得分:39)
我发现在大多数情况下,在一行上执行块子句是个坏主意。
作为一般性,它将降低代码形式的质量。高质量的代码形式是python的一个关键语言功能。
在某些情况下,python会在一行中提供一些方式,这些方法肯定更加pythonic。尼克D提到的列表理解中提到的事情:
newlist = [splitColon.split(a) for a in someList]
虽然除非您需要专门的可重复使用列表,否则您可能需要考虑使用生成器
listgen = (splitColon.split(a) for a in someList)
请注意,两者之间的最大区别在于您不能重复使用生成器,但使用起来效率更高。
在现代版本的python中还有一个内置的三元运算符,可以让你做像
这样的事情string_to_print = "yes!" if "exam" in "example" else ""
print string_to_print
或
iterator = max_value if iterator > max_value else iterator
有些人可能会发现它们比类似的if (condition):
块更具可读性和可用性。
归根结底,它是关于代码风格的,以及你正在研究的团队的标准。这是最重要的,但总的来说,我建议不要使用一个行块,因为python中的代码形式非常重要。
答案 2 :(得分:18)
更一般地说,以下所有内容在语法上都是有效的:
if condition:
do_something()
if condition: do_something()
if condition:
do_something()
do_something_else()
if condition: do_something(); do_something_else()
...等
答案 3 :(得分:11)
语言功能的一个示例,不仅仅是删除换行符,尽管仍然不相信这比更详细的版本更清晰
a = 1,如果x> 15其他2
答案 4 :(得分:7)
for a in someList:
list.append(splitColon.split(a))
您可以将上述内容重写为:
newlist = [splitColon.split(a) for a in someList]
答案 5 :(得分:6)
Python允许你将indented子句放在同一行,如果它只有一行:
if "exam" in example: print "yes!"
def squared(x): return x * x
class MyException(Exception): pass
答案 6 :(得分:4)
较旧版本的Python只允许在for ...:
if ...:
或类似的块介绍性语句之后使用单个简单语句。
我看到一个人可以在同一行上有多个简单的语句。但是,有各种组合不起作用。例如,我们可以:
for i in range(3): print "Here's i:"; print i
...但另一方面,我们不能:
for i in range(3): if i % 2: print "That's odd!"
我们可以:
x=10
while x > 0: print x; x-=1
......但我们不能:
x=10; while x > 0: print x; x-=1
......等等。
在任何情况下,所有这些都被认为是非常非pythonic。如果你编写这样的代码,那么体验Pythonistas可能会对你的技能有一种模糊的看法。
在某些情况下,在一条线上组合多个语句是可以接受的。例如:
x=0; y=1
......甚至:
if some_condition(): break
...适用于简单break
continue
甚至return
陈述或分配。
特别是如果需要使用一系列elif
,可能会使用以下内容:
if keystroke == 'q': break
elif keystroke == 'c': action='continue'
elif keystroke == 'd': action='delete'
# ...
else: action='ask again'
...那么你可能不会对你的同事太过烦躁。 (但是,像elif
这样的链子会被重新调整到一个调度表......一个看起来更像的字典:
dispatch = {
'q': foo.break,
'c': foo.continue,
'd': foo.delete
}
# ...
while True:
key = SomeGetKey()
dispatch.get(key, foo.try_again)()
答案 7 :(得分:3)
您可以通过省略example
变量来完成所有这些操作:
if "exam" in "example": print "yes!"
答案 8 :(得分:0)
潜入python有一点他会谈到他所谓的and-or trick,这似乎是将复杂逻辑塞进单行的有效方法。
基本上,它通过给你一种测试真相并根据它返回一个值来模拟c中的三元运算符。例如:
>>> (1 and ["firstvalue"] or ["secondvalue"])[0]
"firstvalue"
>>> (0 and ["firstvalue"] or ["secondvalue"])[0]
"secondvalue"
答案 9 :(得分:0)
这是&#34; if else&#34;行动。
>>> def fun(num):
print 'This is %d' % num
>>> fun(10) if 10 > 0 else fun(2)
this is 10
OR
>>> fun(10) if 10 < 0 else 1
1