字符实战——字符串转换工具

未匹配的标注

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"中的侧边栏。在其中,intstr是通常规定的数字和字符串转换技术。

现在,虽然不能在操作符如+的周围混合字符串和数字类型,但如果需要可以在那个操作前手动转换运算对象:

>>> 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表达式代码的字符串,因此能将字符串转换为任意种类的对象。intfloat函数只能转换为数字,但这个限制意味着他们通常更快(而且更安全,因为它们不接受任意的表达式代码)。如在第5章中简要见到的,字符串格式化表达式还提供了转换数字为字符串的一种方式。本章稍后将进一步讨论格式化。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~