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

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

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

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]刪除
最新教學 更多>
  • 如何解決 PHP 中 file_get_contents() 的 SSL 逾時和加密啟用錯誤?
    如何解決 PHP 中 file_get_contents() 的 SSL 逾時和加密啟用錯誤?
    解決了file_get_contents() 的SSL 逾時和加密啟用錯誤在PHP 中,當使用file_get_contents() 從HTTPS 頁面檢索內容時,可能會遇到與SSL 加密啟用相關的錯誤。此類錯誤之一是:Warning: file_get_contents(): SSL: crypt...
    程式設計 發佈於2024-11-08
  • 如何監控 Guzzle Http 用戶端 – PHP 快速提示
    如何監控 Guzzle Http 用戶端 – PHP 快速提示
    Guzzle 是一款流行的 PHP HTTP 客户端,可以轻松发送 HTTP 请求和创建 Web 服务库。最流行的 PHP 框架提供了内部 Http Client 服务,它们只是 Guzzle Http Client 的定制实现: Laravel Http 客户端 Symfony Http 客户端 ...
    程式設計 發佈於2024-11-08
  • 為什麼 Python 在方法中需要明確的「Self」參數?
    為什麼 Python 在方法中需要明確的「Self」參數?
    揭秘Python方法中的「Self」參數與某些程式語言不同,物件引用是用「this」關鍵字式定義的, Python 要求在方法定義中明確包含「self」參數。這種設計決策提出了一個問題:它是故意的還是實現限制的問題。 在 Python 中,「self」參數明確地建立了方法與其類別實例之間的關係。它提...
    程式設計 發佈於2024-11-08
  • 使用 Gin/Golang 時如何處理空請求主體:綁定與除錯技術指南
    使用 Gin/Golang 時如何處理空請求主體:綁定與除錯技術指南
    Gin/Golang 中請求正文為空使用Gin 處理POST 請求時,偶爾可能會遇到請求正文顯示為空的問題是空的。這可能會令人沮喪,尤其是當您希望從客戶端接收資料時。此問題的一個常見原因是嘗試直接列印正文。 Gin 將請求內文表示為介面類型 ReadCloser。但列印該介面的字串值並不會洩漏實際的...
    程式設計 發佈於2024-11-08
  • Python 列表理解
    Python 列表理解
    Python 最酷的事情之一是清單推導式如何讓在一行程式碼中建立和操作清單變得非常容易。列表理解是一種透過轉換和過濾現有清單中的元素來建立新清單的簡潔方法。這個特性是 Python 使程式碼更具可讀性和高效性的眾多方法之一,對於初學者來說是一個很好的學習工具。在這裡閱讀更多範例...... 奧利佛 ...
    程式設計 發佈於2024-11-08
  • 如何在 Gin 中組織路由:分組路由定義指南?
    如何在 Gin 中組織路由:分組路由定義指南?
    如何在 Gin 中組織路由為了避免路由定義使主文件混亂,您可以將路由分組到單獨的文件中。這種方法可以實現更好的程式碼組織和可維護性。 要建立嵌套路由分組,您可以將路由器變數儲存在結構體或全域變數中。然後,各個檔案可以將處理程序新增至此共用路由器實例。 範例實作routes.gopackage app...
    程式設計 發佈於2024-11-08
  • Leetcode鍊錶問題
    Leetcode鍊錶問題
    反向鍊錶(LeetCode #206) 難度:簡單 概念:迭代與遞歸方法。 合併兩個排序清單 (LeetCode #21) 難度:簡單 概念:鍊錶遍歷與合併技術。 從清單結束時刪除第 N 個節點 **(LeetCode #19) **難度:中等 概念:兩指針技術(慢指針和快指針)。 鍊錶循環...
    程式設計 發佈於2024-11-08
  • 如何在 C++ 容器中儲存異質物件:boost::any 或自訂實作?
    如何在 C++ 容器中儲存異質物件:boost::any 或自訂實作?
    在C 容器中儲存異質物件C 容器通常需要同質元素,這意味著它們只能保存單一類型的對象。但是,在某些情況下,您可能需要一個可以容納混合資料類型的容器。本文探討如何使用 boost::any 函式庫和自訂方法來實現此目的。 使用 boost::anyboost::any 是一個模板類別可以容納任何 C ...
    程式設計 發佈於2024-11-08
  • 使用 Pandas 掌握數據分析:從數據中釋放洞察力
    使用 Pandas 掌握數據分析:從數據中釋放洞察力
    資料分析是資料科學的核心,Python 的 Pandas 函式庫是一個強大的工具,可以讓這項任務變得更輕鬆、更有效率。無論您使用簡單的電子表格還是大型資料集,Pandas 都可以讓您像專業人士一樣靈活地操作、分析和視覺化資料。在本文中,我們將深入探討 Pandas 的基礎知識,涵蓋從資料操作到進階分...
    程式設計 發佈於2024-11-08
  • 使用 GitLab CI/CD 和 Terraform 實作 Lambda 以進行 SFTP 整合、Go 中的 S Databricks
    使用 GitLab CI/CD 和 Terraform 實作 Lambda 以進行 SFTP 整合、Go 中的 S Databricks
    通过 Databricks 中的流程自动化降低成本 我的客户需要降低在 Databricks 上运行的流程的成本。 Databricks 负责的功能之一是从各种 SFTP 收集文件,解压缩它们并将它们放入数据湖中。 自动化数据工作流程是现代数据工程的重要组成部分。在本文中,我们将探...
    程式設計 發佈於2024-11-08
  • 最佳免費開源圖示庫 4
    最佳免費開源圖示庫 4
    In 2024, finding the best free icon library can significantly enhance the visual appeal of your websites, apps, or digital projects. Whether you're a ...
    程式設計 發佈於2024-11-08
  • React Part 元件、State 和 Props 入門
    React Part 元件、State 和 Props 入門
    歡迎回到我們的 React.js 之旅!在上一篇文章中,我們介紹了 React 的基礎知識,強調了它作為建立動態使用者介面的函式庫的優勢。今天,我們將深入探討創建 React 應用程式所需的三個基本概念:元件、狀態和屬性。讓我們詳細探討這些概念! 什麼是 React 元件? Rea...
    程式設計 發佈於2024-11-08
  • 如何利用原生 ES6 Promises 有效地連結異步 jQuery 函數?
    如何利用原生 ES6 Promises 有效地連結異步 jQuery 函數?
    JavaScript 的互通性承諾實現非同步jQuery 函數的高效連結連結異步jQuery 函數時,通常需要避免jQuery 的內建函數Promises 功能並使用原生ES6 Promises 取代。這種互通性允許 jQuery 操作和您想要的 Promise 實現之間的無縫整合。 使用Nativ...
    程式設計 發佈於2024-11-08
  • 在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在ElementTree 的“find”和“findall”方法中忽略XML 命名空間使用ElementTree 模組解析和定位XML 文件中的元素時,命名空間會帶來複雜性。以下介紹如何在 Python 中使用「find」和「findall」方法時忽略命名空間。 當 XML 文件包含命名空間時,會導...
    程式設計 發佈於2024-11-08
  • Bitbucket 綜合指南:功能、整合和最佳實踐
    Bitbucket 綜合指南:功能、整合和最佳實踐
    Bitbucket简介 Bitbucket 是 Atlassian 旗下基于 Git 的源代码存储库托管服务,以其强大的集成能力和强大的协作功能而闻名。它适合各种规模的团队,提供可简化开发工作流程、提高生产力并确保安全代码管理的解决方案。无论您是小型团队还是大型企业的一部分,Bitbucket 都...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3