Python實(shí)現(xiàn)對(duì)象自連接的示例詳解
在Python中,字符串可以與數(shù)字相乘。
將字符串連接到數(shù)字不起作用
在Python中,字符串和數(shù)字之間不能使用加號(hào)( + ):
prefix = "year: "
year = 1999
prefix + year
Traceback (most recent call last):
File "<python-input-4>", line 1, in <module>
prefix + year
~~~~~~~^~~~~~
TypeError: can only concatenate str (not "int") to str
您可以使用加號(hào)將兩個(gè)數(shù)字相加:
year + 1
2000
或者將兩個(gè)字符串連接起來(lái):
prefix + str(year)
'year: 1999'
但它不適用于字符串和數(shù)字之間。
將字符串乘以數(shù)字
有趣的是,你可以將一個(gè)字符串乘以一個(gè)數(shù)字:
"ha" * 3
'hahaha'
你可以把這理解為自連接。我們將這個(gè)字符串與自身連接特定的次數(shù):
"ha" + "ha" + "ha"
'hahaha'
自連接僅適用于整數(shù)
字符串只能用整數(shù)自連接:
"ha" * 2.5
Traceback (most recent call last):
File "<python-input-2>", line 1, in <module>
"ha" * 2.5
~~~~~^~~~~
TypeError: can't multiply sequence by non-int of type 'float'
字符串相乘非整數(shù)次是沒(méi)有意義的。
有趣的是,負(fù)數(shù)*也可以*用于自連接,只是結(jié)果總是空字符串:
"ha" * -3
''
當(dāng)你將一個(gè)字符串乘以0時(shí),也會(huì)發(fā)生同樣的情況:
"ha" * 0
''
序列通常支持自連接
任何支持字符串拼接的對(duì)象,很可能也支持自拼接。
因此,其他序列,如列表、元組和字節(jié)串,也可以進(jìn)行自連接:
[2, 1, 3] * 2
[2, 1, 3, 2, 1, 3]
(4, 5) * 3
(4, 5, 4, 5, 4, 5)
b"text " * 3
b'text text text '
自連接的實(shí)際應(yīng)用
這算是一個(gè)挺有意思的功能,但它存在的意義是什么?它真的有用嗎?
我偶爾會(huì)使用自連接來(lái)創(chuàng)建具有特定默認(rèn)值的特定大小的列表。
例如,我們可以使用自連接來(lái)創(chuàng)建一個(gè)表示一年中 12 個(gè)月的列表,以統(tǒng)計(jì)該列表中某個(gè)事物出現(xiàn)的次數(shù),并且我們希望將所有計(jì)數(shù)默認(rèn)設(shè)置為零:
[0] * 12
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但更多時(shí)候,我使用這個(gè)功能來(lái)創(chuàng)建一個(gè)由相同字符重復(fù)特定次數(shù)的字符串。
例如,我可能想在程序的輸出部分之間打印 80 個(gè)連字符( - )。
print("-" * 80)
--------------------------------------------------------------------------------
自連接不會(huì)復(fù)制
就像在 Python 中創(chuàng)建新的數(shù)據(jù)結(jié)構(gòu)或分配變量一樣,自連接不會(huì)復(fù)制任何內(nèi)容。
在Python中,給變量賦值并不會(huì)復(fù)制該值:
a = [2, 1, 3]
b = a
Python 中的變量類(lèi)似于指針。因此,更改b指向的列表也會(huì)更改a指向的列表:
b.append(4)
b
[2, 1, 3, 4]
a
[2, 1, 3, 4]
這是因?yàn)?strong>這兩個(gè)變量指向同一個(gè)對(duì)象。這就是Python中賦值操作的作用。
就像給變量賦值不會(huì)復(fù)制該值一樣,使用列表或元組的自連接也不會(huì)復(fù)制這些項(xiàng)。
所以,如果我們嘗試將一個(gè)包含列表的列表乘以3 ,從而將其自身連接三次:
rows = [[0, 0, 0]] * 3
最終我們會(huì)得到一個(gè)包含相同三項(xiàng)的列表:
rows
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
也就是說(shuō),索引0與索引1是同一個(gè)對(duì)象:
rows[0] is rows[1]
True
也就是說(shuō),如果我們修改其中一個(gè)內(nèi)部列表,所有內(nèi)部列表都會(huì)隨之改變:
rows[1][1] = 7
rows
[[0, 7, 0], [0, 7, 0], [0, 7, 0]]
這是因?yàn)?strong>它們都屬于同一個(gè)列表。
不要將可變項(xiàng)的列表自連接起來(lái)
與大多數(shù)操作一樣,自連接不會(huì)創(chuàng)建副本。
實(shí)際上,這意味著自連接通常只用于包含不可變項(xiàng)的序列,而不用于包含可變項(xiàng)的序列。
何時(shí)使用自連接
自連接可用于創(chuàng)建包含相同字符或相同字符序列且重復(fù)次數(shù)固定的字符串。它也適用于預(yù)先填充包含特定數(shù)量默認(rèn)值的列表。
但是自連接不會(huì)復(fù)制任何內(nèi)容,所以不要嘗試用它來(lái)創(chuàng)建可變值的列表,例如列表的列表。
到此這篇關(guān)于Python實(shí)現(xiàn)對(duì)象自連接的示例詳解的文章就介紹到這了,更多相關(guān)Python對(duì)象自連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm環(huán)境下Django項(xiàng)目環(huán)境的搭建全過(guò)程
本文介紹了Django環(huán)境安裝與項(xiàng)目搭建流程,包括創(chuàng)建項(xiàng)目與app、路由配置、視圖編寫(xiě)及常見(jiàn)報(bào)錯(cuò)解決方法,旨在為新手提供參考和實(shí)用經(jīng)驗(yàn)2025-10-10
Python結(jié)合OpenClaw編寫(xiě)第一個(gè)控制程序的實(shí)戰(zhàn)指南
這篇文章將深入OpenClaw的核心概念與基本語(yǔ)法,徹底搞懂?dāng)?shù)據(jù)類(lèi)型、配置文件、節(jié)點(diǎn)、主題、服務(wù)這些基礎(chǔ)構(gòu)件,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-03-03
Tensorflow tensor 數(shù)學(xué)運(yùn)算和邏輯運(yùn)算方式
這篇文章主要介紹了Tensorflow tensor 數(shù)學(xué)運(yùn)算和邏輯運(yùn)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置
在本篇文章里小編給大家分享了關(guān)于django中數(shù)據(jù)庫(kù)設(shè)置的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。2019-01-01
Python中線(xiàn)程編程之threading模塊的使用詳解
這篇文章主要介紹了Python中線(xiàn)程編程之threading模塊的使用詳解,由于GIL的存在,線(xiàn)程一直是Python編程中的焦點(diǎn)問(wèn)題,需要的朋友可以參考下2015-06-06

