2014-01-30 20 views
5

在給定腳本的多個for循環中重複使用相同的迭代變量名稱被認爲是不好的做法嗎?在給定的腳本中多次重複使用迭代變量被認爲是不好的做法嗎?

例如,

for url in urls1: 
    print url 

for url in urls2: 
    print url 

for url in urls3: 
    print url 

我知道url變量的範圍並不侷限於for循環,所以在使用的的url變量外for循環就變得混亂,並有潛力可能會更難以理解。但我很好奇,有沒有「最好」的做法?我應該使用像「url1」,「url2」這樣的約定嗎?或者,我是否已經過時了,只是爲了使它更容易理解而做出的任何工作?

+1

有什麼不對這樣做 - 如果你想使用的最後一個項目'從環經過兩個循環一個地方url'你似乎無論如何要了解可能發生這種情況的唯一問題,但。 – danodonovan

+0

我認爲這是意見,但我親自做。我現在用Delphi編寫代碼,所以你必須在程序開始的時候顯式地聲明變量,所以如果你爲每個循環使用不同的變量就會變得雜亂無章。 – OGHaza

+0

這很好,只要你知道你在做什麼。 – wim

回答

3

一個好的變量名可以幫助你理解程序(並且不會與保留的或者知名的名字發生衝突)。 答案可能只是主觀的,但我會說,只要你使用的變量名在所有的循環中意味着相同的東西,沒關係。

變量的範圍並不侷限於for循環,但是在執行下一個for循環的第一次迭代時,該值將被覆蓋。在對面,這樣的代碼將是討厭的:

for url1 in urls1: 
    print url1 
for url2 in urls2: 
    print url1, url2 
2

我覺得這一切都取決於上下文。例如,在你的情況下,你可以寫成:

for url in urls1+urls2+urls3: 
    print url 

但你的例子是爲了演示的目的。如果它只是一個循環變量,你想用於迭代,我沒有看到任何問題重複使用多次相同的循環變量。另一方面,如果有意義的話,你也可以爲每個迭代選擇一個與上下文相關的名字。例如:

for base_url in urls: 
    .... 

for dev_url in urls: 
    ... 
+2

你的第一個例子與你首先建立一個更大的列表不完全一樣。你可以在itertools.chain(urls1,urls2,urls3)中使用'url來獲取url',但最終這並不好。 ;) – Cilyan

1

如果你有你的循環,你在你的迭代完成許多操作變量中代碼真的多行,它可能是一個好主意,給它一個獨特的,有意義的名稱,特別是如果不同循環遍歷不同類型的對象。

在其他情況下,就像在您提供的示例中那樣,不同循環中的迭代變量代表相同類型的對象,併爲其提供相同的名稱,從而提高了代碼的可讀性。

因此,總而言之,您必須找到一種讓您的代碼具有最高可讀性的方法。

1

變量應該適合代碼的可讀性。無論變量名稱如何,此代碼都可以正常運行。我想指出一個我經常碰到的邊緣案例,嚴格地使用python 2.7。

在Python 2.7中使用列表理解泄漏目標變量名稱。例如

x = 'before' 
a = [x for x in 1, 2, 3] 
print x # this prints '3', not 'before' 

我犯這樣的事情,所以我儘量保持變量的獨特性。 這個bug /功能在python3中修復/更改。

Reference

相關問題