ฉันมีฟังก์ชั่นในหลามที่สามารถกลับมาได้หรือ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