ส่วนใหญ่ Idiomatic ทาง Denote ว่างระบุชื่อไม่ฟังก์ชัน?

0

คำถาม

ในโครงการล่าสุดของฉันฉันเจอเป็น จริงใจ เหตุผลที่จะต้องมีพารามิเตอร์ซึ่งเป็นยอมรับ functionกับเป็นค่าปริยาย.

มันดูเหมือนว่าเรื่องนี้ไม่สนใจในคอนเท็กซ์.

def foo(func: Callable[[], None]) -> None:
    ...

ฉันเริ่มคิดว่าเป็นเพื่อตั้งค่าปริยายเพื่อ lambda: None. แสดงว่าค่าปริยายคือฟังก์ชันนั้นไม่ยอมรับพารามิเตอร์และกลับมา None. i.e.

def foo(func: Callable[[], None] = lambda: None) -> None:
        ...

หลังจากบางคนคิดว่าฉันคิดว่า lambda: ... จะยังไปที่จุดข้ามเพราะฉันเจอ lambda: None ต้องดูหน่อยแปลก i.e.

def foo(func: Callable[[], None] = lambda: ...) -> None:
        ...

คำถามของคุณคือ ที่ของพวกนี้คือกดีขึ้นไหม? ฉันยังเปิดรับคำแนะนำด้านนอกของพวกนี้สองคน

แก้ไข:ใช้ Callable เพื่อประเภทข้อแนะนำที่พารามิเตอร์. ที่สองตัวอย่างเช่นที่จริงแล้วจะได้ไม่-ไม่มีค่าซึ่งมันไม่จริงสำคัญตั้งแต่อยู่ในคอนเท็กซ์กลับคืนค่าเป็นไม่เคย--อย่างไรก็ตามที่น่าจดจำหรวามขัดแย้งด้วย

1

คำตอบที่ดีที่สุด

0

ยังไงเรื่อง:

from typing import Callable


def foo(func: Callable) -> None:
    ...

เห็นเอกสารอยู่ที่นี่ https://docs.python.org/3/library/typing.html#typing.Callable

โปรดสังเกตว่ามันมีสำคัญวามแตกต่างระหว่างสองคนนี้ตัวอย่างคุณให้:

def foo(func: function) -> None:
    ...


def foo(func: function = lambda: ...) -> None:
    ...

ในคดีแรก(สมมุติว่า function ถูกกำหนดบางอย่างอย่าง Callableมันไม่มีค่าปริยายแล้วผ่านไปเป็นค่าคงจะต้องการ.

ในกรณีที่เป็นประเภทเดียวกันแต่มันมีค่าปริยายแล้วผู้โทรนั้นไม่ต้องให้หนึ่ง พวกเขาทำให้คนแตกต่างกันมานะไมเคิลฟังก์ชัน.

ที่มีอัตราการคุณจริงๆถามความคิดเห็นเกี่ยวกับรูปแบบตั้งแต่คุณใช้อยู่แล้ว Ellipsis เป็นทางเลือกที่จะมองผ่านฉันรู้สึกนี่คือ preferable อกตัวเลือก:

def foo(func: Callable = lambda: ...) -> None:
    ...

ถึงแม้สมัยนี้ค่อนข้างจะไร้ประโยชน์ตั้งแต่คุณฟังก์ชันในแบบฟอร์มไม่แม้แต่จะโทรหา funcดังนั้นในกรณีที่เป็นค่าปริยายนค่าพารามิเตอร์นั่นน้อยมาก,เป็นคนประเภทที่จะถูกในข้อบังคับการกำหนดไว้แล้ว

2021-11-13 04:12:32

ที่แรกบล็อกรหัสเป็นแค่แนะนำฟังก์ชันที่ต้องเป็นค่าปริยายสำหรับพารามิเตอร์ของมัน. ฉันสามารถลบมันสำหรับความชัดเจนถ้าคุณคิดว่านั่นมันดีกว่า
Cresht

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................