4

おそらくばかげた質問ですが、Pythonが実際には浮動小数点数である文字列から整数を作成できないのはなぜか疑問に思いました。

>>> int(1.0)
1
>>> int(float('1.0'))
1

だが

>>> int('1.0')
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    int('1.0')
ValueError: invalid literal for int() with base 10: '1.0'

なぜそれが1つのステップで実行できないのかを誰かが明確にできますか?

4

2 に答える 2

15

なぜそれが1つのステップで実行できないのかを誰かが明確にできますか?

PythonのZenを引用すると、暗黙的よりも明示的の方が優れています。

なぜPythonは実際には浮動小数点数である文字列から整数を作成できないのか疑問に思いました。

Pythonの哲学に沿って、文字列に浮動小数点数が含まれていて、それをintに変換したい場合は、スペルを決めるのはあなたの責任です。言語はあなたの意図を二度と推測しようとはしません。

于 2013-02-28T09:53:30.057 に答える
7

についてのドキュメントから直接int

xが数値でない場合、またはbaseが指定されている場合、xは基数ベースの整数リテラルを表す文字列またはUnicodeオブジェクトである必要があります。

そして、基数ベースの整数リテラルの定義方法は次のとおりです。

longinteger    ::=  integer ("l" | "L")
integer        ::=  decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::=  nonzerodigit digit* | "0"
octinteger     ::=  "0" ("o" | "O") octdigit+ | "0" octdigit+
hexinteger     ::=  "0" ("x" | "X") hexdigit+
bininteger     ::=  "0" ("b" | "B") bindigit+
nonzerodigit   ::=  "1"..."9"
octdigit       ::=  "0"..."7"
bindigit       ::=  "0" | "1"
hexdigit       ::=  digit | "a"..."f" | "A"..."F"

ご覧のとおり.、字句定義には存在しません。

intおよびintegerリテラルの詳細

また、Pythonは動的型付けを採用しているのに対し、静的型付けの言語では、あなたが望むことは自然に達成可能であることにも言及する価値があります。

于 2013-02-28T09:56:33.050 に答える