[英]Need help for Python3
def a(inp):
i = 0
x = 0
for i in range(len(inp)):
b(x)
print(x)
def b(x1):
x1 = x1 + 1
def c ():
a1 = a("...")
c()
此代碼給出 output:
0
0
0
我不明白為什么x
值不會改變?
Python 有可變和不可變事物的概念。 可變的東西包括列表、字典等。但是 integer 是不可變的,所以當你改變它時,你必須重新分配它。
例如
def b(l):
l += [1]
a= [1,2,3]
b(a)
print(a)
def c(l):
l += 1
a= 1
c(a)
print(a)
此代碼與 output
[1, 2, 3, 1]
1
因為 int 是不可變的,而 list 是可變的。 有關更多信息,您可以查看https://www.geeksforgeeks.org/mutable-vs-immutable-objects-in-python/ 。
x1 = x1 + 1
不能改變x
。 x
作為 value* 傳遞給b
。 重新分配x1
只會改變x1
正在查看的值。 從 function 返回值並在調用站點重新分配它是實現您想要的最簡單的方法:
. . .
for i in range (len(inp)):
x = b(x)
print(x)
def b(x1):
return x1 + 1
*
它比這稍微復雜一些,但這是目前在處理數字時考慮它的最簡單方法。
您的 function b(x1)
中的x1 = x1 + 1
不會更改傳遞給b()
的變量的值。 所以在 function 之外,x 保持不變為 0。
它只是更改該函數的 scope 中的x1
變量。 要將其分配給x
,請返回新值:
def b(x1):
return x1 = x1 + 1
然后將返回值設置為x
:
for i in range (len(inp)):
x = b(x)
print(x)
還建議獲取i
的值,因為它是 position。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.