字符实战——字符串转换工具 | 第二部分 类型与操作 —— 第 7 章: 字符串基础 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
python的设计箴言之一是它拒绝猜测的诱惑。作为一个主要例子,在python中不能将数字和字符串相加在一起,即使这个字符串看起来像数字(也就是,全是数字符号):
# python 3.x
>>> "42" 1
typeerror: can't convert 'int' object to str implicitly
# python 2.x
>>> "42" 1
typeerror: cannot concatenate 'str' and 'int' objects
这是有意为之:因为
可以同时意味着加法和连接,所以转换的选择将会模棱两可。相反,python将此视为错误。在python中如果魔法让生活更复杂,那么通常会被省略。
那么,如果脚本从文件或用户界面获得一个数字作为文本字符串,应该做什么呢?诀窍是在可以将字符串视作数字前,先使用转换工具,反之亦然。比如:
>>> int("42"), str(42) # 从字符串转换/转为字符串
(42, '42')
>>> repr(42) # 转换为代码一样的字符串
'42'
int
函数将字符串转换为数字,str
函数将数字转为其字符串形式(本质上,就是它打印时的样子)。repr
函数(and the older backquotes expression, removed in python 3.x)也将对象转为其字符串表示形式,但以一串代码的形式(能被重新运行来重建对象)返回对象。对于字符串来说,如果是用print
语句(在不同python系列的形式不同)来显示,结果周围会有引号:
>>> print(str('spam'), repr('spam')) # 2.x: print str('spam'), repr('spam')
spam 'spam'
>>> str('spam'), repr('spam') # 原始交互式echo显示
('spam', "'spam'")
关于这些主题的更多知识,请参见第5章的*str and repr display formats"中的侧边栏。在其中,int
和str
是通常规定的数字和字符串转换技术。
现在,虽然不能在操作符如
的周围混合字符串和数字类型,但如果需要可以在那个操作前手动转换运算对象:
>>> s = "42"
>>> i = 1
>>> s i
typeerror: can't convert 'int' object to str implicitly
>>> int(s) i # 强制加法
43
>>> s str(i) # 强制连接
'421'
类似的内置函数处理浮点数与字符串的相互转换:
>>> str(3.1415), float("1.5")
('3.1415', 1.5)
>>> text = "1.234e-10"
>>> float(text) # shows more digits before 2.7 and 3.1
1.234e-10
稍后,将进一步学习内置的eval
函数,它运行一个包含python表达式代码的字符串,因此能将字符串转换为任意种类的对象。int
和float
函数只能转换为数字,但这个限制意味着他们通常更快(而且更安全,因为它们不接受任意的表达式代码)。如在第5章中简要见到的,字符串格式化表达式还提供了转换数字为字符串的一种方式。本章稍后将进一步讨论格式化。