Python-函數參數

在這里插入圖片描述

1. 參數基礎

函數參數是向函數傳遞數據的主要方式,Python 提供了多種參數傳遞機制。

基本用法

def greet(name):  # name 是形式參數print(f"Hello, {name}!")greet("Alice")  # "Alice" 是實際參數

使用場景:當函數需要外部數據來完成其操作時

2. 參數類型

2.1 位置參數 (Positional Arguments)

最常見的參數類型,按位置順序傳遞

def power(base, exponent):return base ** exponentprint(power(2, 3))  # 8

最佳實踐

  • 將最重要的參數放在前面
  • 避免超過5個位置參數,否則考慮使用對象或字典

2.2 關鍵字參數 (Keyword Arguments)

通過參數名指定,不依賴位置

print(power(exponent=3, base=2))  # 8

優勢

  • 提高代碼可讀性
  • 允許跳過某些參數

2.3 默認參數 (Default Arguments)

定義函數時指定默認值

def power(base, exponent=2):  # exponent默認為2return base ** exponentprint(power(3))  # 9
print(power(3, 3))  # 27

重要規則

  • 默認參數只計算一次(對于可變對象要特別注意)
  • 默認參數應放在參數列表最后

2.4 可變參數

2.4.1 *args - 可變位置參數

接收任意數量的位置參數,打包為元組

def sum_all(*numbers):return sum(numbers)print(sum_all(1, 2, 3))  # 6

使用場景:不確定需要接收多少參數時

2.4.2 **kwargs - 可變關鍵字參數

接收任意數量的關鍵字參數,打包為字典

def print_info(**info):for key, value in info.items():print(f"{key}: {value}")print_info(name="Alice", age=25)

最佳實踐:常用于包裝函數或配置參數傳遞

3. 參數解包

3.1 列表/元組解包 (*)

def func(a, b, c):print(a, b, c)args = [1, 2, 3]
func(*args)  # 1 2 3

3.2 字典解包 (**)

kwargs = {'a': 1, 'b': 2, 'c': 3}
func(**kwargs)  # 1 2 3

應用場景:從其他函數獲取參數后傳遞

4. 參數傳遞機制

Python 使用"對象引用傳遞"(按共享傳參)

def modify_list(lst):lst.append(4)  # 修改會影響原對象my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # [1, 2, 3, 4]

重要特性

  • 不可變對象(數字、字符串、元組)表現為"按值傳遞"
  • 可變對象(列表、字典)表現為"按引用傳遞"

5. 類型提示 (Python 3.5+)

def greeting(name: str, age: int = 18) -> str:return f"{name} is {age} years old"

優勢

  • 提高代碼可讀性
  • IDE 能提供更好的代碼補全和檢查
  • 可使用 mypy 進行靜態類型檢查

6. 參數最佳實踐

  1. 保持參數數量合理:理想情況下不超過5個
  2. 使用關鍵字參數提高可讀性,特別是布爾參數
  3. 避免可變默認參數:默認值應為不可變對象
  4. 合理使用類型提示:特別是公共API
  5. 參數順序:位置參數 → 默認參數 → *args → **kwargs

7. 高級技巧

僅限關鍵字參數

def func(a, b, *, c, d):  # c和d必須用關鍵字傳遞passfunc(1, 2, c=3, d=4)  # 正確
func(1, 2, 3, 4)      # 錯誤

參數注解

def func(a: 'description', b: int = 5) -> 'return description':pass

應用:文檔生成或參數驗證框架

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

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

相關文章

《在 Ubuntu 22.04 上安裝 CUDA 11.8 和 Anaconda,并配置環境變量》

安裝 CUDA 11.8 和 Anaconda 并配置環境變量 在本教程中,我們將介紹如何在 Ubuntu 22.04 上安裝 CUDA 11.8 和 Anaconda,并配置相應的環境變量。我們還將配置使用 阿里云鏡像源 來加速軟件包更新。以下是具體步驟。 步驟 1:更新軟件源 首先…

Ubuntu環境基于Ollama部署DeepSeek+Open-Webui實現本地部署大模型-無腦部署

Ollama介紹 Ollama是一款簡單好用的模型部署工具,不僅可以部署DeepSeek,市面上開源模型大部分都可以一鍵部署,這里以DeepSeek為例 官網 DeepSeek 版本硬件要求 安裝Ollama 環境 sudo apt update sudo apt install curl sudo apt install lsof1.命令一鍵安裝 在官網點擊…

Angular 項目 PDF 批注插件庫在線版 API 示例教程

本文章介紹 Angular 項目中 PDF 批注插件庫 ElasticPDF 在線版 API 示例教程,API 包含 ① 導出批注后PDF數據;② 導出純批注 json 數據;③ 加載舊批注;④ 切換文檔;⑤ 切換用戶;⑥ 清空批注 等數據處理功能…

Spring Boot 中利用 Jasypt 實現數據庫字段的透明加密解密

1. 引言 1.1 什么是 Jasypt Jasypt(Java Simplified Encryption)是一個用于簡化 Java 應用程序中加密操作的庫。 1.2 為什么使用 Jasypt 簡化加密操作:提供簡單的 API 進行加密和解密。透明加密:自動處理加密和解密過程,無需手動干預。多種加密算法:支持多種加密算法,…

Linux的: /proc/sys/net/ipv6/conf/ 筆記250405

Linux的: /proc/sys/net/ipv6/conf/ /proc/sys/net/ipv6/conf/ 是 Linux 系統中用于 動態配置 IPv6 網絡接口參數 的核心目錄。它允許針對不同網絡接口(如 eth0、wlan0)或全局設置(all)調整 IPv6 協議棧的行為。 它通過虛擬文件系…

Spring Cloud 框架為什么能處理高并發

Spring Cloud框架能夠有效處理高并發場景,核心在于其微服務架構設計及多組件的協同作用,具體機制如下: 一、分布式架構設計支撐高擴展性 服務拆分與集群部署 Spring Cloud通過微服務拆分將單體系統解耦為獨立子服務,每個服務可獨…

無人機智慧路燈桿:智慧城市的‘全能助手’

在城市發展的進程中,智慧路燈桿作為智慧城市建設的關鍵載體,正逐步從傳統的照明設備轉型為集多種功能于一體的智能基礎設施。無人機與智慧路燈桿的創新性融合,為城市管理和服務帶來了全新的變革與機遇。 一、無人機智慧路燈桿的功能概述 照…

Libevent UDP開發指南

UDP 與 TCP 的核心區別 無連接:不需要建立/維護連接 不可靠:不保證數據包順序和到達 高效:頭部開銷小,沒有連接管理負擔 支持廣播/多播:可以向多個目標同時發送數據 一、基礎UDP服務器實現 1. 創建 UDP 套接字 #include <event2/event.h> #include <event2/lis…

基于阿里云可觀測產品構建企業級告警體系的通用路徑與最佳實踐

前言 1.1 日常生活中的告警 任何連續穩定運行的生產系統都離不開有效的監控與報警機制。通過監控&#xff0c;我們可以實時掌握系統和業務的運行狀態&#xff1b;而報警則幫助我們及時發現并響應監控指標及業務中的異常情況。 在日常生活中&#xff0c;我們也經常遇到各種各樣…

智能多媒體處理流水線——基于虎躍辦公API的自動化解決方案

在內容爆炸的時代&#xff0c;多媒體文件處理&#xff08;圖片壓縮、視頻轉碼、音頻降噪&#xff09;已成為內容生產者的日常挑戰。本文將演示如何基于虎躍辦公的多媒體處理API&#xff0c;構建自動化處理流水線&#xff0c;實現&#xff1a; 批量文件智能分類格式自動轉換質量…

01-STM32(介紹、工具準備、新建工程)p1-4

文章目錄 工具準備和介紹硬件設備stm32簡介和arm簡介stm32簡介STM32命名規則STM32選型STM32F103C8T6最小系統板引腳定義STM32啟動配置STM32最小系統電路ARM簡介 軟件安裝注冊器件支持包安裝ST-LINK驅動安裝USB轉串口驅動 新建工程創建stm32工程STM32工程編譯和下載型號分類及縮…

【ABAP】REST/HTTP技術(一)

1、概念 1.1、SAP 如何提供 Http Service 如果要將 SAP 應用程序服務器 &#xff08;application server&#xff09;作為 http 服務提供者&#xff0c;需要定義一個類&#xff0c;這個類必須實現 IF_HTTP_EXTENSION 接口。IF_HTTP_EXTENSION 接口只有一個方法 HANDLE_REQUEST。…

[實戰] linux驅動框架與驅動開發實戰

linux驅動框架與驅動開發實戰 Linux驅動框架與驅動開發實戰一、Linux驅動框架概述1.1 Linux驅動的分類1.2 Linux驅動的基本框架 二、Linux驅動關鍵API詳解2.1 模塊相關API2.2 字符設備驅動API2.3 內存管理API2.4 中斷處理API2.5 PCI設備驅動API 三、Xilinx XDMA驅動開發詳解3.1…

1. hadoop 集群的常用命令

1.上傳文件 1)hadoop fs -put words.txt /path/to/input/ 2)hdfs dfs -put words.txt /path/wc/input/ 2.獲取hdfs中的文件 hadoop fs -get /path/wc/input/words.txt 3.合并下載多個文件 hadoop fs -getmerge /path/wc/input/words.txt /path/wc/input/words2.txt 4.查…

Keepalived+LVS+nginx高可用架構

注明&#xff1a;所有軟件已經下載好&#xff0c;防火墻和SELinux已經全部關閉 一.搭建NFS 1.服務端 1.創建文件 [rootnfs ~]# mkdir -p /nfs/data 2、修改權限 [rootnfs ~]# chmod orw /nfs/data 3、寫配置文件 [rootnfs ~]# cat /etc/exports /nfs/data 192.168.111.118(r…

深度學習處理文本(13)

我們使用基于GRU的編碼器和解碼器來在Keras中實現這一方法。選擇GRU而不是LSTM&#xff0c;會讓事情變得簡單一些&#xff0c;因為GRU只有一個狀態向量&#xff0c;而LSTM有多個狀態向量。首先是編碼器&#xff0c;如代碼清單11-28所示。 代碼清單11-28 基于GRU的編碼器 fro…

HashMap 底層原理詳解

1. 核心數據結構 JDK 1.7 及之前&#xff1a;數組 鏈表 JDK 1.8 及之后&#xff1a;數組 鏈表/紅黑樹&#xff08;鏈表長度 ≥8 時轉紅黑樹&#xff0c;≤6 時退化為鏈表&#xff09; // JDK 1.8 的 Node 定義&#xff08;鏈表節點&#xff09; static class Node<K,V&g…

使用MySQL時出現 Ignoring query to other database 錯誤

Ignoring query to other database 錯誤 當在遠程連接軟件中輸入MySQL命令出現該錯誤 導致錯誤原因是&#xff1a;登錄mysql時賬戶名沒有加上u 如果出現該錯誤&#xff0c;退出mysql&#xff0c;重新輸入正確格式進入即可&#xff01;

哈爾濱工業大學:大模型時代的具身智能

大家好&#xff0c;我是櫻木。 機器人在工業領域&#xff0c;已經逐漸成熟。具身容易&#xff0c;智能難。 機器人-》智能機器人&#xff0c;需要自主能力&#xff0c;加上通用能力。 智能機器人-》人類&#xff0c;這個階段就太有想象空間了。而最受關注的-類人機器人。 如何…

Javascript代碼壓縮混淆工具terser詳解

原始的JavaScript代碼在正式的服務器上,如果沒有進行壓縮,混淆,不僅加載速度比較慢,而且還存在安全和性能問題. 因此現在需要進行壓縮,混淆處理. 處理方案簡單描述一下: 1. 使用 terser 工具進行 安裝 terser工具: # npm 安裝 npm install terser --save-dev# 或使用 yarn 安…