Python, neden bir işlevi arayan, ama diğerleri tarafından algılanan gibi bazı değişkenleri değiştirebilirsiniz?
Python yeniyim ve değişken kapsamı konusundaki yaklaşımını anlamaya çalışıyorum. Bu örnekte, neden f()
main()
ama n
değeri içinde algılanmaktadır x
, değerini değiştirmek mümkün.
def f(n, x):
n = 2
x.append(4)
print 'In f():', n, x
def main():
n = 1
x = [0,1,2,3]
print 'Before:', n, x
f(n, x)
print 'After: ', n, x
main()
Çıkış:
Before: 1 [0, 1, 2, 3]
In f(): 2 [0, 1, 2, 3, 4]
After: 1 [0, 1, 2, 3, 4]
CEVAP
Bazı cevaplar "sözcüğü bir işlev çağrısı. bir bağlamda kopyasını içerir Bu kafa karıştırıcı buluyorum.
Python kopya değildirnesnelerbir işlev çağrısı sırasında geçirirhiç.
Fonksiyon parametreleri vardırisimler. Bir işlev çağrısı Python geçmesi ne olursa olsun bu parametreler (arayan kapsamında adları ile) bağlar.
Nesneleri değişken (liste gibi) veya sabit (tamsayılar gibi, Python dizeleri) olabilir. Değişken değiştirebilirsiniz nesne. Adı değiştiremezsin, sadece başka bir nesneye bağlayabilirsiniz.
Senin örnek scopes or namespaces Python naming and binding mutability of an object ile alakalı değildir.
def f(n, x): # these `n`, `x` have nothing to do with `n` and `x` from main()
n = 2 # put `n` label on `2` balloon
x.append(4) # call `append` method of whatever object `x` is referring to.
print 'In f():', n, x
x = [] # put `x` label on `[]` ballon
# x = [] has no effect on the original list that is passed into the function
Burada the difference between variables in other languages and names in Python güzel resimler.
Neden diğerleri üzerinde bazı platform...
Neden bazı fonksiyonlar&;__" ve i...
Neden bir MD5 kabuk Python bir yankı k...
Dinamik yükleme Y, FireBug ya da IE8 G...
Neden bazı nesne özellikleri UnaryExpr...