簡體   English   中英

python 3打印生成器

[英]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.

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