網站首頁 編程語言 正文
前言
python參數類型和參數傳遞形式多樣,相對于其他語言python使用會更加靈活。它傳參形式一般分為兩種:位置傳參,關鍵字傳參。傳參形式是相對于實參而言,在函數調用時使用。參數類型一般也分為兩種:默認參數,不定長參數。參數類型是相對形參而言,在函數創建時定義。
位置傳參
位置傳參,我們經常使用的一種函數傳參形式,它根據實參的位置傳遞給對應位置的形式參數。在與其他傳參形式混合使用時,必須優先輸入位置參數。
def func(a, b, c): print(a, b, c) # 位置參數 if __name__ == '__main__': func(1, 6, 7) # 打印結果是1 6 7 位置一一對應 func(6, 1, 7) # 打印結果是6 1 7 # func(6, 1) # 實參與形參數量必須一致 # func(6, 1, 7, 9) # 不能多也不能少
關鍵字傳參
關鍵字傳參,根據形式參數的名字來進行對應的賦值。
def func(a, b, c): print(a, b, c) # 關鍵字參數 if __name__ == '__main__': func(1, b=6, c=7) # 打印結果是1 6 7 func(c=3, b=1, a=7) # 打印結果是7 1 3 # func(c=2, b=3) # 不能少賦值 # func(c=2, b=3,a=6,c=5) # 不能多賦值 # func(c=2, b=3,a=5,qq=3) # 也不能無關賦值 # func(1, b=6, 7) # 與位置傳參混合使用時,必須位置參數在前,而且不能交替使用
默認參數
默認參數,就是形參會有個默認值,如果有新值傳入就使用新值,否則使用默認值。形參使用默認參數時同樣需要注意位置,必須寫在位置參數后面(其實不能叫位置參數,但是為了理解就把沒有賦值的普通形參叫做位置參數),否則會報錯。如下方ab必須寫在c后面。
# 默認參數必須要寫在右側 def func(a, b=5, c=3): print(a, b, c) # 默認參數 if __name__ == '__main__': func(1) # 打印的結果是 1 5 3 func(1, 6) # 打印的結果是 1 6 3 func(1, 2, 7) # 打印結果是1 2 7 func(b=1, a=4) # 打印結果是4 1 3
不定長參數
不定長參數有兩種表現形式。
- 在形參前面加個*(*args),表示不定長元組形參,可以接收所有通過位置傳參進來的實參,將其存入元組里面。
- 在形參前面加兩個*(**kwargs),表示不定長字典形參,可以接收所有通過關鍵字傳參進來的實參,將其存入字典里面。
# 不定長參數 def func(*args, **kwargs): print(args) print(kwargs) if __name__ == '__main__': func(1, 4, 8, 7, a=5, h=6, l=15) # 注意實參形參順序要對應
結果
(1, 4, 8, 7) ?# 元組
{'a': 5, 'h': 6, 'l': 15} ?# 字典
混合使用問題
創建時
def func1(a, b=5, *args, c=7, **kwargs): print(a, b, args, c, kwargs)
我們先給它們一個稱呼方便引用。就稱a為普通參數,b為默認參數,*args為可變參數(因為它能接收多個實參),**kwargs為可變關鍵字參數(因為它能接收多個通過關鍵字傳參進來的實參)。
- 普通參數必須寫在最前面(寫在其他類型參數前面)
- 可變關鍵字參數必須寫在最后面(寫在其他參數類型后面)
- 可變參數與可變關鍵字參數只能出現一次。
引用時
位置傳參必須寫在關鍵字參數前面,他們倆不能交替使用。關鍵字傳參什么時候出現合適?出現在可變參數之后,相當于終止條件。
def func1(a, b=5, *args, c=7, **kwargs): print(a, b, args, c, kwargs, sep='\n') if __name__ == '__main__': func1(5, 6, 8, 7, 1, 5, 6, 8, c=4, r=2, s=3)
?結果為
5
6
(8, 7, 1, 5, 6, 8)
4
{'r': 2, 's': 3}
總結
原文鏈接:https://blog.csdn.net/lishuaigell/article/details/122663663
相關推薦
- 2022-05-20 ElasticSearch 7.X系列之: 檢索性能優化實戰指南
- 2021-12-12 C/C++?Qt?MdiArea?多窗體組件應用教程_C 語言
- 2022-04-19 C#中IntPtr類型的具體使用_C#教程
- 2022-06-04 C++求解二叉樹的下一個結點問題_C 語言
- 2023-03-20 C#如何讓winform程序中的輸入文本框保留上次的輸入_C#教程
- 2022-09-13 fastlane自動化打包iOS?APP過程示例_IOS
- 2022-04-12 C++中菱形繼承的解釋與處理詳解_C 語言
- 2022-04-30 C#操作DataGridView獲取或設置當前單元格的內容_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支