Python与Julia函数计算差异:数字各位和结果为何不同?
Python与Julia函数计算差异的原因解析
嘿,这个问题的核心其实是两种语言对「字符转整数」的逻辑设计完全不同,我来给你掰扯清楚:
先看Python的行为
在Python 3里,int('1')这个操作的作用是解析字符所代表的数字值——它会把字符串形式的数字(比如字符'1')转换成对应的整数1。所以当你执行sum(map(int, str(123456789)))时:
str(N)把数字转成字符串"123456789"map(int, ...)逐个把每个字符('1'、'2'...'9')转成对应的整数1、2...9- 最后求和就是
1+2+3+...+9=45,完全符合预期。
再看Julia的行为
而在Julia里,Int(ch)(比如Int('1'))的作用是获取字符的ASCII码值,而不是解析它代表的数字。字符'1'的ASCII码是49,'2'是50,一直到'9'是57。那你执行的sum([Int(ch) for ch in "$N"])其实是把这些ASCII码加起来:49+50+51+52+53+54+55+56+57 = 477,这就是你得到这个结果的原因。
Julia里的正确写法
如果想在Julia里实现和Python一样的效果,要把字符解析成对应的数字,有两种常用方式:
- 使用
parse(Int, ch)来解析字符代表的数字:N = 123456789 sum(parse(Int, ch) for ch in "$N") # 输出45 - 利用字符ASCII码的连续性,用
ch - '0'计算(因为'0'的ASCII码是48,'1'-'0'=1,以此类推):sum(ch - '0' for ch in "$N") # 同样输出45
总结
本质区别在于:
- Python的
int()函数对字符输入,做的是数字解析 - Julia的
Int()构造函数对字符输入,做的是获取字符的底层编码值
这是两种语言在类型转换设计上的不同选择,搞清楚这点就不会再踩坑啦~
内容的提问来源于stack exchange,提问作者Lijo Joseph
相关产品推荐
相关产品推荐

