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