มันไม่ได้เป็นผู้ประกอบการเป็นเช่นนี้จึงไม่ได้จริงๆมีชื่อ แต่มันถูกกำหนดให้เป็น "กฎประโยค" ดังนั้นควรเรียกว่า:
- "อาร์กิวเมนต์คำหลักกำลังคลายไวยากรณ์"
หากคุณมีรายการของการขัดแย้งที่*args
ก็เรียกว่า"ข้อโต้แย้งเอาออก"ในลักษณะเดียวกัน**kwargs
ที่เรียกว่า"การโต้แย้งคำหลักเอาออก"
หากคุณใช้มันในทางด้านซ้ายมือของ=
ในขณะที่a, *middle, end = my_tuple
คุณจะบอกว่า"tuple เอาออก"
โดยรวมมีอาร์กิวเมนต์ (พารามิเตอร์เดียว) สามประเภท:
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
*args
อาร์กิวเมนต์เรียกว่า "พารามิเตอร์ตำแหน่งตัวแปร" และ**kwargs
เป็น "คำหลักพารามิเตอร์ตัวแปร" ไม่สามารถระบุอาร์กิวเมนต์ที่เป็นคำหลักเท่านั้นในตำแหน่งเนื่องจากพารามิเตอร์ตำแหน่งตัวแปรจะรับอาร์กิวเมนต์ทั้งหมดที่คุณผ่าน
ส่วนใหญ่สามารถพบได้ใน PEPs 0362และ3102เช่นเดียวกับในส่วนFlow Controlของเอกสาร ควรสังเกตว่าฟังก์ชันลายเซ็นวัตถุ PEP เป็นเพียงร่างและคำศัพท์อาจเป็นเพียงความคิดของคนคนหนึ่ง แต่พวกเขาเป็นเงื่อนไขที่ดีอยู่แล้ว :)
ดังนั้น*
และ**
ข้อโต้แย้งเพียงแกะโครงสร้างข้อมูลที่เกี่ยวข้อง:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]: Iterables เป็นวัตถุที่ใช้__iter__()
วิธีการและแมปเป็นวัตถุที่ใช้และkeys()
__getitem__()
วัตถุใด ๆ ที่สนับสนุนโปรโตคอลนี้จะถูกเข้าใจโดยผู้สร้างtuple()
และdict()
เพื่อให้พวกเขาสามารถใช้สำหรับการเปิดออกอาร์กิวเมนต์