跟老齊學(xué)Python之print詳解
eval()
在print干事情之前,先看看這個(gè)東東。不是沒有用,因?yàn)檎f不定某些時(shí)候要用到。
>>> help(eval) #這個(gè)是一招鮮,凡是不理解怎么用,就用這個(gè)看文檔
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.
能看懂更好了,看不懂也沒有關(guān)系??次覍懙陌?。哈哈。概括一下,eval()是把字符串中符合python表達(dá)式的東西計(jì)算出來。意思就是:
>>> 3+4 #這是一個(gè)表達(dá)式,python會(huì)根據(jù)計(jì)算法則計(jì)算出結(jié)果來
7
>>> "3+4" #這是一個(gè)字符串,python就不計(jì)算里面的內(nèi)容了,雖然里面是一個(gè)符合python規(guī)范的表達(dá)式
'3+4'
>>> eval("3+4") #這里就跟上面不一樣了,就把字符串里面的表達(dá)式計(jì)算出來了
7
下面再看一個(gè)字符串“相加”的例子:
>>> "qiwsir"+".github.io"
'qiwsir.github.io'
>>> "'qiwsir'+'.github.io'" #字符串里面,python是不會(huì)進(jìn)行“計(jì)算”的
"'qiwsir'+'.github.io'"
>>> eval("'qiwsir'+'.github.io'") #eval()做的事情完全不一樣,它會(huì)把字符串里面的計(jì)算出來
'qiwsir.github.io'
順便再說一下另外一個(gè)跟eval()有點(diǎn)類似的函數(shù):exec(),這個(gè)函數(shù)專門來執(zhí)行字符串或文件里面的python語句。
>>> exec "print 'hello, qiwsir'"
hello, qiwsir
>>> "print 'hello, qiwsir'"
"print 'hello, qiwsir'"
print詳解
print命令在編程實(shí)踐中用的比較多,特別是要向看看程序運(yùn)行到某個(gè)時(shí)候產(chǎn)生了什么結(jié)果了,必須用print來輸出,或者說,本講更寬泛地說,就要說明白把程序中得到的結(jié)果輸出問題。
比較簡(jiǎn)單的輸出,前面已經(jīng)涉及到過了:
>>> 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只能輸出整數(shù),int類型
3
>>> print "%f"%a #%f輸出浮點(diǎn)數(shù)
3.141593
>>> print "%.2f"%a #按照要求輸出小數(shù)位數(shù)
3.14
>>> print "%.9f"%a #如果要求的小數(shù)位數(shù)過多,后面就用0補(bǔ)全
3.141592600
>>> b = 3
>>> print "%4d"%b #如果是整數(shù),這樣寫要求該整數(shù)占有四個(gè)位置,于是在前面增加三個(gè)空格
3 #而不是寫成0003的樣式
換一種范式,寫成這樣,就跟上面有點(diǎn)區(qū)別了。
>>> import math #引入數(shù)學(xué)模塊
>>> print "PI=%f"%math.pi #默認(rèn),將圓周率打印成這個(gè)樣子
PI=3.141593
>>> print "PI=%10.3f"%math.pi #約束一下,這個(gè)的含義是整數(shù)部分加上小數(shù)點(diǎn)和小數(shù)部分共計(jì)10位,并且右對(duì)齊
PI= 3.142
>>> print "PI=%-10.3f"%math.pi #要求顯示的左對(duì)齊,其余跟上面一樣
PI=3.142
>>> print "PI=%06d"%int(math.pi) #整數(shù)部分的顯示,要求共6位,這樣前面用0補(bǔ)足了。
PI=000003
其實(shí),跟對(duì)上面數(shù)字操作類似,對(duì)字符串也可以做一些約束輸出操作??聪旅鎸?shí)驗(yàn),最好看官也試試。
>>> website
'qiwsir.github.io'
>>> print "%.3s"%website
qiw
>>> print "%.*s"%(3,website)
qiw
>>> print "%7.3s"%website
qiw
>>> print "%-7.3s"%website
qiw
總體上,跟對(duì)數(shù)字的輸出操作類似。不過,在實(shí)際的操作中,這些用的真的不是很多,至少在我這么多年的代碼生涯中,用到上面復(fù)雜操作的,就是現(xiàn)在給列位展示的時(shí)候,充其量用一用對(duì)float類型的數(shù)據(jù)輸出小數(shù)位數(shù)的操作,其它的輸出操作,以默認(rèn)的那種方式居多。請(qǐng)看官在這里鄙夷我的無知吧。
行文到此,提醒列位,如果用python3的,請(qǐng)用print(),要加個(gè)括號(hào)。
print有一個(gè)特點(diǎn),就是輸出的時(shí)候,每行后面都自動(dòng)加上一個(gè)換行符號(hào)\n,這個(gè)在前面已經(jīng)有所提及。
>>> website
'qiwsir.github.io'
>>> for word in website.split("."):
... print word
...
qiwsir
github
io
>>> for word in website.split("."):
... print word, #注意,加了一個(gè)逗號(hào),輸出形式就變化了吧。
...
qiwsir github io
%r是萬能的嗎?
我曾經(jīng)說過,懶人改變世界,特別是在敲代碼的領(lǐng)域。于是就有人問了,前面一會(huì)兒是%s,一會(huì)兒是%d,麻煩,有沒有一個(gè)萬能的?于是網(wǎng)上就有人給出答案了,%r就是萬能的??磳?shí)驗(yàn):
>>> import math
>>> print "PI=%r"%math.pi
PI=3.141592653589793
>>> print "Pi=%r"%int(math.pi)
Pi=3
真的是萬能呀!別著急,看看這個(gè),你是不是就糊涂了?
>>> print "Pi=%s"%int(math.pi)
Pi=3
當(dāng)然,這樣就肯定出錯(cuò)了:
>>> print "p=%d"%"pi"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
如果看到這里,看官有點(diǎn)糊涂是很正常的,特別是那個(gè)號(hào)稱萬能的%r和%s,怎么都能夠?qū)υ緦儆?d的進(jìn)行正常輸出呢?
其實(shí),不管是%r還是%s(%d)都是把做為整數(shù)的對(duì)象轉(zhuǎn)化為字符串輸出了,而不是輸出整數(shù)。但是%r和%s是有點(diǎn)區(qū)別的,本講對(duì)這個(gè)暫不做深入研究,只是說明這樣的對(duì)應(yīng):%s-->str();%r-->repr(),什么意思呢?就是說%s調(diào)用的是str()函數(shù)把對(duì)象轉(zhuǎn)化為str類型,而%r是調(diào)用了repr()將對(duì)象轉(zhuǎn)化為字符串。關(guān)于兩者的區(qū)別請(qǐng)參考:Difference between str and repr in Python,下面是一個(gè)簡(jiǎn)單的例子,演示一下兩者區(qū)別:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2014, 8, 15)
>>> str(today)
'2014-08-15'
>>> repr(today)
'datetime.date(2014, 8, 15)'
最后要表達(dá)我的一個(gè)觀點(diǎn),沒有什么萬能的,一切都是根據(jù)實(shí)際需要而定。
關(guān)于更多的輸出格式占位符的說明,這個(gè)頁面中有一個(gè)表格,可惜沒有找到中文的,如果看官找到中文的,請(qǐng)共享一下呀:string formatting
再擴(kuò)展
>>> myinfo
{'website': 'qiwsir.github.io', 'name': 'qiwsir', 'room': 703}
>>> print "qiwsir is in %(room)d"%myinfo
qiwsir is in 703
看官是否看明白上面的輸出了?有點(diǎn)意思。這樣的輸出算是對(duì)前面輸出的擴(kuò)展了。
出了這個(gè)擴(kuò)展之外,在輸出的時(shí)候,還可以用一個(gè)名曰:format的東西,這里面看不到%,但是多了{(lán)}??磳?shí)驗(yàn)先:
>>> print "My name is {0} and I am in {1}".format("qiwsir",703) #將format后面的內(nèi)容以此填充
My name is qiwsir and I am in 703
>>> "My website is {website}".format(website="qiwsir.github.io") #{}里面那個(gè)相當(dāng)于一個(gè)變量了吧
'My website is qiwsir.github.io'
看到這里,是不是感覺這個(gè)format有點(diǎn)意思?一點(diǎn)不輸給前面的輸出方式。據(jù)說,format會(huì)逐漸逐漸取代前面的。關(guān)于format,我計(jì)劃后面一講繼續(xù)。這里只是來一個(gè)引子,后面把用format輸出搞得多點(diǎn)。
相關(guān)文章
python實(shí)現(xiàn)跨excel的工作表sheet之間的復(fù)制方法
今天小編就為大家分享一篇python實(shí)現(xiàn)跨excel的工作表sheet之間的復(fù)制方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Django自定義User模型、認(rèn)證、權(quán)限控制的操作
這篇文章主要介紹了Django自定義User模型、認(rèn)證、權(quán)限控制的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別
這篇文章主要介紹了淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Django使用裝飾器限制對(duì)視圖的訪問及實(shí)現(xiàn)原理
除了可以在視圖處理中校驗(yàn)用戶身份以及驗(yàn)證用戶權(quán)限之外,Django還提供了便捷的裝飾器來完成這兩類校驗(yàn),下面介紹這兩個(gè)裝飾器的使用方法與實(shí)現(xiàn)原理,對(duì)Django裝飾器限制視圖訪問相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10python利用標(biāo)準(zhǔn)庫如何獲取本地IP示例詳解
這篇文章主要給大家介紹了關(guān)于python利用標(biāo)準(zhǔn)庫如何獲取本地IP的相關(guān)資料,文中先對(duì)python的標(biāo)準(zhǔn)庫進(jìn)行了簡(jiǎn)單的介紹,而后給大家詳細(xì)介紹了關(guān)于python用標(biāo)準(zhǔn)庫獲取本地IP的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11教你利用Python玩轉(zhuǎn)histogram直方圖的五種方法
這篇文章主要給大家介紹了關(guān)于如何利用Python玩轉(zhuǎn)histogram直方圖的五種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07