我正在修改一個Python 2腳本,以便它可以工作,Python 3和Python 2向後兼容。下面是代碼片段的簡化示例遇到問題:Python 2和Python 3打印之間的小差異
file = open('test.txt', 'w')
for item in ['a', 'b', 'c']:
print >> file, item,
print >> file
file.close()
據我所知,尾隨逗號會導致空格而不是換行。但是,如果您運行該示例,則會發現情況並非總是如此。在for循環的最後一次迭代中,字母后面沒有空格。這裏是我目前的解決方案,在Python 2和3中獲得相同的結果:
from __future__ import print_function
file = open('test.txt', 'w')
items = ['a', 'b', 'c']
last_index = len(items) - 1
for i, item in enumerate(items):
end = ' ' if i < last_index else ''
print(item, end=end, file=file)
print(file=file)
file.close()
但這是非常醜陋的。我的問題是:是否有更乾淨的方式來做到這一點?注意:我知道這個特殊的例子通過連接可以更容易地解決,但是當我告訴你這種方法不適用於我的情況時,請相信我,因爲在for循環中會發生額外的處理。在回答時,請假定代碼的基本結構必須保持不變。
在循環內部你正在做什麼類型的*額外處理?你可以把這個額外的處理移動到一個函數或生成器,並使用'str.join'寫入返回的迭代。 –
我想將一個發生器與一個連接相結合是一個可行的解決方案。謝謝,我沒有想到這一點。請回答我的問題,我會接受它。 –
我已經取消了我的答案。 –