python有兩種內建的或是已經定義過的型別。
不可變型別不提供變更內容的方法。比如,變數x被置為6,它沒有增長的方法。如果你需要加1,你需要建立乙個新的物件。
my_list = [
1, 2,
3]my_list[0
] =
4print
my_list
# [4, 2, 3] <- the same list as changedx=
6x=x
+1 #thenewxisanotherobject
這種區別的結果之一就是可變型別不是穩定的,因此它們不能作為字典的key。
對可變的物件使用可變型別,對不可變的物件使用不可變型別,有助於澄清**的意圖。
例如,不可變的列表對應的就是元組。建立乙個(1,2)的元組。元組建立以後就不能再更改,並且可以作為字典的鍵。
bad
# create a concatenated string from 0 to 19 (e.g. "012..1819")nums
= ""
for
n in
range(20
): nums
+= str(n
) # slow and inefficient
nums
good
# create a concatenated string from 0 to 19 (e.g. "012..1819")
nums =
for
n in
range(20
): nums.(
str(n))
print "".
join
(nums
) # much more efficient
best
# create a concatenated string from 0 to 19 (e.g. "012..1819")nums = [
str(n)
for
n in
range(20
)] print "".
join
(nums)
最後要說的一點就是string使用join()並不總是最好的。如果你從一系列已經定義好的字串中建立乙個新字串,使用加號事實上還是挺快的。但是在以上的那種情況或者你向乙個已經存在的字串新增字串,那麼使用jion()將是較好的方法。
foofoobar= 』foo』
bar
= 』bar』
= foo
+ bar
# this is good
foo
+= 』ooo』
# this is bad, instead you should do:
foo
= 』』
.join
([foo
, 』ooo』])
注意:除了join方法你也可以用格式化字串來連線定義好的字串,但是在python3中%操作符將會被str.format()替代。
foofoobar= 』foo』
bar
= 』bar』
= 』%s%s』 % (
foo,
bar)
# it is ok
foobar
= 』』
.format
(foo
, bar
) # it is better
foobar
= 』』
.format
(foo
=foo
, bar
=bar
) # it is best
2.1.8 vendorizing dependencies
2.1.9 runners
2.1.10 further reading
• •
可變型別與不可變型別
一 什麼可變資料型別和不可變資料型別 可變資料型別 value值改變,id值不變 不可變資料型別 value值改變,id值也隨之改變。二 如何確定一種資料型別是可變的還是不可變的 根據可變資料型別與不可變資料型別的概念,只需要在改變value值的同時,使用id 函式檢視變數id值是否變化就可以知道這...
可變型別與不可變型別
可變型別 值發生改變時,記憶體位址不變,證明在改變原值 不可變型別 值發生改變時,記憶體位址也發生改變,即id也變,證明是沒有在改變原值,是產生新的值 1.數字型別 x 10 id x 1830448896 x 20 id x 1830448928 記憶體位址改變了,說明整型是不可變資料型別,浮點型...
python可變型別與不可變型別
學習版本3.5.2 python的基礎型別數值 字串和元組都是不可變型別,列表和字典時可變型別 1.number 字串 id 1 4297546560 id 2 4297546592 a 1 id a 4297546560 a 2 id a 4297546592 b 1 id b 429754656...