」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 什麼時候使用引用呼叫和物件引用呼叫?

Python 什麼時候使用引用呼叫和物件引用呼叫?

發佈於2024-11-08
瀏覽:415

When Does Python Use Call by Reference and Call by Object Reference?

Python 函數依引用呼叫(重複)

在許多程式語言中,參數可以按值傳遞,也可以使用特定保留字按引用傳遞。然而,在Python中,當參數傳遞給函數時,它永遠不會修改呼叫函數中原始變數的值。

範例1:按值呼叫

k = 2

def foo(n):
    n *= n
    return n

j = foo(k)
print(j)  # 4
print(k)  # 2

此處,呼叫 foo 函數後 k 的值保持不變,因為 Python 按值傳遞參數。

範例 2:透過 Global 呼叫

要修改呼叫函數中的變量,可以使用global關鍵字。

n = 0

def foo():
    global n
    n *= n
    return n

在這種情況下,全域關鍵字允許在 foo 函數內修改 n,並且其值將在呼叫函數中更新。

透過 Object Reference 中的傳遞然而,Python

Python 並非嚴格遵循按值呼叫或按引用呼叫。相反,它採用了一個稱為“按物件引用傳遞”的概念。

在 Python 中,變數引用對象,而非對象本身。因此,當變數傳遞給函數時,它傳遞的是物件的引用,而不是物件本身。

例如:

def append_one(li):
    li.append(1)

x = [0]
append_one(x)
print(x)  # [0, 1]

在此程式碼中,append_one 函數將 1 追加到列表 x 中。由於列表是透過物件參考傳遞的,因此函數內對列表所做的任何更改都將反映在呼叫函數中。

依引用傳遞與依物件引用傳遞

  • 依參考傳遞:原始變數的方塊傳遞給被呼叫的函數,允許對變數內容的任何變更反映在呼叫中function.
  • 透過物件參考傳遞: 對原始物件框的引用傳遞給被呼叫的函數。物件的變更會反映在呼叫函數和被呼叫函數中,但變數本身(盒子)的變更則不會。

總之,Python 遵循透過物件參考傳遞,其中變數引用物件而不是物件本身。這允許函數修改傳遞給它們的對象,但對變數引用本身的更改不會傳播回呼叫函數。

版本聲明 本文轉載於:1729140861如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-05-01
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-05-01
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-05-01
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-05-01
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-05-01
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-05-01
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-05-01
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-05-01
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-05-01
  • CSS直接定位文本節點及克服限制方法
    CSS直接定位文本節點及克服限制方法
    用CSS來定位文本節點:限制和解決方案遇到涉及文本節點的測試用例時,識別此限制至關重要。如CSS規範中概述的匿名框,從封閉的非匿名盒中接收其屬性。但是,它們保留了非屬性屬性的初始值。 如果在HTML標籤中包裝文本節點是不切實際的,則另一種方法是設置容器樣式。對於可以針對目標的文本,您可以根據需要覆...
    程式設計 發佈於2025-05-01
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-05-01
  • PostgreSQL視圖修改列技巧,不用重建就能更新
    PostgreSQL視圖修改列技巧,不用重建就能更新
    永久分辨率:避免使用定義長度的數據類型。而是使用文本或VARCHAR數據類型,而無需長度說明符。如有必要,請使用檢查約束執行最大長度。此方法消除了在更改列類型時修改視圖的需要。 詳細說明 更改查詢,使用創建或替換視圖。但是,在修改結果列數據類型時,無法進行此操作。在這種情況下,必須刪除舊視圖並創建...
    程式設計 發佈於2025-05-01
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-05-01
  • SQL Server去除VARCHAR字段前導零方法
    SQL Server去除VARCHAR字段前導零方法
    [2 [2 一種常見技術使用 substring 函數。這種方法確定了第一個非零特徵的起始位置,並提取相關的底帶,有效地消除了領先的零。 例如,要從 varchar(10) patindex 找到第一個非零字符的索引,從此提取子字符串,確保10個字符的長度。 另一種有效方法採用 fuctive ...
    程式設計 發佈於2025-05-01
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-01

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3