輸入輸出,簡單來說就是從标準輸入中擷取資料和将資料列印到标準輸出,常被用于互動式的環境當中,python實作輸入的方法有下面兩種:
raw_input( ):擷取輸入後,傳回一個string類型。
下面實作一個簡單的輸入:
支援表達式、數字類型、字元串類型,接受為表達式時,隻傳回其執行結果。
使用help(input)檢視幫助手冊
eval( ):将字元串轉化為代碼執行,并傳回一個對象。
exec語句:于eval( )有類似的地方,将檔案或字元串中的python語句轉化為代碼執行,并傳回執行結果。
是以,input( ) 和raw_input( )的差別主要在于,input( )可以擷取任何形式的輸入并傳回相應的不同類型,而raw_input( )隻能傳回string類型對象。而且從equivalent to eval(raw_input(prompt))可以看出,input( )本質上還是由raw_input( )輸入之後,再調用eval( )來最終得到input( )的結果。
值得注意的是:在很多我們需要用到raw_input( ) 的同時又要求傳回一個非string類型的對象。這種時候,會對輸入的資料作類型轉換。
一個簡單的輸出例子:
支援以逗号隔開的一次多輸出
在python中的記憶體對象都必須先進行流式化操作才能夠被标準輸出或儲存到檔案中,而print輸出語句提供了調用sys.stdout.write()的接口,可以将多種形式的記憶體對象都轉化為流式化。
可以直接使用sys.stdout.write(“str”),并且sys.stdout.write()預設不會自動換行,也可以結合sys.stdout.flush()實作不換行即時輸出。
注意:stdout擁有自己的緩沖區,會将連續的輸出語句執行完後在一次性的列印輸出。這樣造成了無法實時輸出,使用sys.stdout.flush( )可以重新整理緩沖區,讓每一條輸出語句都實時輸出。
scree output:
而且sys.stdout.flush()與\r(回車轉義)結合可以實作一些有趣的輸出。
一個上傳檔案進度的小腳本:
print輸出語句最大的亮點在于有多種格式化的輸出來滿足不同的輸出需求,與c的print類似。
格式:
其中如運算符詳解篇所說,% 在輸出語句中會被重載為格式化符号。例如:在“ ”中的%format又稱之為占位符,有下面多種類型。
format:
%d:輸出int型十進制的整數
%i:輸入int十進制長整數
注:長整數是長度可以超過20位的整數類型,定義一個長整數:
%u:輸出無符号整數
%o:以8進制輸出
%x:以16進制輸出(a-e為小寫)
%x:以16進制輸出(a-e為大寫)
%f:輸出浮點數(預設精度為6)
%e:以科學計數法輸出浮點數
%s:将任意對象全格式化為字元串輸出(使用了隐式類型轉換str())
%c:輸出單個字元
注:%c一般用于将int型整數轉換為對應的ascii碼的單個字元
%p:以16進制輸出變量的記憶體位址
%r:将後面的參數原樣輸出
複雜占位符調用格式:
%[(name)][flags][width][.precision]format
%[(dictionaryname)][标志位][指定最小寬度][.精度]format
-:輸出向左對齊
+:輸出包含數字元号
0:0填充
輸入的int型寬度為20,而且width經常于flags一起作用于數學程式設計方面。
flags:[-]向左對齊
flags:[0]0填充
python的float型輸出預設為6位,使用precision可以指定輸出精度
注意:.precision不僅僅可以作用于float型,也可以作用于string型對象。
其中%.*s 需要在後面執行*的值
輸出%(key)映射的value
print原型:
1.python 2.x
(1). print “string”,
(2). sys.stdout.write(“string”)
python 2.x中print的預設輸出格式為print >> sys.stdout,而且python 2.x中python預設不能指定原型中的end=’ ‘,是以預設end=’\n‘換行符。但是python 2.x中也可以調用sys.stdout.write( )來實作不自動換行,在output上與print “string”, 的效果相當。下面例子說明:(注釋為官方文檔)
2.python 3.x
在python 3.x中print成為了一個真正意義上的函數,是以可以指定end的值。
在python 2.x中也可以通過import module來實作:
希望通過這一篇可以為大家打開一道窗,想要精通一門語言僅僅掌握其文法是遠遠不夠的,除了要理會語言的設計理念外,還需要對其原型實作有一定的了解。才可以真正深入的去掌握并運用他。
jmilk