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

  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • Dive In

    Dive In

    17 Temmuz 2013
  • Attempts at least

    Attempts at

    1 Ocak 2007