*#【Python】【基础知识】【运算符】【Python的几类运算符】
Python的运算符分为以下几类:
算术运算符
比较(关系)运算符
赋值运算符
逻辑运算符
位运算符
成员运算符
身份运算符
以及需要考虑的:
运算符优先级
一、算术运算符:
需要注意的,上图是Python 2.0版本的,在Python3.0版本中,算术除法与2.0版本不同。
二、比较运算符
比较运算符返回的值均为True 或 False;(bool值)
在Python3.0 中,是不是没有<>这个运算符了?
三、赋值运算符
赋值运算符使用还不是很熟练;
示例:
>>> a=3 >>> b=7 >>> a 3 >>> b 7 >>> a += 6 >>> a 9 >>> a-=7 >>> a 2 >>> a*=11 >>> a 22 >>> a/=6 >>> a 3.6666666666666665 >>> b 7 >>> b%4 3 >>> b 7 >>> b%=4 >>> b 3 >>> b**=3 >>> b 27 >>> b//=12 >>> b 2 >>>
四、位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
注意:小数没有二进制;
按位异或,就是同一个位置的不同则为1,同则为0;
<< 左移动运算符,a << 2 将二进制a向左移动两位,右侧补0;
>> 右移动运算符,a >> 2 将二进制a向右移动两位,左侧补0,右侧移出边界的则删除。
五、逻辑运算符
逻辑运算符,有三种:and 、or、not;
对于x and y,若x为false,则不计算y,x and y 的结果为False;
对于x or y,若x为True,则计算并返回x 的值,不计算y;若x为False,则计算y并返回y的值。
对于not x ,返回布尔值,如果x为True,则not x 返回False;若x为False,则not x 返回True。
【这个和之前理解的并不相同。】
示例:
六、成员运算符
in
not in
示例:
>>> 1 in range(23) True >>> 22 in range(24) True >>> 25 in range(24) False >>> >>> type(range(24)) <class 'range'>
x in y ,对于y对象,可以支持字符串、列表、元组、字典、range等类型对象;
示例:
>>> 6 in [1,2,6] True >>> 7 in [1,2,6] False >>> >>> 6 in "2375762" Traceback (most recent call last): File "<pyshell#57>", line 1, in <module> 6 in "2375762" TypeError: 'in <string>' requires string as left operand, not int >>> "6" in "2375762" True >>> "8" in "2375762" False >>> >>> >>> 12 in (12,"s") True >>> 13 in (12,"s") False >>> >>> 9 in {"a":8,"b":9,"c":10} False >>> "b" in {"a":8,"b":9,"c":10} True >>> "d" in {"a":8,"b":9,"c":10} False >>> {"b":9} in {"a":8,"b":9,"c":10} Traceback (most recent call last): File "<pyshell#68>", line 1, in <module> {"b":9} in {"a":8,"b":9,"c":10} TypeError: unhashable type: 'dict' >>> >>> 26 in range(12) False >>> 6 in range(12) True
对于y为字典,对象x只会参考y的键名; {"b":9} in {"a":8,"b":9,"c":10} 这个结果也为False;
七、身份运算符
身份运算符是比较两个对象的存储单元,也就是说,如果两个对象x/y的存储单元不相同,但两个对象的值相同,这两个对象x is y 的结果也是False:
示例:
>>> s = 2123123 >>> f = 2123123 >>> s is f False >>> >>> >>> s = 23 >>> f = 23 >>> s is f True
对于上述两个示例,为何结果不是完全相同呢?
这里面需要引入到“缓存区”的概念(Python的缓存机制)
可以使用下面代码,了解Python的快速缓存,都缓存了哪些数字(这里面仅限数字,实际上部分字符串也包含在缓存中。)
for i in range(-1000,1000): for j in range(-1000,1000): if i == j: a = i b = j if (a is b): print(i)
输出结果:
。
。
。
可了解,Python缓存的整数为[-5,256]
缓存机制还有一个比较新奇的现象:
>>> a = 1111
>>> b = 1111
>>> a is b
False
>>> a = 1111;b=1111
>>> a is b
True
赋值语句写在同一行,不同行,其is语句结果不同。
同样,Python也会缓存简单的字符串。
Python的缓存机制是为了解决数据快速存取的问题,简单整型和单字符都是较常使用的变量,而元组并没有常用元组一说,因此没有缓存机制
下面有个关于字符串的测试:
>>> a = "daflkjdlfkja" >>> b = "daflkjdlfkja" >>> a is b True
很奇怪,我这个字符串是随机打出来的,所以怀疑Python会根据用户输入的字符,随时修改其缓存区;
进一步测试:
>>> b = "daflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadd" >>> a = "daflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadd" >>> a is b True >>> >>> >>> a = "s*" >>> b = "s*" >>> a is b False
只要是纯字母构成的字符串,即使很长,也会被记入缓存区,而若字符串有其他非字母构成的,则不会再记入缓存区;
此部分内容待后续进一步研究,不再此次运算符 专题中做深入讨论。
(我们在使用is或==时,这里 is 和 == 类似编译原理中传值与传地址。又或者说是 is 只是传递的指针,判断是否指向同一个地址块,这样 is 两边的参数指向内存中同个地址块,毕竟我家电视跟你电视不是同一个东西。而 == 则是仅仅判断值相同)
八、运算符的优先级
含有运算符的语句,其计算方向是自左向右还是自右向左?
————————(我是分割线)————————
参考:
1. RUNOOB.COM:https://www.runoob.com/python/python-operators.html#ysf4 /运算符
2.blog:https://blog.csdn.net/pro_leo/article/details/41786397 /Python的缓存机制;
备注:
初次编辑时间:2019年10月7日15:18:51
环境:Windows 7 / Python 3.7.2
原文地址:https://www.cnblogs.com/kaixin2018/p/11630497.html
- PCA实现一个简单的酒店推荐系统(附Python源码)
- 【干货】动手实践:理解和优化GAN(附代码)
- Selenium2+python自动化44-元素定位参数化(find_element)
- Selenium2+python自动化45-18种定位方法(find_elements)
- Python做文本挖掘的情感极性分析(基于情感词典的方法)
- Selenium2+python自动化42-判断元素(expected_conditions)
- 基于机器学习的文本情感极性分析
- Selenium2+python自动化43-判断title(title_is)
- hihoCoder #1142 : 三分求极值
- 容斥原理
- TensorFlow:TensorBoard可视化
- Codeforces 768B Code For 1
- 【干货】深入理解自编码器(附代码实现)
- SlopOne推荐算法(附Python源码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Swift 类和结构体
- 使用深度学习和OpenCV的早期火灾检测系统
- 【时序预测】一文梳理时间序列预测——ARMA模型
- 三分钟Kubernetes-环境搭建篇
- Linux分区页框分配器之水位
- 使用GPU训练模型
- Spring事务源码分析专题(一)JdbcTemplate使用及源码分析
- TensorFlow处理运动想象分类任务
- 使用kepler.gl可视化地理空间数据
- 聊聊 Python 代码覆盖率工具 - Coverage
- 目标检测模型YOLO-V1损失函数详解
- 轻松学Pytorch-使用ResNet50实现图像分类
- IDEA奇淫小技巧
- [PHP框架] ThinkPHP6 介绍、安装及配置
- 【翻译】withoutboats 的 io-uring 笔记