原:http://my.oschina.net/junwuwei/blog/29625
Python的运算符与用法
运算符 | 名称 | 说明 | 例子 |
---|---|---|---|
+ | 加 | 两个对象相加 | 3 + 5得到8。'a' + 'b'得到'ab'。 (注意:6+'a'这样是错误的,但在PHP里这样是可以运行的) |
- | 减 | 得到负数或是一个数减去另一个数 | -5.2得到一个负数。50 - 24得到26。 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | 2 * 3得到6。'la' * 3得到'lalala'(但PHP里这样运算返值为0)。 在PHP中要实现相同功能,有函数: str_repeat(),str_pad() |
** | 幂 | 返回x的y次幂 | 3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 | x除以y | 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整数部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余数 | 8%3得到2。-25.5%2.25得到1.5 (在PHP中:-8%3 = -2 与 8%-3 = 2 ) |
<< | 左移 | 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) | 2 << 2得到8。——2按比特表示为10 |
>> | 右移 | 把一个数的比特向右移一定数目 | 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。 |
& | 按位与 | 数的按位与 | 5 & 3得到1。 |
| | 按位或 | 数的按位或 | 5 | 3得到7。 |
^ | 按位异或 | 数的按位异或 | 5 ^ 3得到6 |
~ | 按位翻转 | x的按位翻转是-(x+1) | ~5得到6。 |
< | 小于 | 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比较对象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比较两个对象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布尔“非” | 如果x为True,返回False。如果x为False,它返回True。 | x = True; not y返回False。 |
and | 布尔“与” | 如果x为False,x and y返回False,否则它返回y的计算值。 | x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。 |
or | 布尔“或” | 如果x是True,它返回True,否则它返回y的计算值。 | x = True; y = False; x or y返回True。短路计算在这里也适用。 |
fc_lamp提醒你:Python的逻辑运算符里没有“!(非),&&(与),||(或)” 这三个表示符号(完全是英文上的表示)。
即 not,and,or
参看:http://hi.baidu.com/fc_lamp/blog/item/6a5fdf256168183ad40742a9.html
另外单独说说python的字符串运算符:
了解PHP的人知道,在PHP里字符串的连接运算符为(“.”),它返回其左右参数连接后的字符串。如:
<?php
$a = 55;
$str = 'abc';
$str .= 'def';
$str .= $a; //在运算时,PHP自动把$a的类型转为了字符串类型
$str = $str.'s99s';
//在PHP里变量与字符串之间连接是通过点运算来实现连接的
echo $str;
但在python里,可能大家已从运算表里找到了,即 (“+”),但是与PHP不同的是两个对象相加,两个对象必须是同类型的,不同类型的两个对象是不能相加的。
要实现像上面PHP代码里的运算,必须保证两对象类型一致。如:
print('=============python字符串运算符================')
numa = 3
strs = 'This first'
strs1 = strs,numa #输出值为:('This first',3)
print(strs1)
######################
#类型对象不匹配,无法正常运算
#strs2 = strs+numa
#print(strs2)
######################
strs3 = strs+str(numa) #改变numa的类型,使其成为字符串,或者 strs += str(numa)
print(strs3) #输出为This first3
#另外:如果strs = '6',则可进行:strs3 = int(strs)+numa这样的运算,输出为9
python里也没有类似"xx ? xx : xx"这样的三元运算符,可用:
charset = 'utf8' if 'charset' not in param else param['charset'];
参看:http://chroya.iteye.com/blog/726479
Python的运算优先级
运算符 | 说明 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |
另注:
1 dir()函数 :
你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。
当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
2 del
用于删除一个变量,这类似于PHP里的unset()
3 python的Bool值:True ,False
我写程序很喜欢用三元运算符,但是在python中居然不支持,有点郁闷,查了下资料,发现还是有解决方案的。
比如,一个这样的函数:
- function trans(v) {
- return (v==0)?1:v;
- }
啧啧,三元运算符看着就是漂亮,不知道python为什么不支持。
下面看一下python的解决方案一:
- def trans(v):
- return 1 if v==0 else v
也就是if else语句的简写形式,意思一看就明白,看起来还不错。
下面是解决方案二:
- def trans(v):
- return v==0 and 1 or v
用到了与或运算符的特性。
解释一下:如果v等于0为true,则跟1做与运算,为true,则不进行后面的或运算,直接返回1;如果v等于0为false,则跟1做与运算,为false,继续进行或运算,返回v。