博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记表达式和运算符(一)
阅读量:6436 次
发布时间:2019-06-23

本文共 3609 字,大约阅读时间需要 12 分钟。

表达式和运算符

什么是表达式?

1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1、2、3叫做操作数。1+2*3 经过计算后得到的结果是7,就1+2*3 = 7。我们可以将计算结果保存在一个变量里,ret = 1-2*3 。 所以表达式就是由操作数和运算符组成的一句代码或语句,表达式可以求值,可以放在“=”的右边,用来给变量赋值。

算术运算符 : + - * / //(取整除) %(取余) **

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
>>> 
2
+
3
>>> 
3
-
2
>>> 
2
*
3
>>> 
5
/
2
2.5
>>> 
5
/
/
2
>>> 
5
%
2
>>> 
2
*
*
3
赋值运算符: 
= 
+
= 
-
= 
*
= 
/
= 
%
= 
/
/
= 
*
*
=
>>> num 
= 
2    
>>> num 
+
= 
1   
# 等价于 num = num + 1
>>> num 
-
= 
1   
# 等价于 num = num - 1
>>> num 
*
= 
1   
# 等价于 num = num * 1
>>> num 
/
= 
1   
# 等价于 num = num / 1
>>> num 
/
/
= 
1   
# 等价于 num = num // 1
>>> num 
%
= 
1   
# 等价于 num = num % 1
>>> num 
*
*
= 
2   
# 等价于 num = num ** 2
 
 
比较运算符:>、 <、 >
=
、 <
=
、 
=
=
、!
=   
True 
False
简单讲一下
顾名思义,比较运算符是用来做比较的,比较的结果会有两种,分别是成立和不成立,成立的时候,结果是 
True
,不成立的时候结果是
False
。 
True
False 
用来表示比较后的结果。
>>> a 
= 
5
>>> b 
= 
3
>>> a > b  
# 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 True
>>> a < b  
# 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。False
>>> a <
= 
b  
# 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。False
>>> a >
= 
b  
# 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。True
>>> a 
=
= 
b  
# 检查,两个操作数的值是否相等,如果是则条件变为真。False
>>> a !
= 
b  
# 检查两个操作数的值是否相等,如果值不相等,则条件变为真。True
 
逻辑运算符: 
not 
and
、 
or
逻辑运算符是用来做逻辑计算的。像我们上面用到的比较运算符,每一次比较其实就是一次条件判断,都会相应的得到一个为
True
False
的值。而逻辑运算符的的操作数就是一个用来做条件判断的表达式或者变量。
>>> a > b 
and  
a < b  
# 如果两个操作数都是True,那么结果为True,否则结果为False。False
>>> a > b 
or  
a < b  
# 如果有两个操作数至少有一个为True, 那么条件变为True,否则为False。True
>>> 
not 
a > b  
# 反转操作的状态,操作数为True,则结果为False,反之则为TrueFalse
结果为
True
的时候,我们一般称 结果为 真, 逻辑运算符会有一个真值表。

成员运算符: not in 、in (判断某个单词里是不是有某个字母)

成员运算符用来判断一个元素是否是另一个元素的成员。 比如说我们可以判断 “hello” 中是否有 “h”, 得到的结果也是True 或者 False。

>>> "h" in "hello"  # 这里的意思是 “h” 在“Hello” 中,判断后结果为TrueTrue >>> "h" not in "hello"  # 这里的意思是 “h” 不在“Hello” 中,判断后结果为FalseFalse

身份运算符: is、is not(讲数据类型时讲解,一般用来判断变量的数据类型)

用来判断身份。

1
2
3
4
5
6
>>> a 
= 
123456
>>> b 
= 
a
>>> b 
is 
a   
#判断  a 和 b 是不是同一个 123456True
>>> c 
= 
123456
>>> c 
is 
a  
#判断  c 和 a 是不是同一个 123456False
>>> c 
is 
not 
a   
#判断  c 和 a 是不是不是同一个 123456True

这里我们首先将123456赋值给a,后有将a赋值给b, 这样其实是 a和b 的值都是123456, 但是后面c的值也是123456,为什么 第一次a is b 的结果为True ,c和 a 的结果为False 呢?

原因是这样的: 我们知道程序是运行在内存里的,第一次 我们将123456赋值给a的时候,其实是在内存里开辟了一块空间,将123456放在这块空间里,为了找到这里的123456, 会有一个指向这块空间的地址,这个地址叫做内存地址,是123456存储在内存中的地址。a其实指向的就是存储123456的内存空间的地址。执行了b=a,就是让b指向的地址和a一样。之后我们执行了 c = 123456 ,这里就会再开辟一块内存空间,并将指向该空间的内存地址赋值给c ,这样的话 ,a和b 指向的是同一个123456, c 指向的是另外一个123456 。

位运算符:

先了解一个概念:

我们平时用到的数字在计算机中是以二进制表示的,  这个二进制数叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

比如:十进制中的数 +7 ,计算机字长为8位,转换成二进制就是00000111。如果是 -7 ,就是 10000111 。那么,这里的 00000111 和 10000111 就是机器数。

  原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

  [+1] = 0000 0001

  [-1] = 1000 0001

  第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

  11111111 到 01111111  即  -127 到 127

  反码的表示方法是:

  正数的反码是其本身
  负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

  [+1] = [00000001] = [00000001]

  [-1] = [10000001] = [11111110]

  补码的表示方法是:

  正数的补码就是其本身
  负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

  [+1] = [00000001] = [00000001] = [00000001]

  [-1] = [10000001] = [11111110] = [11111111]

我们设置a=234 (二进制为 11101010), b=44 (二进制为 101100)

& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。

^ 按位异或运算符:当两对应的二进位相异时,结果为1

       

~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1

   a = 10000000 = 128

    ~a

     result: 01111111  = 127

<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。

    a = 10110011 = 179

    a << 2

result:  1011001100

>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数

    a = 10110011 = 179

    a >> 2

result:  00101100  = 44

位运算符一般用于二进制操作,一般用于底层,我们很少用,知道就可以了。

优先级

运算符那么多,优先级记不住怎么办? 使用小括号。通过使用小括号,我们就可以很方便的进行优先级的区分。

本文转自cqtesting51CTO博客,原文链接:http://blog.51cto.com/cqtesting/1957721 ,如需转载请自行联系原作者

你可能感兴趣的文章
SAS去空格
查看>>
MySQL用户和权限管理
查看>>
Spring Cloud构建微服务架构(二)服务消费者
查看>>
这些老外的开源技术养活了一票国产软件
查看>>
Maven实战(六)--- dependencies与dependencyManagement的区别
查看>>
创业者应该有的5个正常心态(转)
查看>>
php模式设计之 注册树模式
查看>>
【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
查看>>
_ENV和_G
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒” 纵使一年不将军,不可一日不拱卒...
查看>>
Oracle Grid Infrastructure: Understanding Split-Brain Node Eviction (文档 ID 1546004.1)
查看>>
Linux改变进程优先级的nice命令
查看>>
**16.app后端如何保证通讯安全--url签名
查看>>
win32窗口机制之CreateWindow
查看>>
C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
查看>>
awakeFromNib小总结
查看>>
java知识大全积累篇
查看>>
图像特效——摩尔纹 moir
查看>>
Android OpenGL ES(十)绘制三角形Triangle .
查看>>
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
查看>>