Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156779
  • 博文数量: 31
  • 博客积分: 1720
  • 博客等级: 上尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-13 13:47
文章分类

全部博文(31)

文章存档

2014年(3)

2013年(1)

2012年(10)

2011年(1)

2010年(3)

2009年(13)

分类:

2009-10-19 14:08:01

目录

1. 第四章 运算符与表达式

本章的主题是 Python 语言的内建运算符及表达式求值的优先级。

1.1. 数值操作

所有数值类型都提供下列运算:

运算                    描述
x + y                   加
x - y                   减
x * y                   乘
x / y                   常规除
x // y                  地板除
x ** y                  乘方 (xy )
x % y                   取模 (x mod y )
-x                      改变操作数的符号位
+x                      什么也不做
~x                      ~x=-(x+1)

        关于常规除 / 与地板除 //: 地板除在任何时候都会将小数部分舍为0,而常规除的行为依操作数的类型而有不同。
        常规除 / : 整数除以整数时 / 与 // 除完全相同,商都会被舍去小数部分而返回一个整数。如7 / 4 的结果是 1,而不是1.75;
        如果有一个操作数为浮点数,情形就不同了:
        对于 / ,会返回一个双精度浮点数
        对于 //,也会返回一个双精度浮点数,只不过小数部分被舍弃

取模操作返回 x/y 的余数,如7 % 4是3。对于浮点数,取模操作返回的是x - int(x / y ) * y。 对于复数,取模操作返回x - int((x / y ).real ) * y。

下列列出的位运算符只能用于整数或长整数:

操作                    描述
x x >> y                  右移
x & y                   按位与
x | y                   按位或
x ^ y                   按位异或 (exclusive or)
~x                      按位翻转

这些都是相当原始的运算,操作的是操作数的每一个位。所有的操作数都假定是以二进制补码形式表示。对于长整数,按位运算符假定符号位可以被无限地向左扩展。

除了这些以外,下边这些内建函数支持所有的数值类型:

函数                    描述
abs(x )                 绝对值
divmod(x ,y )           返回 (int(x / y ), x % y )
pow(x ,y [,modulo ])    返回 (x ** y ) x % modulo
round(x ,[n])           四舍五入,n为小数点位数

abs()函数返回一个数的绝对值。divmod()函数返回一个包含商和余数的元组。pow()函数可以用于代替 ** 运算,但它还支持三重取模运算(经常用于密码运算)。 round函数总是返回一个浮点数。Python的四舍五入规则不是银行家四舍五入规则,这一点请大家注意。

下列比较操作有标准的数学解释,返回一个布尔值True,或者False:

运算符                  描述
x x > y                   大于
x == y                  等于
x != y                  不等于(与相同)
x >= y                  大于等于
x 

Python的比较运算可以连结在一起,如w

x z这个表达式也是合法的,(注意,这个表达式中 x 和 z 并没有比较操作)。不建议这样的写法,因为这会造成代码的阅读困难。

只可以对复数进行等于(==)及不等于(!=)比较,任何对复数进行其他比较的操作都会引发TypeError异常。

数值操作要求操作数必须是同一类型,若Python发现操作数类型不一致,就会自动进行类型的强制转换,转换规则如下:

1.如果操作数中有一个是复数,另一个也将被转换为复数
2.如果操作数中有一个是浮点数,另一个将被转换为浮点数
3.如果操作数中有一个是长整数数,另一个将被转换为长整数数
4.如果以上都不符合,则这两个数字必然都是整数,不需进行强制转换。

1.2. 序列运算

序列支持以下操作:

操作                      描述
s + r                   序列连接
s * n , n * s           s的 n 次拷贝,n为整数
s % d                   字符串格式化(仅字符串)
s[i]                    索引
s[i :j ]                切片
x in s , x not in s     从属关系
for x in s :            迭代
len(s)                  长度
min(s)                  最小元素
max(s)                  最大元素

+ 运算符将两个相同类型的序列连结成一个。 s * n 运算符给出一个序列的 n 次浅拷贝。下边的例子可以帮助你理解这点:

阅读(1272) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~