Python函數參數傳遞機制全解析

Python常見問題解答

1. 函數參數傳遞是值傳遞還是引用傳遞?

Python中的參數傳遞是"對象引用傳遞"(或稱為"共享對象傳遞")。具體來說:

  • 對于不可變對象(如數字、字符串、元組),傳遞的是對象的值(表現為類似值傳遞)
  • 對于可變對象(如列表、字典),傳遞的是對象的引用(表現為類似引用傳遞)

示例:

def modify(num, lst):num += 1lst.append(4)a = 10
b = [1, 2, 3]
modify(a, b)
print(a)  # 輸出 10 (不變)
print(b)  # 輸出 [1, 2, 3, 4] (已修改)

2. 如何避免函數副作用?

函數副作用指的是函數修改了外部狀態或變量。避免副作用的方法:

  1. 使用不可變數據結構:優先使用元組而非列表
  2. 創建副本:在函數內部操作前創建參數的副本
def process_data(data):data = data.copy()  # 創建副本# 處理data...
  1. 純函數:函數只依賴于輸入參數,不修改外部狀態
  2. 返回新對象:而不是修改輸入參數
  3. 使用函數式編程:如map、filter、reduce等

3. 為什么需要if __name__ == '__main__'

這個語句用于判斷當前模塊是否是直接運行的(而非被導入的)。它的作用:

  1. 防止模塊被導入時自動執行代碼:只有直接運行該文件時,if塊中的代碼才會執行
  2. 模塊測試:可以在if塊中編寫測試代碼
  3. 提高代碼重用性:既可作為模塊導入,也可直接運行

示例:

def some_function():print("This is a function")if __name__ == '__main__':print("This runs when executed directly")some_function()  # 測試代碼

當該文件被導入時,__name__會是模塊名;當直接運行時,__name__會是'__main__'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85111.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB提供的預訓練神經網絡

CNN 預訓練的神經網絡 Deep Learning Toolbox? provides various pretrained networks that have different sizes, speeds, and accuracies.

【PDF】Qt生成PDF文件,占用存儲小

在 Qt 項目中,如果你希望使用第三方開源庫來生成心電圖的 PDF 報告,并且要求占用磁盤空間最小,以下是一些推薦的選擇: 推薦的開源庫 PoDoFo 簡介:PoDoFo 是一個用于創建和操作 PDF 文件的 C 開源庫。它非常輕量級&…

系統架構設計師 1

第一章 緒論 系統架構設計師(System Architecture Designer)是項目開發活動中的關鍵角色之一。系統架構是系統的一種整體的高層次的結構表示,是系統的骨架和根基,其決定了系統的健壯性和生命周期的長短。 1.1 系統架構概述 1946年第一臺計算機&#x…

2023年面試記錄(base杭州)

阿里外包(通過) 一面: 1、react 常用hook 2、css的重繪和重排 后面如果進入還有兩輪 二面: 1、解決不同版本的兼容問題能句幾個例子嗎 2、FCP和 CLS 這兩個指標是什么意思能講下嗎 3、具體優化的動作是什么呢 4、放到cdn上為什么…

React 國際化方案最佳實踐調研

文章目錄 前言主流國際化庫對比分析翻譯資源管理策略語言切換方式與自動識別Next.js 中的國際化支持Page Router 模式(pages 目錄)App Router 模式(app 目錄) 多語言 SEO 與預渲染注意事項企業級多語言開發與協作流程建議 前言 整…

基于Python實現自然語言處理(主題層次的情感分類)

主題層次的情感分類 1 任務及數據集介紹 該項目作業的具體任務是來自于 BDCI2018-汽車行業用戶觀點主題及情感識別的題目。數據是網絡中公開的用戶對汽車相關內容的評價文本。此任務是對每條文本內容(即用戶評論)進行分析,確定該條評論中討…

SpringBoot 線程池 配置使用詳解

一、核心特性 Springboot 集成 支持 Async 注解,簡化異步方法調用。 參數可配置化 核心線程數、最大線程數、隊列容量、拒絕策略等均可通過配置調整。 生命周期管理 實現 Lifecycle 接口,支持線程池的啟動和關閉(如應用關閉時優雅終止任務…

Elasticsearch/OpenSearch MCP Quickstart

項目概述 elasticsearch-mcp-server 是一個基于 Model Context Protocol (MCP) 的服務器實現,提供了與 Elasticsearch 和 OpenSearch 交互的能力。該服務器允許用戶搜索文檔、分析索引以及管理集群,通過一系列工具函數實現這些功能。 項目結構 項目主…

《Elasticsearch 分布式搜索在聊天記錄檢索中的深度優化》

Elasticsearch 分布式搜索在聊天記錄檢索中的深度優化 引言 在現代聊天應用中,聊天記錄檢索面臨著數據量大、查詢復雜、實時性要求高的多重挑戰。以某社交平臺為例,其聊天記錄每天新增數千萬條,總數據量達百億級,用戶需要在海量…

CSS實現元素撐滿剩余空間的5種方法

CSS實現元素撐滿剩余空間的5種方法 🎨 在日常開發中,我們經常需要讓某個元素占據容器的剩余空間。這是一個常見的布局需求,比如側邊欄主內容區、頭部內容區底部等布局。本文將介紹5種不同的方法來實現這個需求,并分析各種方法的優…

[AI]從零開始的YOLO數據集增強教程

一、前言 不知道大家在訓練YOLO時有沒有遇到過這樣的情況,明明數據集已經準備了很多了,但是YOLO還是不認識某個物品,或者置信度低。那么有沒有辦法讓我們不制作新數據集的情況下讓代碼幫我們生成新的數據集來訓練模型呢?當然有&am…

軟件工程的相關名詞解釋

目錄 1. 軟件生命周期2.開源軟件3.軟件工程4.模塊化原則5.信息隱藏原則6.雙向追蹤7.原型8.軟件需求9.需求工程10.邊界類11.軟件實現(的任務)12.軟件缺陷13.回歸測試14.軟件β版15.軟件部署16.糾正性維護17.改善性維護18.適應性維護19.軟件邏輯老化 1. 軟…

2025.06.17【BUG】|多樣品VCF文件合并技巧及注意事項(以bcftools為例)

文章目錄 [toc]一、合并VCF的常用命令1.1 合并多個bgzip壓縮的VCF文件1.2 使用文件列表合并 二、合并前的準備與注意事項2.1 文件格式要求2.2 樣本名唯一性2.3 檢查文件模式匹配 三、常見報錯與解決方法3.1 報錯:Error: Duplicate sample names (sample1), use --fo…

包含30個APP客戶端UI界面的psd適用于旅游酒店項目

包含30個APP客戶端UI界面的psd適用于旅游酒店項目 此資源包含30個完全可編輯的psd界面組成。內容包括歡迎頁、登錄、注冊、首頁、搜索、側邊菜單、用戶中心、個人介紹、用戶空間、產品詳細信息、酒店預定、天氣情況等各種常用界面,您可以將其用于旅游酒店類的APP應用…

ArrayList源碼分析

目錄 ArrayList簡介 ArrayList和vector的區別(了解即可) ArrayList添加null值 ArrayList和LinkedList區別 ArrayList核心源碼解讀 ArrayList擴容機制分析 一步一分析ArrayList擴容機制 hugeCapacity()方法 System.arraycopy() Arrays.copyOf()方法 …

NX二次開發C#---通過Face找Edges,再通過Edges找Curve

文章介紹了一個名為AskFaceEdge的靜態方法,用于處理3D建模中的邊緣曲線生成。該方法通過NX Open API調用,主要功能是獲取指定面的邊緣并生成相應的曲線。方法接收兩個參數:faceTag(面標簽)和curveLoop(曲線…

設計模式筆記_創建型_工廠模式

1. 工廠模式簡介 工廠模式是一種創建型設計模式,主要用于創建對象實例。 它通過定義一個接口或抽象類來創建對象,而不是直接實例化具體類,從而將對象的創建過程與使用過程分離。 工廠模式通常分為兩種類型: 簡單工廠模式&#x…

2025.6.16總結

工作:今天閉環了個遺留問題。在做專項評估時寫得太簡單,這讓測試經理質疑你的測試質量。如果換位思考,你是測試經理,你該怎么去把握風險和保證產品的質量,就知道寫得太簡單,沒有可信度。 找開發看了下后臺…

記錄:安裝VMware、Ubuntu、ROS2

安裝了VMware,就能夠在Windows系統裝安裝Ubuntu,使用Linux系統。安裝了Ubuntu,就能在里面安裝ROS2,之后寫代碼控制機器人兒。 安裝VMware 我安裝的是16 pro【具體是vmware16.2.4】,下載網站:VMware Works…

將后端數據轉換為docx文件

使用docx npm install docx 按照注釋處理數據并轉換為對應的bolb數據流 <template><Button type"primary" click"handleDocxCreate">{{buttonTitle || "報告生成"}}</Button> </template><script> import {Doc…