Python之print詳解

來源:互聯網
上載者:User

標籤:

Python之print詳解http://www.jb51.net/article/55768.htm print的一些基本用法,在前面的講述中也涉及一些,本講是在複習的基礎上,盡量再多點內容。 

eval()

在print幹事情之前,先看看這個東東。不是沒有用,因為說不定某些時候要用到。

複製代碼 代碼如下:
>>> help(eval)      #這個是一招鮮,凡是不理解怎麼用,就用這個看文檔

Help on built-in function eval in module __builtin__:

eval(...)
    eval(source[, globals[, locals]]) -> value

    Evaluate the source in the context of globals and locals.
    The source may be a string representing a Python expression
    or a code object as returned by compile().
    The globals must be a dictionary and locals can be any mapping,
    defaulting to the current globals and locals.
    If only globals is given, locals defaults to it.

能看懂更好了,看不懂也沒有關係。看我寫的吧。哈哈。概括一下,eval()是把字串中符合python運算式的東西計算出來。意思就是:

複製代碼 代碼如下:
>>> 3+4         #這是一個運算式,python會根據計演算法則計算出結果來
7
>>> "3+4"       #這是一個字串,python就不計算裡面的內容了,雖然裡面是一個符合python規範的運算式
‘3+4‘
>>> eval("3+4") #這裡就跟上面不一樣了,就把字串裡面的運算式計算出來了
7

下面再看一個字串“相加”的例子:

複製代碼 代碼如下:
>>> "qiwsir"+".github.io"
‘qiwsir.github.io‘
>>> "‘qiwsir‘+‘.github.io‘"    #字串裡面,python是不會進行“計算”的
"‘qiwsir‘+‘.github.io‘"
>>> eval("‘qiwsir‘+‘.github.io‘") #eval()做的事情完全不一樣,它會把字串裡面的計算出來
‘qiwsir.github.io‘

順便再說一下另外一個跟eval()有點類似的函數:exec(),這個函數專門來執行字串或檔案裡面的python語句。

複製代碼 代碼如下:
>>> exec "print ‘hello, qiwsir‘"
hello, qiwsir
>>> "print ‘hello, qiwsir‘"
"print ‘hello, qiwsir‘"

print詳解

print命令在編程實踐中用的比較多,特別是要向看看程式運行到某個時候產生了什麼結果了,必須用print來輸出,或者說,本講更寬泛地說,就要說明白把程式中得到的結果輸出問題。

比較簡單的輸出,前面已經涉及到過了:

複製代碼 代碼如下:
>>> name = ‘qiwsir‘
>>> room = 703
>>> website = ‘qiwsir.github.io‘
>>> print "MY name is:%s\nMy room is:%d\nMy website is:%s"%(name,room,website)
MY name is:qiwsir
My room is:703
My website is:qiwsir.github.io

其中,%s,%d就是預留位置。

複製代碼 代碼如下:
>>> a = 3.1415926
>>> print "%d"%a    #%d只能輸出整數,int類型
3
>>> print "%f"%a  #%f輸出浮點數
3.141593
>>> print "%.2f"%a #按照要求輸出小數位元
3.14
>>> print "%.9f"%a  #如果要求的小數位元過多,後面就用0補全
3.141592600
>>> b = 3         
>>> print "%4d"%b   #如果是整數,這樣寫要求該整數佔有四個位置,於是在前面增加三個空格
   3                #而不是寫成0003的樣式

換一種範式,寫成這樣,就跟上面有點區別了。

複製代碼 代碼如下:
>>> import math     #引入數學模組
>>> print "PI=%f"%math.pi #預設,將圓周率列印成這個樣子
PI=3.141593
>>> print "PI=%10.3f"%math.pi #約束一下,這個的含義是整數部分加上小數點和小數部分共計10位,並且靠右對齊
PI=     3.142
>>> print "PI=%-10.3f"%math.pi #要求顯示的靠左對齊,其餘跟上面一樣
PI=3.142
>>> print "PI=%06d"%int(math.pi) #整數部分的顯示,要求共6位,這樣前面用0補足了。
PI=000003

其實,跟對上面數字操作類似,對字串也可以做一些約束輸出操作。看下面實驗,最好看官也試試。

複製代碼 代碼如下:
>>> website
‘qiwsir.github.io‘
>>> print "%.3s"%website
qiw
>>> print "%.*s"%(3,website)
qiw
>>> print "%7.3s"%website
    qiw
>>> print "%-7.3s"%website
qiw   

總體上,跟對數位輸出操作類似。不過,在實際的操作中,這些用的真的不是很多,至少在我這麼多年的代碼生涯中,用到上面複雜操作的,就是現在給列位展示的時候,充其量用一用對float類型的資料輸出小數位元的操作,其它的輸出操作,以預設的那種方式居多。請看官在這裡鄙夷我的無知吧。

行文到此,提醒列位,如果用python3的,請用print(),要加個括弧。

print有一個特點,就是輸出的時候,每行後面都自動加上一個分行符號號\n,這個在前面已經有所提及。

複製代碼 代碼如下:
>>>  website
‘qiwsir.github.io‘
>>> for word in website.split("."):
...     print word
...
qiwsir
github
io
>>> for word in website.split("."):
...     print word,         #注意,加了一個逗號,輸出形式就變化了吧。
...
qiwsir github io

%r是萬能的嗎?

我曾經說過,懶人改變世界,特別是在敲代碼的領域。於是就有人問了,前面一會兒是%s,一會兒是%d,麻煩,有沒有一個萬能的?於是網上就有人給出答案了,%r就是萬能的。看實驗:

複製代碼 代碼如下:
>>> import math
>>> print "PI=%r"%math.pi
PI=3.141592653589793
>>> print "Pi=%r"%int(math.pi)
Pi=3

真的是萬能呀!別著急,看看這個,你是不是就糊塗了?

複製代碼 代碼如下:
>>> print "Pi=%s"%int(math.pi)
Pi=3

當然,這樣就肯定出錯了:

複製代碼 代碼如下:
>>> print "p=%d"%"pi"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

如果看到這裡,看官有點糊塗是很正常的,特別是那個號稱萬能的%r和%s,怎麼都能夠對原本屬於%d的進行正常輸出呢?

其實,不管是%r還是%s(%d)都是把做為整數的對象轉化為字串輸出了,而不是輸出整數。但是%r和%s是有點區別的,本講對這個暫不做深入研究,只是說明這樣的對應:%s-->str();%r-->repr(),什麼意思呢?就是說%s調用的是str()函數把對象轉化為str類型,而%r是調用了repr()將對象轉化為字串。關於兩者的區別請參考:Difference between str and repr in Python,下面是一個簡單的例子,示範一下兩者區別:

複製代碼 代碼如下:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2014, 8, 15)
>>> str(today)
‘2014-08-15‘
>>> repr(today)
‘datetime.date(2014, 8, 15)‘

最後要表達我的一個觀點,沒有什麼萬能的,一切都是根據實際需要而定。

關於更多的輸出格式預留位置的說明,這個頁面中有一個表格,可惜沒有找到中文的,如果看官找到中文的,請共用一下呀:string formatting

再擴充

複製代碼 代碼如下:
>>> myinfo
{‘website‘: ‘qiwsir.github.io‘, ‘name‘: ‘qiwsir‘, ‘room‘: 703}
>>> print "qiwsir is in %(room)d"%myinfo
qiwsir is in 703

看官是否看明白上面的輸出了?有點意思。這樣的輸出算是對前面輸出的擴充了。

出了這個擴充之外,在輸出的時候,還可以用一個名曰:format的東西,這裡面看不到%,但是多了{}。看實驗先:

複製代碼 代碼如下:
>>> print "My name is {0} and I am in {1}".format("qiwsir",703)     #將format後面的內容以此填充
My name is qiwsir and I am in 703
>>> "My website is {website}".format(website="qiwsir.github.io")    #{}裡面那個相當於一個變數了吧
‘My website is qiwsir.github.io‘

看到這裡,是不是感覺這個format有點意思?一點不輸給前面的輸出方式。據說,format會逐漸逐漸取代前面的。關於format,我計劃後面一講繼續。這裡只是來一個引子,後面把用format輸出搞得多點。

Python之print詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.