python禁止位置傳參函數(shù)詳解
python禁止位置傳參函數(shù)
這種函數(shù)定義方式使用了 Python 3.x 中的關鍵字參數(shù)(keyword-only arguments)的特性,通過在參數(shù)列表中使用 *
符號作為分隔符,來明確指示該函數(shù)之后的參數(shù)必須使用關鍵字(即參數(shù)名)來傳遞,而不能通過位置(即按順序)來傳遞。
在函數(shù)定義中:
def init( *, args: List[str] | None = None, context: Context = None, domain_id: int | None = None, signal_handler_options: SignalHandlerOptions | None = None ) -> None
所有的參數(shù)(args
, context
, domain_id
, signal_handler_options
)都是關鍵字參數(shù),這意味著在調用這個函數(shù)時,必須顯式地使用參數(shù)名來指定每個參數(shù)的值,而不能僅僅通過位置來傳遞它們。
例如:
# 正確的調用方式 init(args=["some", "args"], context=some_context, domain_id=123, signal_handler_options=options) # 錯誤的調用方式(會引發(fā)TypeError) init(["some", "args"], some_context, 123, options)
在第二種調用方式中,因為沒有使用參數(shù)名,Python 解釋器無法將提供的值正確地映射到函數(shù)的參數(shù)上,因此會拋出一個 TypeError
。
這種設計在函數(shù)需要很多參數(shù),或者參數(shù)的順序可能會讓調用者混淆時特別有用。
它增加了代碼的可讀性和健壯性,因為調用者必須清楚地指明每個參數(shù)的值。
python傳參時避免參數(shù)改變
import os import collections import math import sys # 我們知道,用python寫遞歸,在進行傳參時,不像C++,參數(shù)的傳遞是值傳遞的時候,并不改變參數(shù)實際的值;只有使用引用傳遞時,才會改變參數(shù), # 但是在Python中,參數(shù)的傳遞是分為可變類型和不可變類型的,比如list就是可變類型,tuple就是不可變類型,下面就介紹一下兩種方法來避免參數(shù)的改變。 # 第一種就是使用如下面v[:]來對list進行操作 """ def main(v, cnt): if cnt == 5: v.append(cnt) print(v) return v.append(cnt) main(v[:], cnt+1) print(v) return """ """ v = [1, 2, 3] main(v[:], 4) """ # 第二種就是傳參數(shù)的時候使用tuple,在函數(shù)里面,把tuple變?yōu)閘ist,可進行修改。 """def main(v, cnt): if cnt == 5: tmp = list(v) tmp.append(cnt) print(tmp) return tmp=list(v) tmp.append(cnt) main(tuple(tmp), cnt+1) print(tmp) return v=[1,2,3] main(tuple(v),4)"""
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python使用Beautiful Soup爬取豆瓣音樂排行榜過程解析
這篇文章主要介紹了Python使用Beautiful Soup爬取網(wǎng)頁過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08python使用threading.Condition交替打印兩個字符
這篇文章主要為大家詳細介紹了python使用threading.Condition交替打印兩個字符,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05在Python中用has_key()方法查找鍵是否存在的教程
這篇文章主要介紹了在Python中用has_key()方法查找鍵是否存在的教程,是Python入門學習中的基礎知識,需要的朋友可以參考下2015-05-05