>>> price = 100.50 >>> price * tax 12.5625
>>> price + _ 113.0625
>>> round(_, 2) 113.06
此变量对于用户是只读的。不要尝试给它赋值 —— 你只会创建一个独立的同名局部变量,它屏蔽了系统内置变量的魔术效果。
除了 int 和 float,Python 还支持其它数字类型,例如 Decimal 和 Fraction。Python 还内建支持 复数 ,使用后缀 j 或 J 表示虚数部分(例如,3+5j)。 编者注:下面这一部分的内容在这一版本中已经删除,但是为了让大家更加清楚的了解复数,暂时保留在这里。
复数也得到支持;带有后缀 j 或 J 就被视为虚数。带有非零实部的复数写为 (real+imagj) ,或者可以用 complex(real, imag) 函数创建。 >>> 1j * 1J (-1+0j)
>>> 1j * complex(0, 1) (-1+0j) >>> 3+1j*3 (3+3j)
>>> (3+1j)*3 (9+3j)
>>> (1+2j)/(1+1j) (1.5+0.5j)
复数的实部和虚部总是记为两个浮点数。要从复数 z 中提取实部和虚部,使用 z.real 和 z.imag: >>> a=1.5+0.5j >>> a.real 1.5
>>> a.imag 0.5
浮点数和整数之间的转换函数 (float 和 int 以及 long) 不能用于复数。没有什么正确方法可以把一个复数转成一个实数。函数 abs(z) 用于获取其模(浮点数)或 z.real 获取其实部:
>>> a=3.0+4.0j >>> float(a)
Traceback (most recent call last): File \, line 1, in ?
TypeError: can't convert complex to float; use abs(z) >>> a.real 3.0
>>> a.imag 4.0
>>> abs(a) # sqrt(a.real**2 + a.imag**2) 5.0
3.1.2. 字符串
相比数值,Python 也提供了可以通过几种不同方式表示的字符串。它们可以用单引号 ('...') 或双引号 (\) 标识 [2]。\\ 可以用来转义引号:
>>> 'spam eggs' # single quotes 'spam eggs'
>>> 'doesn\\'t' # use \\' to escape the single quote... \
>>> \ # ...or use double quotes instead \
>>> '\ '\
>>> \ '\
>>> '\ '\
在交互式解释器中,输出的字符串会用引号引起来,特殊字符会用反斜杠 (\\) 转义。虽然可能和输入看上去不太一样,但是两个字符串是相等的。如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号引用。再强调一下,print 语句可以生成可读性更好的输出:
>>> '\ '\
>>> print '\ \
>>> s = 'First line.\\nSecond line.' # \\n means newline >>> s # without print, \\n is included in the output 'First line.\\nSecond line.'
>>> print s # with print, \\n produces a new line
First line. Second line.
如果你前面带有 \\ 的字符被当作特殊字符,你可以使用 原始字符串,方法是在第一个引号前面加上一个 r: >>> print 'C:\\some\\name' # here \\n means newline! C:\\some ame
>>> print r'C:\\some\\name' # note the r before the quote C:\\some\\name
字符串文本能够分成多行。一种方法是使用三引号:\ 或者 '''...'''。行尾换行符会被自动包含到字符串中,但是可以在行尾加上 \\ 来避免这个行为。下面的示例: 可以使用反斜杠为行结尾的连续字符串,它表示下一行在逻辑上是本行的后续内容:
print \
Usage: thingy [OPTIONS]
-h Display this usage message -H hostname Hostname to connect to \
将生成以下输出(注意,没有开始的第一行):
Usage: thingy [OPTIONS]
-h Display this usage message -H hostname Hostname to connect to 字符串可以由 + 操作符连接(粘到一起),可以由 * 表示重复: >>> # 3 times 'un', followed by 'ium' >>> 3 * 'un' + 'ium' 'unununium'
相邻的两个字符串文本自动连接在一起。: >>> 'Py' 'thon' 'Python'
它只用于两个字符串文本,不能用于字符串表达式:
>>> prefix = 'Py' >>> prefix 'thon' # can't concatenate a variable and a string literal ...
SyntaxError: invalid syntax >>> ('un' * 3) 'ium'
...
SyntaxError: invalid syntax
如果你想连接多个变量或者连接一个变量和一个字符串文本,使用 +: >>> prefix + 'thon' 'Python'
这个功能在你想切分很长的字符串的时候特别有用:
>>> text = ('Put several strings within parentheses ' 'to have them joined together.') >>> text
'Put several strings within parentheses to have them joined together.'
字符串也可以被截取(检索)。类似于 C ,字符串的第一个字符索引为 0 。Python没有单独的字符类型;一个字符就是一个简单的长度为1的字符串。: >>> word = 'Python'
>>> word[0] # character in position 0 'P'
>>> word[5] # character in position 5 'n'
索引也可以是负数,这将导致从右边开始计算。例如: >>> word[-1] # last character 'n'
>>> word[-2] # second-last character 'o'
>>> word[-6] 'P'
请注意 -0 实际上就是 0,所以它不会导致从右边开始计算。
除了索引,还支持 切片。索引用于获得单个字符,切片 让你获得一个子字符串: >>> word[0:2] # characters from position 0 (included) to 2 (excluded) 'Py'
>>> word[2:5] # characters from position 2 (included) to 5 (excluded) 'tho'
注意,包含起始的字符,不包含末尾的字符。这使得 s[:i] + s[i:] 永远等于 s: >>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:] 'Python'
切片的索引有非常有用的默认值;省略的第一个索引默认为零,省略的第二个索引默认为切片的字符串的大小。:
>>> word[:2] # character from the beginning to position 2 (excluded) 'Py'
>>> word[4:] # characters from position 4 (included) to the end 'on'
>>> word[-2:] # characters from the second-last (included) to the end 'on'
有个办法可以很容易地记住切片的工作方式:切片时的索引是在两个字符 之间 。左边第一个字符的索引为 0,而长度为 n 的字符串其最后一个字符的右界索引为 n。例如:
+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
文本中的第一行数字给出字符串中的索引点 0...6。第二行给出相应的负索引。切片是从 i 到 j 两个数值标示的边界之间的所有字符。
对于非负索引,如果上下都在边界内,切片长度就是两个索引之差。例如,word[1:3] 是 2 。
试图使用太大的索引会导致错误:
>>> word[42] # the word only has 6 characters Traceback (most recent call last): File \, line 1, in
Python 能够优雅地处理那些没有意义的切片索引:一个过大的索引值(即下标值大于字符串实际长度)将被字符串实际长度所代替,当上边界比下边界大时(即切片左值大于右值)就返回空字符串: >>> word[4:42]