分類: Python/Ruby
如果print語句后面什么符號都沒有是個換行語句,也就是是要另起一行。
分號表示下次輸出是緊挨着這個光標位置輸出.
而逗號是下次輸出與這次輸出有一定的空格之后接着輸出.
print語句
print [expression ("," expression)* [","]]
print >> expression [("," expression)+ [","]]
[]表示可選項,*表示零次或多次重復,+表示至少一次重復。
print是一種特殊的語句,它用於在stdout輸出字符串。print有多種使用形式:
print x
print x,y
print x,y,
print >> object, x, y
第1行是print的最普通的形式。
第2行用print一次輸出多個變量值,print會在變量之間自動加上一個"空格"。
第3行與第2行的不同是在y的后面多了一個",",這個逗號用來阻止print在打印出x和y的值后,自動附加上一個“\n”字符。
第4行,是一種輸出重定向的形式,也就是說把x和y的值輸出到object的write方法中,這同時也表明object必須有一個write方法。
在python中,print語句其實只是一種簡寫形式,是下面這段程序的簡寫:
import sys
sys.stdout.write(str(x) + '\n')
上面這兩行合起來就是“print x”這一句。可以看出,print是調用str()函數來產生字符串的,並且會在輸出的字符串后加上一個'\n'字符。由於print實際是上調用了stdout的write方法。程序員也可以把stdout賦為別的值,從面實現print的輸出重定向的功能。比如:
import sys
x="I'm here!"
fp=file('log.txt','a')
sys.stdout=fp
print x
第4行改變了stdou的值,而且fp也是一個文件對象,有一個write方法。這一小段代碼的功能是把print的輸出全部以appand的模式寫到了文件log.txt中。在第4行之后的print語句,都是這種功能。現在假設要恢復print輸出到標准輸出的功能,那么就需要讓stdout重新指向標准輸出,可以使用如下的方式:
sys.stdout=sys.__stdout__
在sys.__stdout__中保存有指向標准輸出的信息,通過這行代碼,print可以恢復為原來的功能。有時候要在這兩種模式之間換來換去,一會要輸出到文件中,一會要輸出到標准輸出中,通過改變sys.stdout的值可以實現,不過太麻煩,python提供了另外一種簡便的print語句形式,來解決這種需求:
print >> object,x,y
能過>>這個符號,可以實現輸出重定向到object,當然object必須有一個write方法。否則會出現AttributeError。注意,在這種print形式中,sys.stdout並沒有改變,也就是說在這之后的print語句,具有的還是標准功能。
雖然print語句實際上sys.stdou.write(),但sys模塊的import工作並不需要程序員操心,python會自動處理。
類似於print的輸出,當用內置函數raw_input([prompt])進行讀取操作時,實際上用的是sys.stdin.read()方法。也可以通過改變stdin的值來控制入操作。相應的也有一個sys.__stdin__用來保存標准輸入的信息。