Python死磕——Python賦值語句、表達式以及打印

Python賦值語句

  • Python中的賦值語句的基本形式是在等號左邊寫賦值語句的目標汽馋。要賦值的對象位于右側(cè)。左側(cè)的目標可以是變量名或者元素圈盔。右側(cè)的對象可以是任何會計算得到的對象表達式豹芯。
  • 賦值語句建立對象的引用,而不是賦值對象驱敲。
  • Python會在首次將對象引用值賦給變量時創(chuàng)建其變量名铁蹈。一旦賦值后,每當(dāng)這個變量名出現(xiàn)在表達式時众眨,就會被其所引用的值取代
  • 變量名在引用前必須先賦值握牧,禁止未進行賦值就的變量
  • 隱式賦值應(yīng)用于模塊導(dǎo)入容诬、函數(shù)、類定義沿腰、for循環(huán)變量以及函數(shù)參數(shù)

賦值語句的形式

  • 基本形式
spam = 'spam'
  • 元組及列表分解賦值
spam,ham = 'yum','YUM'
[spam,ham] = ['yum','YUM']
  • Python會按照位置把右邊的對象和左邊的目標從左至右相配對览徒,在執(zhí)行時會先在右邊制作元素的元素。
  • 序列賦值
    在新的Python版本中颂龙,元組及列表賦值語句已經(jīng)統(tǒng)一為現(xiàn)在的序列賦值語句——任何變量名的序列都可以賦值給任何值的序列习蓬。Python會按位置一次賦值一個元素
a,b,c,d='spam'

a賦值為's' b賦值為'p'

  • 擴展的序列解包
    python3中,一種新形式的序列賦值允許我們更靈活的選擇要賦值的一個序列的一個部分
a,*b='spam'

在這個賦值語句中措嵌,a匹配第一個字母躲叼,剩下的用于匹配b:a賦值為's',b賦值為'pam'

  • 多目標賦值
spam=ham='lunch'

在這個語句中spam ham都會賦值成對相同的字符串對象'lunch'的引用

  • 增強賦值語句
spam+=42

序列賦值

>>> nudge=1
>>> wink=2
>>> nudge,wink=wink,nudge
>>> nudge.wink
>>> nudge,wink
(2, 1)

賦值右側(cè)可以是任何類型的序列,只要長度相等即可

高級序列賦值語句模式

在Python3.0中可以允許我們使用更為通用的擴展解包語法,在python2.x中要求賦值目標中的項數(shù)和主體的數(shù)目必須一致:否則就會報錯

>>> string='SPAM'
>>> a,b,c,d = string
>>> a,d
('S', 'M')
>>> a,b,c
('S', 'P', 'A')
>>> a,b,c = string
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

如果想使用通用方法就需要使用分片铅匹。

>>> string = 'SPAM'
>>> a,b,c=string[0],string[1],string[2:]
>>> a,b,c
('S', 'P', 'AM')
>>> a,b,c = list(string[:2])+[string[2:]]
>>> a,b,c
('S', 'P', 'AM')
>>> (a,b),c = string[:2],string[2:]
>>> a,b,c
('S', 'P', 'AM')
>>> 
在最后一個賦值中押赊,Python先把右邊的第一個字符串('SP')和左邊的第一個元組((a,b))配對,然后一次賦值一個字符包斑,接著再把第二個字符串('AM')一次賦值給變量c流礁。在這個過程中,左邊對象的序列嵌套的形狀必須符合右邊對象的形狀罗丰。

Python3.0中的擴展序列解包

在Python3.0中一個帶有單個星號的名稱神帅,可以在賦值目標中使用,以指定對于序列的一個更為通用的匹配

>>> seq = [1,2,3,4,5]
>>> a,*b = seq
>>> a
1
>>> b
[2, 3, 4, 5]
  • 當(dāng)使用一個帶星號的名稱的時候萌抵,左邊的目標中的項數(shù)不需要與主體序列的長度匹配找御。帶星號的名稱可以出現(xiàn)在目標中的任何地方
>>> *a,b = seq
>>> a,b
([1, 2, 3, 4], 5)

b匹配序列中的最后一項,a匹配最后一項之前的所有內(nèi)容

  • 當(dāng)帶星號的名稱出現(xiàn)在中間绍填,它收集其他列出的名稱之間的所有內(nèi)容
>>> a,*b,c = seq
>>> a
1
>>> b
[2, 3, 4]
>>> c
5
  • 擴展的序列解包語法對于任何序列類型都有效霎桅。不只是對列表有效

邊界情況

帶星號的名稱可能只匹配單個的項

>>> seq
[1, 2, 3, 4, 5]
>>> a,b,c,*d=seq
>>> print(a,b,c,d)
1 2 3 [4, 5]
  • 如果沒有剩下的內(nèi)容可以匹配帶星號的名稱,它會賦值一個空的列表讨永。不管該名稱出現(xiàn)在哪里
>>> a,b,c,d,e,*f=seq
>>> print(a,b,c,d,e,f)
1 2 3 4 5 []
  • 如果有多個帶星號的名稱滔驶,或者如果值少了而沒有帶星號的名稱,以及如果帶星號的名稱自身沒有編寫到一個列表中卿闹,將會引發(fā)錯誤

應(yīng)用于for循環(huán)

>>> for (a,*b,c) in [(1,2,3,4),(5,6,7,8)]:
...     print(a,b,c)
1 [2, 3] 4
5 [6, 7] 8

增強賦值語句

X+=Y X&=Y X-=Y X|=Y
X =Y X^=Y X/=Y X>>=Y
X%=Y X<<=Y X
*=Y X//=Y
增強賦值語句的有點

  1. 輸入減少揭糕,減少代碼量
  2. 左側(cè)只需要計算一次,在X+=Y中锻霎,X可以是復(fù)雜的對象表達式著角。在增強形式中,則只需計算一次旋恼,然而吏口,在完整形式X=X+Y中,X出現(xiàn)兩次,必須執(zhí)行兩次
  3. 優(yōu)化技術(shù)自動選擇锨侯,對于支持原處修改的對象而言嫩海,增強形式會自動執(zhí)行原處的修改運算。而不是使用相對來說速度更慢的復(fù)制

增強賦值以及共享引用

對于增強賦值語句囚痴,對列表是做原處修改的意思叁怪。而'+'總是生成新對象。

>>> M = [1,2]
>>> L = M
>>> L = L +[3,4]
>>> L,M
([1, 2, 3, 4], [1, 2])

上述的例子中深滚,由于'+'會生成一個新的列表對象奕谭,所以M的值并沒有發(fā)生改變

>>> M = [1,2]
>>> L = M
>>> L+=[3,4]
>>> L,M
([1, 2, 3, 4], [1, 2, 3, 4])

猶豫增強賦值對于可變的數(shù)據(jù)類型時在原處修改值,所以使M的值發(fā)生了變化

Python表達式語句

表達式語句和在原處的修改

對列表調(diào)用append痴荐、sort血柳、reverse這類在原處修改的運算,一定是對列表做原處的修改生兆,但這些方法在列表修改后并不會把列表返回难捌,而是返回的None對象

>>> L = [1,2]
>>> L.append(3)
>>> L
[1, 2, 3]
>>> L.extend([4,5,6])
>>> L
[1, 2, 3, 4, 5, 6]
>>> L = L.append(7)
>>> L
>>> print(L)
None

打印操作

print默認的把對象打印到stdout流,添加了一些格式化鸦难。

Python2.X Python3打印的差異

  • 在Python3中根吁,打印是一個內(nèi)置函數(shù),用關(guān)鍵字參數(shù)來表示特定模式
  • 在Python2.X中合蔽,打印是語句击敌。擁有自己的特定語法

Python3 print函數(shù)

調(diào)用格式

print([object,...],[sep=' '][,end='\n'][,file=sys,stdout])

格式中sep、end拴事、和file部分如果給出的話沃斤,必須作為關(guān)鍵字參數(shù)給定。必須使用一種特殊的"name = value"語法來根據(jù)名稱而不是根據(jù)位置來傳遞參數(shù)刃宵。

  • sep是每個對象的文本之間插入一個字符串衡瓶,如果沒有傳遞的話默認是一個單個的空格
  • end是添加在打印文本末尾的一個字符串,如果沒有傳遞的話牲证,默認是一個'\n'換行
  • file指定了文本將要發(fā)送到的文件鞍陨。如果沒有指定的話默認會發(fā)送到標準的輸入輸出sys.stdout

Pyton3的print函數(shù)的應(yīng)用

>>> x='spam'
>>> y=99
>>> z=['eggs']
>>> print(x,y,z)
spam 99 ['eggs']
>>> print(x,y,z,sep='')
spam99['eggs']
>>> print(x,y,z,sep='%')
spam%99%['eggs']
>>> print(x,y,z,sep=' ',end='')
spam 99 ['eggs']>>> 
>>> print(x,y,z,sep=' ',end='\n')
spam 99 ['eggs']

打印流重定向

在Python3.0和Python2.6中,打印都默認地發(fā)送到標準輸出流从隆。也可以發(fā)送到一個文本文件’
print只是Python的人性化的特性,它提供了sys.stdout對象的簡單接口

>>> import sys
>>> sys.stdout.write('hello world\n')
hello world
12

將輸出流重定向到文件后print語句直接打印內(nèi)容到文件

>>> import sys
>>> sys.stdout = open('/tmp/log.txt','a')
>>> x=[1,2,3,4]
>>> y='hello'
>>> z=136
>>> print(x,y,z)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缭裆,一起剝皮案震驚了整個濱河市键闺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澈驼,老刑警劉巖辛燥,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡挎塌,警方通過查閱死者的電腦和手機徘六,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榴都,“玉大人待锈,你說我怎么就攤上這事∽旄撸” “怎么了竿音?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拴驮。 經(jīng)常有香客問我春瞬,道長,這世上最難降的妖魔是什么套啤? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任宽气,我火速辦了婚禮,結(jié)果婚禮上潜沦,老公的妹妹穿的比我還像新娘萄涯。我一直安慰自己,他們只是感情好止潮,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布窃判。 她就那樣靜靜地躺著,像睡著了一般喇闸。 火紅的嫁衣襯著肌膚如雪袄琳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天燃乍,我揣著相機與錄音唆樊,去河邊找鬼。 笑死刻蟹,一個胖子當(dāng)著我的面吹牛逗旁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舆瘪,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼片效,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了英古?” 一聲冷哼從身側(cè)響起淀衣,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤魂拦,失蹤者是張志新(化名)和其女友劉穎扔罪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浙踢,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年只嚣,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮稚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡册舞,死狀恐怖蕴掏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情环础,我是刑警寧澤囚似,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站线得,受9級特大地震影響饶唤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贯钩,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一募狂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧角雷,春花似錦祸穷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吗坚,卻和暖如春祈远,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背商源。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工车份, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牡彻。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓扫沼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庄吼。 傳聞我的和親對象是個殘疾皇子缎除,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容