簡體   English   中英

如何在 Python 中嵌套單行語句?

[英]How can I nest single line statements in Python?

一個簡單的問題。 首先,我注意到在 Python 中,我可以通過改變這樣的簡短語句來使事情更簡潔:

if some_condition:
    do_something()

對此:

if some_condition: do_something()

當然,這種更改僅在 if 語句中的代碼僅包含一行時才有效。

但是,如果有多個嵌套的“構造”(我指的是 if-else、for、while 或 try-except 語句),則會出現語法錯誤。 例如,我不能改變這一點:

if some_condition:
    if other_condition:
        do_something()

對此:

if some_condition: if other_condition: do_something()

甚至這個:

if some_condition: if other_condition:
    do_something()

但這確實有效:

if some_condition:
    if other_condition: do_something()

我的猜測是,這樣做的原因是在一行上有兩個結構會產生某種歧義。 我想知道是否有某種方法我仍然可以將兩個語句放在一條線上但讓它起作用。 例如,可能類似於以下內容:

if some_condition: (if other_condition: do_something())

那當然行不通。 然而,希望它能讓我更清楚我在這里想要做什么。 除了“你不應該這樣做”之外,任何想法都會受到贊賞。

在我趕上你們所有的純粹主義者進來並鼓吹這不是 Pythonic 或其他什么之前,是的,我知道這不是用 Python 編寫代碼的最佳方式。 把它當作一個研究問題。 我只是想知道我在尋找什么是可能的。

在一行中放置多個冒號是不可能的。

無論如何, PEP8建議始終在冒號后換行。 在大多數情況下,最好遵循此准則。

正如@Suven Pandey 所指出的,可以使用嵌套的三元運算符將if語句嵌套在一行中,但請不要在一行中使用多個。 在這一點上,代碼極其丑陋且不可讀。

在某些情況下,您可以執行以下操作:

a = 7
b = 4
print(a) if a == 7 else 3 if b ==4 else 0 #print a 
print(a) if a == 27 else 3 if b ==4 else 0 #print 3
print(a) if a == 27 else 3 if b ==44 else 0 #print 0

這就像 print(a) if a == 7 else (3 if b ==4) #if a != 7 but b = 4 else 0 #both false 但它令人困惑,通常是一個壞主意,違反了 python 的禪宗.

只要在要執行的字符串中提供正確的換行符和制表符組合,就可以使用 exec 函數將嵌套結構組合在一行中。

exec ('a=7\nif a>3:\n\tfor x in range(a):\n\t\tif x != 5:\n\t\t\tprint("Wow!")')

問題是如何繞過它,但我想知道為什么同一行上的多個冒號被禁止。 OP 猜測有歧義,文檔提到了一個:

if x: if y: foo() else: bar()

可能意味着

if x: 
    if y: 
        foo()
else: 
    bar()

要么

if x: 
    if y: 
        foo()
    else: 
        bar()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM