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

  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • FUNKER530 - Veteran Community & Combat Footage

    FUNKER530 -

    25 Ocak 2007
  • 趣味そうこ♪

    趣味そう

    3 Mart 2010