Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
280 views
in Technique[技术] by (71.8m points)

python - Why bool and int are not considered as a type error when str and float is required?

When using mypy and pyre-check to check type errors of the following code, neither produces an error:

from typing import List, Union

tlist: List[Union[str, float]] = [False, int(12)]

Just curious why is that?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

bool is a subclass of int, which means they are both natural numbers. Natural numbers are a subset of real numbers, so they are acceptable where a float is acceptable.

That int is acceptable where float is specified is explicitly called out in PEP 484 -- Type Hints:

Rather than requiring that users write import numbers and then use numbers.Float etc., this PEP proposes a straightforward shortcut that is almost as effective: when an argument is annotated as having type float, an argument of type int is acceptable[.]

  • The str component in your Union[] doesn't play any role here; you could remove it and still the assignment would be accepted. It's purely the float type annotation that makes 12 and False acceptable values.

  • The int() call is entirely redundant, the 12 literal syntax already produces an int object.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...