总结
豆包 AI 助手文章总结

Python 中为何没有数字到字符串的自动转换?

php中文网
发布: 2016-06-06 16:24:10
原创
1823人浏览过

print " I am " + 10 + "years old " will raise error . but it is ok in many other languages. Java,eg.

回复内容:

因为 Python 禁止跨类型的 (+),它只有
  1. (+): int * int → int
  2. (+): string * string → string
而没有
  • (+): int * str → ⊤
JavaScript 和 PHP 都允许 (+) 做跨类型的计算,JavaScript 使用 num * str → str,PHP 使用 num * str → num。 The Zen of Python里面有这么一句嘛
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 这种强类型语言来说,没有数字到字符串的自动转换是很正常的事情

像其他可以实现数字到字符串的自动转换的语言有多可怕,给你上个图看看(图是人人上扒来的,不完全切合题意,不过也可以参考)

Python 中为何没有数字到字符串的自动转换? 我要答一下了,很多人都很好奇,很多语言中中特别好用隐式转换:
Python 中为何没有数字到字符串的自动转换?
<span class="cp"><?php</span>
<span class="k">echo</span> <span class="s1">'Result:'</span><span class="o">.</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="p">);</span>
<span class="cp">?></span><span class="x"></span>
登录后复制
python 是一门强类型语言,强类型自然有强类型的好处。

我不是很了解Php和JavaScript,不过也用它们字符串和数字转换的特性写过不少利用漏洞的代码。

坐等熟悉它们的人告诉你这种自动转换有多坑。 Python是强类型的,因此不支持这个功能是很自然的,如果你使用Perl这样弱类型的语言,就会支持你这么做了。

其他的原因楼上都说的很多了,这种情况下比较好的方法,是使用格式化字符串或者字符串模板。 静态强类型效率高。
不过js不区分数字+和字符串+的自动转换,可以玩自定义新类型对象的黑魔法:
<span class="p">({</span><span class="nx">valueOf</span><span class="o">:</span><span class="kd">function</span><span class="p">(){</span><span class="k">return</span> <span class="mi">1</span><span class="p">;}}</span><span class="o">+</span><span class="p">{</span><span class="nx">valueOf</span><span class="o">:</span><span class="kd">function</span><span class="p">(){</span><span class="k">return</span> <span class="mi">1</span><span class="p">;}})</span><span class="c1">//猜猜等于几?</span>
登录后复制
题目本身只涉及强弱类型和字符串连接,不过有回答把问题扩展到 print/echo 以及运算符了。

先说强弱类型。
我的感受:
强类型语言认为不同类型的值是不同的,弱类型语言认为不同类型但相关的值在多数场合下是相同的。
所以在 Python 中,
<span class="mi">1</span> <span class="o">!=</span> <span class="s">'1'</span>
登录后复制
python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号