def make_great(magicians):
for name in magicians:
magician='the Great'+name
name = magician
print(name)
def show_magician(names):
for magician in names:
print(magician)
magicians=['john','machel','jack']
make_great(magicians)
show_magician(magicians)
為什么原來的串列沒有改變?
uj5u.com熱心網友回復:
這段代碼并沒有對串列進行增刪改,只是將串列的內容遍歷進行字串拼接和列印是感覺哪塊代碼會改變串列呢?
uj5u.com熱心網友回復:
for name in magicians:magician='the Great'+name
name = magician
這個不會在遍歷串列對串列元素改變嗎?
uj5u.com熱心網友回復:
for name in magicians:
magician='the Great'+name
name = magician
這個不會在遍歷串列對串列元素改變嗎?
uj5u.com熱心網友回復:
print('-'*50)
def make1(magicArgs):
print('函式引數串列變數 magicArgs 在記憶體中地址:%s' %id(magicArgs))
i=0
for m in magicArgs:
print()
print('首先輸出迭代變數 m 的記憶體地址 和 通過下標訪問的串列元素記憶體地址,結果是一樣的')
print ('magicArgs 元素 %i 在記憶體中的地址:%s' %(i,id(magicArgs[i])) )
print ('變數 m 在記憶體中的地址:%s' %id(m))
print()
print('隨后改變 變數 m 值')
m=m*10
print (' m :%s' %m)
print ('list1[i]:%s' %list1[i])
print ('magicArgs 元素 %i 在記憶體中的地址:%s' %(i,id(magicArgs[i])) )
print ('變數 m 在記憶體中的地址:%s' %id(m))
i+=1
list1=['1','2','3',]
print('串列變數 list1 在記憶體中地址:%s' %(id(list1)) )
make1(list1)
運行上面代碼,可以看到,當改變迭代變數中存盤的字串的值后,迭代變數和通過下標訪問的串列元素的記憶體地址已經不一樣了。
看起來,不能通過迭代變數改變引數的值。
在c#中,給迭代變數賦值根本就通不過編譯的。
uj5u.com熱心網友回復:
第一name遍歷了magicians串列,而第二個name你是重新給他賦值了
如果你想改變串列中的元素
可以這么寫
n = 0
for name in magicians:
magician = 'the Great' + name
magicians[n] = magician
n += 1
uj5u.com熱心網友回復:
因為沒有magicians給回傳值,沒有給magicians賦值,所以還是原來的值。。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133210.html
