Python in nutshell 2nd 简明翻译 (3)
2007-01-09 15:27
543 查看
4.4 表达式与操作符
表达式是可以计算并得到一个值的一段Python代码。表达式中可以包括子表达式、操作符、以及分隔符。操作符优先级表(由高到低):
操作符 描述 结合性
'expr,...' String conversion NA
{key:expr,...} Dictionary creation NA
[expr,...] List creation NA
(expr,...) Tuple creation or just parentheses NA
f(expr,...) Function call L
x[index:index] Slicing L
x[index] Indexing L
x.attr Attribute reference L
x**y Exponentiation (x to yth power) R
~x Bitwise NOT NA
+x, -x Unary plus and minus NA
x*y, x/y, x//y, x%y Multiplication, division, truncating division, L
remainder
x+y, x-y Addition, subtraction L
x<<y, x>>y Left-shift, right-shift L
x&y Bitwise AND L
x^y Bitwise XOR L
x|y Bitwise OR L
x<y, x<=y, x>y, x>=y, Comparisons (less than, less than or equal, NA
x<>y, x!=y, x==y greater than, greater than or equal, inequality,
equality)
x is y, x is not y Identity tests NA
x in y, x not in y Membership tests NA
not x Boolean NOT NA
x and y Boolean AND L
x or y Boolean OR L
lambda arg,...: expr Anonymous simple function NA
4.4.1 链接比较
链接比较相当于多个由AND组合的比较。a < b <= c < d 相当于 a < b and b <= c and c < d
4.4.2 短路(简化)操作
在进行AND 或 Or操作时,并不是所有的运算对象都要进行运算,语句右边的运算对象在整个表达式的返回值已经可以提前确定的情况下,就不需要被运算了。x and y,若x为false,则结果就是false,否则结果就是y的值。
x or y,若x为true,则结果就是true,否则结果就是y的值。
我们还可以更普遍地应用这个特性,即左操作数是右操作数的 监护,依赖于左操作数的值来确定是否继续对右操作数进行运算。
4.4.2.1 三元操作符(Python 2.5)
whentrue if condition elsewhenfalse
4.5 数值操作符
数值对象是不可变对象,当你操作数值时,总是得到一个新的数值对象,而原对象永远不会被改变。在数值操作中出现的 + 或 – 号,都不是数值声明的一部分,它们只是普通的运算符,如 -2**2,按运算符优先级别,相当于 -(2**2),而不是 (-2)**2。
4.5.1 数值转换
你可以在任意的Python内置数据类型之间进行运算或比较,当运算对象的数据类型不一致时,Python应用一条强制转换规则:将“小”的类型转换为“大”的类型。数值类型从小到大的顺序为:integer, long integer, float point number, complex number。
当然也可以使用内置数值类型int,long,float,complex对数值进行明确的强制类型转换,如int(9.8) = 9。complex类型调用则需要两个参数分别表示实部与虚部。注意,Python中没有办法将complex类型转换为其它类型。
在建立内置数值类型时,传入参数也可以使用字符串。针对int 与long还可以指定基数(radix),默认是十进制。
4.5.2 算术运算
4.5.2.1 除法
若操作符/、//、%的右值为0,则抛出运行时异常。//操作符是整除操作符,其结果总是整数,而余数部分将会被抛弃。/ 在针对两个整数进行操作时,效果与 // 一样(Python命令行参数 -Qold,在Python2.3、2.4、2.5中这是默认选项),而其它情况下,它返回一个float point 数值(或者是一个复数,若操作数为复数)。要想让 / 在针对两个整数进行操作时也进行“真除”操作,即返回浮点值,必须显式指定Python命令行参数 -Qnew,或在源文件头加入以下语句:
from _ _future_ _ import division,这样也可以保证 / 操作符在针对任意数值类型进行处理时,永远不会舍去结果的余数部分。
在程序中一定不要混淆操作符/与//。通过使用Python命令行参数 -Qwarn,可以在使用/来操作两个整数时,让Python产生一个运行时警告信息。
divmod函数可以在一次操作中得到商与余数。
4.5.2.2 取幂
a ** b,a必须大于等于0,b必须是整数或小数部分为0的浮点数。power(a,b)函数与 a ** b效果一样,power(a,b,c)则等同于 (a**b)%c,而且运算速度更快。
4.5.3 数值比较
除复数外(抛出异常),所有数值都可以参与比较操作(==、!=、 <、 <=、 >、 >=)。比较结果是一个boolean值。4.5.4 整数的按位操作
整数(int、long)可以进行按位操作。相关文章推荐
- Python in nutshell 2nd 简明翻译 (9)
- Python in nutshell 2nd 简明翻译 (1)
- Python in nutshell 2nd 简明翻译 (8)
- Python in nutshell 2nd 简明翻译 (5)
- Python in nutshell 2nd 简明翻译 (2)
- Python in nutshell 2nd 简明翻译 (6)
- Python in nutshell 2nd 简明翻译 (7)
- Python in Nutshell 简明翻译(4)
- [tensorflow in a nutshell] tensorflow简明教程 (第一部分)
- Learn Python in Y Minutes(有时间再慢慢翻译)
- 【翻译】Writing an Hadoop MapReduce Program in Python
- XAML in a Nutshell-感谢灵格斯翻译软件和google的全文翻译
- 简明Python3教程 1.翻译
- (翻译) C#技术手册 第二版(C# in a Nutshell, 2nd Edition)
- 简明Python3教程 1.翻译
- (原创)《Lucene in Action 2nd Edition》Chapter11.2.2中的工具类SearcherManager翻译为C#版本
- 简明Python3教程 1.翻译
- 简明Python3教程 1.翻译
- SQL In A Nutshell, 2nd Edition [ILLUSTRATED]
- sequence in python