6.賦值,輸出中的一些值得注意的細節-Python3基礎知識

6.賦值,輸出中的一些細節-Python3基礎知識

賦值

序列賦值:

a,b,c,d='spam'
序列賦值有點類似元組解包,兩邊可以看做兩個元組然後分開賦值。再給幾個例子:

a,b=[3,4]
print(a,b)
>>>3 4

這是比較一般的情況,兩邊都是迭代對象,像list,range(),str,tuple都是可以的,不過要保證結構相同

((a,b),c,d)=[[2,3],4,5]
print(a,b,c,d)
>>>2 3 4 5

使用單個*會將未匹配內容分給一個變量:
需要注意,*b匹配到的是一個列表,如果沒有未匹配內容,則是空列表[]

a,b='spam'
>>>ValueError: too many values to unpack (expected 2)
可以看到,左邊是兩個變量,右邊可迭代對象有四個元素,報錯
a,*b='spam'
a,b>>>s ['p', 'a', 'm']

L=[1,2]
a,b,*c=L[:]
print(a,b,c)>>>1 2 []

再次值得注意的是,賦值是將對象地址指向變量名的過程,所以增量賦值會共享引用
比如

多目標賦值:

a=b=c=xxx
如果是個數字等不可變對象,我們大可不必擔心,因爲每次修改其實會更改指向
如果是列表這樣的可變對象,問題就值得注意了:

a=b=c=[]
a.append(1)
print(a,b,c)
>>>[1] [1] [1]

此時如果改變一個列表其他不變,則考慮使用copy方法,或者a=b[:]來創建新對象
相同的道理,對列表的增量賦值可以實現拼接相同的效果,不過實現的是在原位置上修改,跟.extend()方法是相同的,而L+[1,2,3]這種拼接則是生成新對象;

輸出

一般的,Python3 直接使用 print()來輸出內容,這等價於

import sys
sys.stdout.write('str')

看過print源碼我們就會發現,其實就是調用流stdout實現的,並且將各種類型轉換爲字符串。
通過重新定向stdout可以定向輸出:

import sys
sys.stdout=open('text.txt','a')
print('添加一條消息')

這個例子執行print會打開text.txt文件並向後追加字符串。其實作用跟print的file參數相同
明白這一點後,我們就可以通過print實現對GUI輸出,或者寫入文件等諸多功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章