[英]python 3 print generator
當我處理print()函數(Python 3)時出現問題。
當我尋找序列的總和時,我可以使用以下代碼模式:
>>> sum(i for i in range(101))
但是當我傾向於檢查自己制作的系列時:(我選擇print()並假設它將逐行打印出來)
>>> print(i for i in range(101))
事實證明,它成為沒有返回值的生成器對象。 所以我必須使用list()進行序列檢查。 那是打印功能的缺陷嗎?
PS:以上內容是構成生成器的示例,不是自然序列的最簡單形式,而是復雜序列的骨骼結構。 為了方便進行系列值檢查,我正在尋找一種逐行打印每個值的方法。
sum
需要sum
的事情累加起來,而print
需要單獨的參數來打印。 如果要送入所有生成器的項目以單獨print
,請使用*
表示法:
print(*(i for i in range(1, 101)))
但是,無論哪種情況,您實際上都不需要生成器:
sum(range(1, 101))
print(*range(1, 101))
如果希望將它們放在單獨的行上,那么您會期望多次單獨調用print
的行為,這意味着您會期望規則循環的行為:
for item in generator_or_range_or_whatever:
print(item)
盡管您也可以選擇將'\\n'
指定為項目分隔符:
print(*generator_or_range_or_whatever, sep='\n')
這種行為與python2.x並無太大不同:
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> print (i*i for i in range(30))
<generator object <genexpr> at 0x10c034a50>
一般來說,如果您想真正了解商品,則列表可能最簡單(只需添加幾個方括號即可:
print [i*i for i in range(30)]
或在python3.x上:
print([i*i for i in range(30)])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.