2.3.4 字符串类型与其他类型的转换

应用程序中有时需要将字符串类型的数据转换成其他数据类型,或者相反。下面介绍Python 中如何实现这些功能。

首先看函数 eval()。eval 函数接收一个字符串,并将该字符串解释成 Python 表达式 进行求值,最终得到特定类型的结果值;如果字符串无法解释成合法的 Python 表达式则报 错(如语法错误、未定义变量错误等)。例如:

  1. >>> eval("3.14")
  2. 3.14
  3. >>> eval("1+2*3/4%5")
  4. 2
  5. >>> eval("a+1")
  6. Traceback (most recent call last):
  7. File "<pyshell#34>", line 1, in <;module> eval("a+1")
  8. File "<stringv", line 1, in <module> NameError: name 'a' is not defined
  9. >>> a = 10
  10. >>> eval("a+1")
  11. 11
  12. >>> eval("a &gt; 8 and True")
  13. True
  14. >>> s = "Hello"
  15. >>> eval("s + 'World'")
  16. 'HelloWorld'

最后一个例子表明 eval 也可以对字符串类型的表达式求值,当然这没什么意义,eval 的主要用途是对字符串形式的数值表达式求值。例如从键盘输入一个表达式或者从一个文本 文件中读取一个表达式的场合,都需要用 eval 来求值。

如果字符串的形状符合某种类型的字面值的形式,则可以直接用 int()、long()、 float()、bool()等来转换类型。这里 bool 是布尔类型,详见 2.4 节。如:

  1. >>> int("123")
  2. 123
  3. >>> long("123")

① 这是 Windows XP 平台(默认用 GBK)下的结果。不同平台会有不同编码。

  1. 123L
  2. >>> float("123")
  3. 123.0
  4. >>> bool("True")
  5. True

如果希望将其他类型的值转换成字符串类型,可以使用 str()函数。例如:

  1. >>> str(123)
  2. '123'
  3. >>> a = 123.4
  4. >>> print str(a) + "567"
  5. 123.4567

注意最后这个例子用到了字符串的合并运算。如果不转换变量 a 的类型,Python 就会 将“+”解释成数值加法,但后一个操作数是字符串而非数值,结果即导致错误。