作为浮点数的字符串的Python int()
很可能这是一个愚蠢的问题,但我想知道为什么python不能从实际上是浮点数的字符串中生成整数作为浮点数的字符串的Python int(),python,Python,很可能这是一个愚蠢的问题,但我想知道为什么python不能从实际上是浮点数的字符串中生成整数 >>> int(1.0) 1 >>> int(float('1.0')) 1 但是 >>int('1.0') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 整数('1.0') ValueError:基数为10的int()的文本无效:“1.0” 有人能澄清为什么不能一步到位吗 有人能澄清为什么不能一步到位吗 引用Python的禅宗: 我想知道为什么pytho
>>> int(1.0)
1
>>> int(float('1.0'))
1
但是
>>int('1.0')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
整数('1.0')
ValueError:基数为10的int()的文本无效:“1.0”
有人能澄清为什么不能一步到位吗
有人能澄清为什么不能一步到位吗
引用Python的禅宗:
我想知道为什么python不能从实际上是浮点数的字符串中生成整数
>>> int(1.0)
1
>>> int(float('1.0'))
1
根据Python的原理,如果字符串包含一个浮点数,然后您希望将其转换为int,那么您有责任将其解释清楚。这种语言不会试图猜测你的意图。直接从关于
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"
如您所见,
不存在于词汇定义中
更多关于和
同样值得一提的是,您的愿望在的语言中自然是可以实现的,而Python采用的是我的意思是关于它如何存储在内存/硬件中:)@TapajitDey:问题与事物如何存储在内存/硬件中无关。选择不允许这种隐式转换是Python设计者深思熟虑的决定。@TapajitDey Python是一种高级解释语言,它如何在内部表示数据是一个实现细节。你为什么要依赖它?我想这是真的,但只是感觉有点局限你确定这是相关的吗?您引用的是Python语法规则,它与
int
函数接受的参数不完全对应。@Kos我引用的是整型文字int
接受数字或表示整数的字符串/unicode对象作为旁注,对于对lexer感兴趣的人来说,是一个有趣的读物