Krajta

Projít odkazem vs. Hodnota v Pythonu

Projít odkazem vs. Hodnota v Pythonu
Po znalosti jazyka Python můžete najít případy, kdy funkce nemění argumenty na místě, jak byste očekávali, zvláště pokud jste obeznámeni s mnoha dalšími počítačovými jazyky. Mnoho jazyků používá argumenty metod jako odkazy, definované jako předávání odkazem na aktuální proměnné. Pokud jste pokročilý vývojář Pythonu, který chce pochopit Pythonův konkrétní způsob zpracování argumentů metod, pak je tato příručka opravdu pro vás.

Python podporuje Pass by Object Reference

Pass-by-reference a pass-by-value jsou nepopiratelně dva nejznámější a snadno srozumitelné způsoby předávání parametrů mezi programovacími jazyky. Python je, bohužel, „pass-by-object-reference“, ani „Pass by Value“, ani „Pass by Reference“, často označovaný jako „Call by Object Reference“, stejně jako „Call by Sharing“.„Je užitečné se podrobněji podívat na samotný koncept rozdělením na segmenty, zatímco se ponoříte do technických specifik předávání Reference:

Složit: to znamená dodat metodě argument.

Odkazem: to znamená, že argument, který přesunete na metodu, odkazuje na proměnnou, která se nyní nachází v úložišti namísto jiné repliky této proměnné.

Když přiřadíte metodě odkaz na definovanou proměnnou, proměnná, které odpovídá, by byla explicitně ovlivněna všemi operacemi na tomto odkazu. Uvažujme nyní o příkladu, jak to v praxi funguje. V tomto příkladu jsme definovali proměnnou 'arg mající hodnotu 4. V celém tomto scénáři proměnná 'arg nebyl na svém místě upraven. Zdá se, že Python zpracovává váš poskytnutý argument namísto odkazu na přítomnou proměnnou jako samostatnou hodnotu.

Znamenalo by to, že místo podle odkazu Python přesune argumenty podle hodnoty? Python přesouvá argumenty přes přiřazení, takže ani pomocí Reference, ani s hodnotou. Logika je dvojí:

V současné době je předávající parametr ukazatel na objekt. Některé typy dat jsou měnitelné a některé nelze měnit.

Pokud přemístíme proměnlivý objekt do funkce, funkce získá odkaz na stejný objekt, takže jej můžete k spokojenosti své duše vše mutovat; externí obor by však nic nevěděl, než se znovu připojíte k odkazu ve funkci. Jakmile skončíte, externí reference bude mířit pouze na skutečný objekt. Pokud přesunete neměnný objekt do funkce, externí Reference nelze vždy znovu spojit a nemůžete jen mutovat objekt. Aby byly věci mnohem přímočařejší, pochopme jeden po druhém.

Projít odkazem

Nejprve musíte pochopit, že proměnná 'mylist' sama o sobě není seznam, ale odkazuje na seznam s hodnotami. Proměnnou 'mylist' můžete nazvat kontejnerem, který má v sobě hodnoty. Hodnoty seznamu jsou objekty. Proměnná „mylist“ byla přímo doručena do funkce s jejím obsahem.

„Seznam“ i „můj seznam“ se v příkladu kódu zdají být stejnou proměnnou úložiště, a proto se vztahují na stejný objekt úložiště. Proto na výstupu vytiskne 'Saeed.''

Jakákoli akce provedená s proměnnou nebo entitou by byla okamžitě zrcadlena na metodu volajícího. Metoda může zcela upravit hodnotu proměnné a zaměřit ji na zcela odlišný objekt. Jak můžete vidět ve funkci 'set_list', změnili jsme obsah seznamu a vytiskli celý nový seznam s prvkem 'Aqsa.„Je to proto, že jsme vrátili upravený seznam a vytiskli jej na stejném řádku jako volající.

Metoda může také přerozdělit prvky proměnné pro stejný výsledek jako níže. Můžete vidět, že jsme do seznamu přidali novou hodnotu a změna se projevila. Do seznamu jsme přidali jedinečný řetězec a vrátili jej volajícímu. Závěrem lze říci, že metoda a volající během relace pass-by používaly stejnou proměnnou a objekt.

Projděte kolem hodnoty

Prostřednictvím hodnoty pass by je metoda dodávána s duplikátem objektu argumentu, který mu volající přiřadí. Tím je zajištěno, že původní položka zůstane nezměněna a všechny provedené úpravy budou zachovány na samostatných paměťových místech v replice stejného objektu.

Je stejně platný pro všechny operace prováděné metodou na proměnné nebo entitě. Duplikáty proměnných a objektů v rozsahu metody volajícího jsou zcela odděleny, aby je bylo možné shrnout.

Předat objekt odkazem

V celé této situaci, protože Python je odlišný, Pythonovy metody získávají velmi podobný odkaz na objekt v úložišti, na který odkazuje volající. Naopak technika nezíská proměnnou 'mylist' (kontejner). Metoda volajícího ukládá stejný objekt; metoda generuje něčí kontejner a generuje zcela nový index pro svůj vlastní, stejně jako v pass-by-value.

Volající a metoda mluví o stejném objektu v úložišti, ale když připojená metoda použije externí položku na seznam, entita volajícího se změní. Mají více štítků, ale jsou to stejné věci. Obě proměnné mají velmi podobný objekt. To je smysl, který má jeho vztah k pohybu objektem. V úložišti používá metoda a volající podobný objekt, přesto je zachytí prostřednictvím více proměnných. Proměnná volajícího (kontejner) nebude změněna žádnými úpravami provedenými v proměnné metody (kontejner); upravena jsou pouze data nebo obsah.

Závěr

Python pracuje nezávisle na jazycích, které přijímají přesun podle Reference nebo hodnoty argumentů. Argumenty metody jsou lokální proměnné, které byly přiděleny každé hodnotě přenesené do metody. Ale to vám stále nevylučuje získání stejných výsledků, jaké byste našli v jiných jazycích, když přesouváte argumenty pomocí proxy.

Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...
Hry HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
Mnoho vývojářů a vydavatelů her přichází s HD remasterem starých her, aby prodloužili životnost franšízy, prosím fanoušky, kteří požadují kompatibilit...
Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...