1-Python - 运算符与表达式

表达式

大多数的逻辑行都包含表达式,如计算面积就是一个简单的表达式,表达式可以分解为运算符(操作符)与操作数,运算符是为了完成某个功能,它们由如+-这样的符号或者其它特定的关键字表示,运算符需要数据来进行计算,这样的数据被称为操作数。在计算面积的示例中,3和4为操作数,而area则称为表达式,如:

>>> length = 3  
>>> width = 4  
>>> area = length * width  
>>> print(area)  
12  

我们将长和宽通过变量保存起来,然后通过表达式来计算它的面积,计算的结果保存在area中,通过打印area输出结果。
由运算符和表达式组成了程序的基本结构。本节我们主要讲解常用的运算符与参与运算的表达式。

算数运算符

算数运算符和我们数学上计算的符号使用是一致的,Python支持的算数运算符,如下表所示:

运算符 描述
+ 加,两数相加
- 减,得到负数或者一个数减去另一个数
* 乘,两数相乘或者返回一个被重复若干次的字符串
/ 除,两个数相除
// 取整除
% 取模,返回除法的余数
** 幂,返回x的y次方

示例:

>>> 1 + 1       # 运算符 +  
2  
>>> 1 - 1       # 运算符 -  
0  
>>> 1 * 1       # 运算符 *  
1  
>>> 1 / 1       # 运算符 /  
1.0  
>>> 4 // 3      # 取整除 //  
1  
>>> 10 % 3      # 取模 %  
1  
>>> 2 ** 2      # 幂 **  
4  

比较运算符

比较运算符通常用来比较两个变量的关系:

运算符 描述
== 等于,比较两个对象是否相等
!= 不等于,比较两个数是否不相等
> 大于
< 小于
>= 大于等于
<= 小于等于

示例:

>>> 2 == 2      # 比较运算符 ==  
True  
>>> 2 != 2      # 比较运算符 !=  
False  
>>> 2 > 2       # 比较运算符 >  
False  
>>> 2 < 2       # 比较运算符 <  
False  
>>> 2 >= 2      # 比较运算符 >=  
True  
>>> 2 <= 2      # 比较运算符 <=  
True  

赋值运算符

前文中所讲赋值操作,如x = 3,即将一个整形数字3赋值给变量x,其中=就是赋值运算符,另外,Python中还有其他的赋值运算符,如下表所示:

运算符 描述
= 简单的赋值运算符
+= 加法赋值运算符
-= 减法赋值运算符
*= 乘法赋值运算符
/= 除法赋值运算符
%= 取模赋值运算符
**= 幂赋值运算符
//= 取整除赋值运算符

示例:

>>> a = 5  
>>> b = 3  
>>> c = a + b   # 赋值运算符 =  
>>> c  
8  
>>> b += a      # 赋值运算符 +=  
>>> b  
8  
>>> b -= a      # 赋值运算符 -=  
>>> b  
3  
>>> b *= a      # 赋值运算符 *=  
>>> b  
15  
>>> b /= a      # 赋值运算符 /=  
>>> b  
3.0  
>>> b %= a      # 赋值运算符 %=  
>>> b  
3.0  
>>> b **= a     # 赋值运算符 **=  
>>> b  
243.0  
>>> b //= a     # 赋值运算符 //=  
>>> b  
48.0  

逻辑运算符

当下一节学完流程控制语句之后,经常会在程序中通过判断某个条件是否成立,而执行相应的代码块:

>>> if 2 > 1:  
...     print('ok')  
...  
ok  

但实际运用中,需要判断的条件为多个,比如用户登录验证,要同时验证用户名和密码都正确的情况下才能登录,这时候就要搭配上逻辑运算符了,如下表所示:

运算符 描述
and 逻辑与,只当两个条件同时成立才返回True,否则返回False
or 逻辑或,两个条件只要有一个成立就返回True,否则返回False
not not真为假,not假为真

示例:

>>> 2 < 3 and 3 == 3    # 逻辑运算符 and  
True  
>>> 2 < 3 or 3 != 3     # 逻辑运算符 or  
True  
>>> not 1 > 2           # 逻辑运算符 not  
True  

我们来实现一个前文中的登录验证,当用户名为oldboy,密码为111时显示登录成功:

username = input('please your name:')  
password = input('please your password:')  
if username == 'oldboy' and password == '111':  
    print('login successful, welcome:%s'%username)  
else:  
    print('login error')  

现在,如果有两个用户,我们就要优化上面的代码,使之当用户为oldboy和alex,密码对应为111和3714时显示登录成功:

username = input('please your name:')  
password = input('please your password:')  
if username == 'oldboy' and password == '111' or username == 'alex' and password == '3714':  
    print('login successful,welcome:%s'%username)  
else:  
    print('login error')  

上例程序的判断顺序为,or两边有一个条件成立就成功,而and需要两个条件都成立才成功,把and两边算作整体去跟or比较,其实,加个括号你就明白了:

if (username == 'oldboy' and password) == '111' or (username == 'alex' and password == '3714'):
    pass

成员运算符

我们很多时候,都会做这样的判断,王二狗子在家吗?小李同学不在班里吗?小芳的手机号我存在手机联系人中了吗?等等等等。Python中也存在这种在不在的关系判断。并由具体的运算符来完成这样的运算,我们称这样的运算符为成员运算符,如下表所示:

运算符 描述
in 如果在指定的序列找到值则返回True,否则返回False
not in 如果在指定的序列内没找到值返回True,否则返回False

示例:

>>> 'a' in 'abcd'       # 成员运算符 in  
True  
>>> 'a' not in 'abcd'   # 成员运算符 not in  
False  

身份运算符

身份运算符用于比较两个对象的存储关系,如下表所示:

运算符 描述
is is是判断两个变量是否引用一个对象,是则返回True
is not is not是判断两个变量是否引用一个对象,是则返回False

示例:

>>> a = 'abcd'  
>>> b = a  
>>> c = a  
>>> b is a         # 身份运算符 is  
True  
>>> b is c  
True  
>>> c is not a     # 身份运算符 is not  
False  

位运算符

位运算相对复杂,所以参考:https://www.cnblogs.com/Neeo/articles/10536202.html

运算符的优先级

那么,这么多运算符在参与运算时,谁先参与计算?谁后计算?比如数学运算中先算乘除,后算加减一样,Python中也有规则,称之为运算符优先级。下表总结了Python中的运算符优先级,从最低优先级(最少绑定)到最高优先级(最多绑定)。同一框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二进制的。运算符在同一框中从左到右分组(除从右到左分组的求幂运算外)。
请注意,比较、成员测试和身份测试都具有相同的优先级,并且具有比较部分中描述的从左到右的链接特性。

下表,从上到下,优先级依次降低:


that's all
posted @ 2019-03-15 17:05  听雨危楼  阅读(687)  评论(0编辑  收藏  举报