SORU
22 ŞUBAT 2009, Pazar


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
22 ŞUBAT 2009, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Developers

    Android Deve

    9 Kasım 2007
  • dope2111

    dope2111

    29 HAZİRAN 2009
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007