首页 > 代码库 > Python运算符

Python运算符

一、基本概念

1、Python语言支持的运算符类型

  算数运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级

2、计算顺序  

  运算符优先级表决定了哪个运算符在别的运算符之前计算,若是要改变计算的顺序,使用圆括号。

3、结合规律

  运算符通常由左向右结合,即相同优先级的运算符按照从左向右的顺序计算。

In [2]: 3*4-2+6/2
Out[2]: 13

In [3]: 3*4-(2+6)/2
Out[3]: 8

 

二、运算符优先级表

运算符 描述
lambda lambda表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
>>,<< 移位
+,- 加法与减法
*,/,% 乘法、除法、取余
+x,-x 正负号
~x 按位翻转
** 指数
x.attribute 属性参考
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(expression,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
‘expression,...‘ 字符串转换

 

三、运算符相关函数

1、内建函数

cmp():比较两个数的大小

type():返回数字对象的类型

str():将数字转换为字符串

int():将变量的值的类型转换为整型的

In [4]: cmp(5,6)
Out[4]: -1

In [5]: cmp(6,6)
Out[5]: 0

In [6]: cmp(9,6)
Out[6]: 1

解析:cmp()是将圆括号里的第一个数和第二数进行比较,<(输出-1)、=(输出0)、>(输出1)

In [8]: str(123)
Out[8]: 123

In [9]: str(0xFF)
Out[9]: 255

In [10]: type(123666666666666666666666666)
Out[10]: long

In [12]: a=456
In [13]: type(a)
Out[13]: int

In [14]: str(a)
Out[14]: 456

2、数值工厂函数

int():返回一个字符串或者数值对象的整型表示

long():返回一个字符串或者数值对象的长整型表示

float():返回一个字符串或者数值对象的浮点型表示

bool():返回对象的布尔值

In [17]: int(3.1415926)
Out[17]: 3

In [18]: long(56)
Out[18]: 56L

In [19]: float(8)
Out[19]: 8.0

In [20]: bool(0)
Out[20]: False

In [21]: bool(1)
Out[21]: True

In [22]: bool(123)
Out[22]: True

3、功能函数

abs():返回给定参数的绝对值

coerce():返回一个包含类型转换完毕的两个数值元素的元组

divmod():将除法和取余运算结合起来,返回一个包含商和余数的元组

pow():可以进行指数运算

round():用于对浮点型进行四舍五入运算

In [24]: abs(-123)    #|-123|=123
Out[24]: 123

In [25]: coerce(12,23)
Out[25]: (12, 23)

In [26]: divmod(10,3)    #10除以3等于3余1
Out[26]: (3, 1)

In [27]: pow(2,3)    #2^3=8
Out[27]: 8

In [28]: round(3.1415926)
Out[28]: 3.0

In [29]: round(5.678)
Out[29]: 6.0

4、数字进制转换函数

hex():将数字转换成十六进制数并以字符串形式返回

oct():将数字转换成八进制数并以字符串形式返回

bin():将数字转换成二进制数并以字符串形式返回

In [30]: hex(123)
Out[30]: 0x7b

In [31]: oct(9)
Out[31]: 011

In [32]: bin(9)
Out[32]: 0b1001

注意:

  1、Python中进制显示

    二进制binary--0b

    八进制octal--0

    十进制decimal

    十六进制hex--0x

  2、在shell中 0开头的数认为是八进制的数

[root@localhost ~]# echo $((08*2))
-bash: 08: value too great for base (error token is "08")
[root@studying ~]# echo $((07*2))
14
[root@localhost ~]# echo $((09*2))
-bash: 09: value too great for base (error token is "09")

解析:在shell中0开头的数被解释为八进制的数值(八进制数个位最大是7)

[root@localhost ~]# echo $((9*2))
18
[root@localhost ~]# echo $((10#09*2))
18

解决办法:在数值的前面注释10#表示该数为十进制数

 

四、脚本实例之运算符

脚本练习1:分数成绩的判断

#!/usr/bin/python

u_grade=raw_input("please input your grade:")

if u_grade.isdigit():
    if 90<=int(u_grade)<=100:
        print "your grade is",u_grade,"A"
    elif 80<=int(u_grade)<=89:
        print "your grade is",u_grade,"B"
    elif 70<=int(u_grade)<=79:
        print "your grade is",u_grade,"C"
    elif 60<=int(u_grade)<=69:
        print "your grade is",u_grade,"D"
    elif 0<=int(u_grade)<=59:
        print "your grade is",u_grade,"E"
    else:
        print "please input the range of number 0-100"
else:
    print "It‘s not a valid number,try again"

脚本练习2:用户信息的按条件获取

#!/usr/bin/python
import os

f=os.popen(cat /etc/passwd)
for i in f:
    u_list=i.split(":")
    if 500<int (u_list[2])<2000:
        print "%s uid is %s "%(u_list[0],u_list[2])

脚本练习3:加、减、乘、除、取余运算

#!/usr/bin/python
#coding=utf-8

num1=raw_input("please input the first number:x=")
num2=raw_input("请输入第二个数字:y=")

#优化方向:进行数值的大小判断,合理运算
if num1.isdigit() and num2.isdigit():
    print "x*y=",int(num1)*int(num2)
    print "x+y=",int(num1)+int(num2)
    print "x-y=",int(num1)-int(num2)
    print "x/y=",int(num1)/int(num2)
    print "x%y=",int(num1)%int(num2)
else:
    print "please input two number"

 

五、注意事项

1、加法问题

  对于两对象的相加,则相加项的格式必须相同否则报错,相加:数值相加、元素增加……

In [20]: a=[1,2,3]
In [21]: b=["zhang","jia","cai"]
In [22]: a+b  #加法方式的内容追加,前后相加的格式必须相同
Out[22]: [1, 2, 3, zhang, jia, cai]

In [23]: c=123
In [24]: d="123"
In [25]: c+d
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-25-99d6dddc327d> in <module>()
----> 1 c+d
TypeError: unsupported operand type(s) for +: int and str

2、乘法问题

  对于乘法中的*,如果数字相乘则为其本意=数与数的乘积运算,如果字符串*一个数字则表示字符串的重复显示,如下:

In [27]: a=123
In [28]: a*3
Out[28]: 369

In [29]: b="123"
In [30]: b*3
Out[30]: 123123123

 

Python运算符