Forward Slash (/) หมายถึงอาร์กิวเมนต์ทั้งหมดก่อนที่จะเป็นอาร์กิวเมนต์ตำแหน่งเท่านั้น มีการเพิ่มคุณสมบัติข้อโต้แย้งเฉพาะตำแหน่งใน python 3.8 หลังจากยอมรับPEP 570 เริ่มแรกมีการกำหนดสัญกรณ์นี้ในPEP 457 - สัญลักษณ์สำหรับสัญกรณ์สำหรับพารามิเตอร์เฉพาะตำแหน่ง
พารามิเตอร์ในการกำหนดฟังก์ชันก่อน Foraward slash (/) เป็นตำแหน่งเท่านั้นและพารามิเตอร์ที่ตามด้วย slash (/) สามารถเป็นชนิดใดก็ได้ตามไวยากรณ์ โดยที่อาร์กิวเมนต์ถูกแม็พกับพารามิเตอร์ตำแหน่งเท่านั้นโดยอิงตามตำแหน่งเมื่อเรียกใช้ฟังก์ชัน การส่งพารามิเตอร์ตำแหน่งอย่างเดียวด้วยคำหลัก (ชื่อ) ไม่ถูกต้อง
ลองทำตัวอย่างต่อไปนี้
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
ที่นี่ในพารามิเตอร์นิยามฟังก์ชันข้างต้น a และ b เป็นตำแหน่งอย่างเดียวในขณะที่ x หรือ y สามารถเป็นได้ทั้งตำแหน่งหรือคำหลัก
การเรียกใช้ฟังก์ชันต่อไปนี้ถูกต้อง
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
แต่การเรียกใช้ฟังก์ชันต่อไปนี้ไม่ถูกต้องซึ่งทำให้เกิดข้อยกเว้น TypeError ตั้งแต่ a, b จะไม่ถูกส่งเป็นอาร์กิวเมนต์ตำแหน่งผ่านแทนคำหลัก
foo(a=1.45, b=3.14, x=1, y=4)
TypeError: foo () ได้รับอาร์กิวเมนต์ตำแหน่งเท่านั้นที่ส่งผ่านเป็นอาร์กิวเมนต์คำหลัก: 'a, b'
ฟังก์ชั่นจำนวนมากที่สร้างขึ้นในไพ ธ อนยอมรับอาร์กิวเมนต์เท่านั้นตำแหน่งที่ผ่านการขัดแย้งโดยคำหลักไม่เหมาะสม ตัวอย่างเช่นฟังก์ชันในตัวlenยอมรับอาร์กิวเมนต์เพียงตำแหน่งเดียว (เท่านั้น) โดยที่การเรียก len เป็น len (obj = "hello world") ทำให้อ่านไม่ได้ให้ตรวจสอบ help (len)
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
พารามิเตอร์เฉพาะตำแหน่งทำให้ฟังก์ชั่น c / Library พื้นฐานง่ายต่อการบำรุงรักษา อนุญาตให้ชื่อพารามิเตอร์ของพารามิเตอร์ตำแหน่งเท่านั้นสามารถเปลี่ยนแปลงได้ในอนาคตโดยไม่มีความเสี่ยงในการแตกรหัสลูกค้าที่ใช้ API
สุดท้าย แต่ไม่ท้ายสุดพารามิเตอร์เฉพาะตำแหน่งทำให้เราสามารถใช้ชื่อของพวกเขาเพื่อใช้ในอาร์กิวเมนต์คำหลักที่มีความยาวผันแปรได้ ตรวจสอบตัวอย่างต่อไปนี้
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
พารามิเตอร์เฉพาะตำแหน่งจะอธิบายได้ดีกว่าที่นี่ที่ประเภทของอาร์กิวเมนต์ของฟังก์ชันในไพ ธ อน: พารามิเตอร์เฉพาะของตำแหน่ง
เพิ่มพารามิเตอร์ไวยากรณ์เฉพาะตำแหน่งอย่างเป็นทางการใน python3.8 ชำระเงินมีอะไรใหม่ python3.8 - อาร์กิวเมนต์เท่านั้นตำแหน่ง
PEP ที่เกี่ยวข้อง: PEP 570 - พารามิเตอร์เฉพาะตำแหน่ง Python เท่านั้น
/
โทเค็นเนื่องจาก "เป็นการดำเนินการแบบผกผันของ*
" แสดงว่า Python นั้นคลั่งไคล้นิดหน่อย มันเป็นการรวมตัวกัน