ฉันมีฟังก์ชั่นในหลามที่สามารถกลับมาได้หรือbool
list
มีวิธีการระบุประเภทการคืนสินค้าโดยใช้คำใบ้ประเภทหรือไม่
ตัวอย่างเช่นนี่เป็นวิธีที่ถูกต้องหรือไม่
def foo(id) -> list or bool:
...
ฉันมีฟังก์ชั่นในหลามที่สามารถกลับมาได้หรือbool
list
มีวิธีการระบุประเภทการคืนสินค้าโดยใช้คำใบ้ประเภทหรือไม่
ตัวอย่างเช่นนี่เป็นวิธีที่ถูกต้องหรือไม่
def foo(id) -> list or bool:
...
คำตอบ:
จากเอกสารประกอบ
ชั้น
typing.Union
ประเภทสหภาพ; ยูเนี่ยน [X, Y] หมายถึง X หรือ Y
ดังนั้นวิธีที่เหมาะสมในการแสดงชนิดข้อมูลส่งคืนมากกว่าหนึ่งประเภทคือ
from typing import Union
def foo(client_id: str) -> Union[list,bool]
แต่โปรดทราบว่าการพิมพ์ไม่ได้ถูกบังคับใช้ Python ยังคงเป็นภาษาที่พิมพ์แบบไดนามิก ไวยากรณ์คำอธิบายประกอบได้รับการพัฒนาขึ้นเพื่อช่วยในระหว่างการพัฒนาโค้ดก่อนที่จะเผยแพร่สู่การผลิต ในฐานะ PEP 484 กล่าวว่า "ไม่มีการตรวจสอบประเภทเกิดขึ้นขณะใช้งานจริง"
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
อย่างที่คุณเห็นฉันกำลังผ่านค่า int และคืนค่า str อย่างไรก็ตาม__annotations__
จะถูกตั้งค่าเป็นค่าที่เกี่ยวข้อง
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
โปรดไปที่PEP 483เพื่อดูคำแนะนำเพิ่มเติมเกี่ยวกับประเภท ดูเพิ่มเติมคำใบ้ประเภทใน Python 3.5คืออะไร
โปรดทราบว่าสิ่งนี้มีให้สำหรับPython 3.5ขึ้นไปเท่านั้น นี้เป็นที่กล่าวถึงอย่างชัดเจนในPEP 484
คำแถลงdef foo(client_id: str) -> list or bool:
เมื่อประเมินมีค่าเท่ากับ
def foo(client_id: str) -> list:
และจะไม่ทำสิ่งที่คุณต้องการ
วิธีดั้งเดิมในการอธิบายคำใบ้ประเภท "A หรือ B" คือการรวมกัน (ขอบคุณ Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
ฉันไม่ต้องการที่จะเป็น "ทำไมคุณต้องการทำเช่นนี้ต่อไป" คนที่แต่งตัวประหลาด แต่อาจมี 2 ประเภทที่กลับมาไม่ใช่สิ่งที่คุณต้องการ:
หากคุณต้องการส่งคืนบูลเพื่อระบุข้อผิดพลาดพิเศษบางประเภทให้พิจารณาใช้ข้อยกเว้นแทน ถ้าคุณต้องการคืนค่าบูลเป็นค่าพิเศษบางทีรายการว่างอาจเป็นการแสดงที่ดี คุณยังสามารถระบุได้ว่าNone
สามารถส่งคืนได้ด้วยOptional[list]
ในกรณีที่ทุกคนลงจอดที่นี่เพื่อค้นหา "วิธีระบุชนิดของค่าส่งคืนหลายรายการ" ให้ใช้ Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
ข้อมูลเพิ่มเติม: https://code-examples.net/en/q/2651e60