Új hozzászólás Aktív témák

  • kovisoft

    őstag

    válasz DrojDtroll #2696 üzenetére

    Általánosságban nem tudod ezt megtenni, csak ún. mutable adattípusokra, mint pl. lista, dictionary. A példád pont menni fog, ha b egy objektum, akkor annak egy attributumát tudod módosítani egy függvényben (de nem tudod lecserélni magát az objektumot):

    >>> class myclass:
    ...     def __init__(self, initc):
    ...         self.c = initc
    ...
    >>> x = myclass('semmi')
    >>> x.c
    'semmi'
    >>> def a(b):
    ...     b.c='valami'
    ...
    >>> a(x)
    >>> x.c
    'valami'

    De ez nem fog minden adattípusra működni. Úgy kell elképzelni, hogy pythonban nem olyan változók vannak, amiknek - ahogy a nevük is jelzi - változhat az értékük (mint pl. C-ben), hanem sokkal inkább címkék. Ugyanis amikor egy változónak új értéket adunk, akkor igazából átcímkézzük azt, hogy egy új értékre mutasson. Legalábbis ez igaz, az ún. immutable típusokra (számok, stringek, stb). Ha egy ilyen változót átadsz egy függvénynek, majd a függvényen belül változtatod az értékét, akkor igazából a paraméter változót címkézed át az új értékre, de ennek nincs hatása az eredeti változóra, amit átadtál a függvénynek.

    Nincs olyan nyelvi módosító elem, hogy egy változót érték vagy referencia szerint adhass át. A függvény paraméterek mindig érték szerint vannak átadva, de mutable típusoknál az objektum referencia van érték szerint átadva. :)

Új hozzászólás Aktív témák