Python 中为何没有数字到字符串的自动转换?
程序员文章站
2022-04-25 13:32:56
...
print " I am " + 10 + "years old " will raise error . but it is ok in many other languages. Java,eg.
Python程序员的常见错误 里面也解释了这句话
对于 Python 这种强类型语言来说,没有数字到字符串的自动转换是很正常的事情
像其他可以实现数字到字符串的自动转换的语言有多可怕,给你上个图看看(图是人人上扒来的,不完全切合题意,不过也可以参考)
我要答一下了,很多人都很好奇,很多语言中中特别好用隐式转换:
我不是很了解Php和JavaScript,不过也用它们字符串和数字转换的特性写过不少利用漏洞的代码。
坐等熟悉它们的人告诉你这种自动转换有多坑。 Python是强类型的,因此不支持这个功能是很自然的,如果你使用Perl这样弱类型的语言,就会支持你这么做了。
其他的原因楼上都说的很多了,这种情况下比较好的方法,是使用格式化字符串或者字符串模板。 静态强类型效率高。
不过js不区分数字+和字符串+的自动转换,可以玩自定义新类型对象的黑魔法:
先说强弱类型。
我的感受:
强类型语言认为不同类型的值是不同的,弱类型语言认为不同类型但相关的值在多数场合下是相同的。
所以在 Python 中,
回复内容:
因为 Python 禁止跨类型的 (+),它只有- (+): int * int → int
- (+): string * string → string
- (+): int * str → ⊤
Explicit is better than implicit.
Python程序员的常见错误 里面也解释了这句话
只有在数字类型中才存在类型转换
在Python中,一个诸如123+3.145的表达式是可以工作的——它会自动将整数型转换为浮点型,然后用浮点运算。但是下面的代码就会出错了:
S = "42"
I = 1
X = S + I # 类型错误
这同样也是有意而为的,因为这是不明确的:究竟是将字符串转换为数字(进行相加)呢,还是将数字转换为字符串(进行联接)呢?在Python中,我们认为“明确比含糊好”(即,EIBTI(Explicit is better than implicit)),因此你得手动转换类型:
X = int(S) + I # 做加法: 43
X = S + str(I) # 字符串联接: "421"
对于 Python 这种强类型语言来说,没有数字到字符串的自动转换是很正常的事情
像其他可以实现数字到字符串的自动转换的语言有多可怕,给你上个图看看(图是人人上扒来的,不完全切合题意,不过也可以参考)
我要答一下了,很多人都很好奇,很多语言中中特别好用隐式转换:
echo 'Result:'.(1+2+3);
?>
python 是一门强类型语言,强类型自然有强类型的好处。我不是很了解Php和JavaScript,不过也用它们字符串和数字转换的特性写过不少利用漏洞的代码。
坐等熟悉它们的人告诉你这种自动转换有多坑。 Python是强类型的,因此不支持这个功能是很自然的,如果你使用Perl这样弱类型的语言,就会支持你这么做了。
其他的原因楼上都说的很多了,这种情况下比较好的方法,是使用格式化字符串或者字符串模板。 静态强类型效率高。
不过js不区分数字+和字符串+的自动转换,可以玩自定义新类型对象的黑魔法:
({valueOf:function(){return 1;}}+{valueOf:function(){return 1;}})//猜猜等于几?
题目本身只涉及强弱类型和字符串连接,不过有回答把问题扩展到 print/echo 以及运算符了。先说强弱类型。
我的感受:
强类型语言认为不同类型的值是不同的,弱类型语言认为不同类型但相关的值在多数场合下是相同的。
所以在 Python 中,
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: extjs每个组件要设置唯一的ID否则会出错_extjs
下一篇: 用ps创建error水晶小图标
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论