問:Python中為什么沒有swap(a, b)方法?我們在Python中如何交換對(duì)象?
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了洛江免費(fèi)建站歡迎大家使用!
Python 不使用這種方式(swap(a, b))。Python以引用方式管理對(duì)象,你可以交換引用,但通常不能交換內(nèi)存中的對(duì)象值。當(dāng)然你也不需要這樣做。
在C++中這種函數(shù)用來交換“a和b的值”。在Python中,a和b的值不會(huì)發(fā)生交換,但位于當(dāng)前命名空間中的標(biāo)記(如a和b)是可以交換的。而對(duì)象本身是仍然保留。
所以與其調(diào)用一個(gè)swap(a, b),你倒不如使用:a,b = b,a。
通常python函數(shù)不會(huì)混淆它們的命名空間,所以它不能像C++的swap(a, b)那樣進(jìn)行引用操作。
因此,在python中應(yīng)該這樣做:
a = 1
b = 2
def swap(t1, t2):
return t2, t1
a,b = swap(a, b) # After this point, a == 2 and b == 1
But there is not way (other than abusing globals or the module
namespace) to do it like this:
不過下面這段代碼不可能像我們希望的那樣工作(全局命名空間和局部命名空間是隔離的):
a = 1
b = 2
def swap(t1, t2):
t2, t1 = t1, t2
return
swap(a, b)
# After this point, a == 1 and b == 2. The calling namespace is
# not changed.
在類中,你可以構(gòu)造一個(gè)命名空間來操作可調(diào)用的對(duì)象(類實(shí)例方法),事實(shí)上,這意味著也許可以實(shí)現(xiàn)一個(gè)swap()方法。但是它們?nèi)匀恢皇遣僮髅臻g中的對(duì)象引用,而不會(huì)交換對(duì)象本身(或者它們在機(jī)器內(nèi)存中的數(shù)據(jù))。以下只是一個(gè)示例,并不表示它們有什么實(shí)用性:
class Pair:
def __init__(self, t1, t2):
self.t1 = t1
self.t2 = t2
def get(self):
return self.t1, self.t2
def swap(self):
self.t1, self.t2 = self.t2, self.t1
a = 1
b = 2
pair = Pair(a, b)
pair.get() # returns 1,2
pair.swap() # changes the namespace of the pair object
pair.get() # returns 2,1
a == 1
b == 2 # The a and b labels did NOT change
python交換兩個(gè)變量的值很簡單,a,b = b,a 就可以,寫成函數(shù),代碼如下:
def?jh(a,b):
return?b,a
x?=?1
y?=?2
x,y?=?jh(x,y)
print(x,y)
執(zhí)行結(jié)果如下:
def test():
n=int(input('請輸入一個(gè)2位正整數(shù):'))
if 9n100:
return 'n=%d,交換后變成%d。' % (n,int(str(n)[::-1]))
else:
print('輸入錯(cuò)誤')
print(test())
網(wǎng)頁名稱:python的交換函數(shù) python 數(shù)據(jù)交換
標(biāo)題路徑:http://jinyejixie.com/article22/dodhgcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、用戶體驗(yàn)、微信公眾號(hào)、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)