Python语法速查: 5. 运算符、math模块、表达式
本篇索引
(1)一些较容易搞错的运算符
(2)运算符优先级
(3)math模块
(4)表达式与语句
(1)一些较容易搞错的运算符
一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符。运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是语句。
| 运算符 | 简述 | 举例或说明 | |
|---|---|---|---|
| 数字操作 | |||
| / | 在Python3中,默认为浮点数除法;在Python2中,若除数和被除数都是整数,则默认为截断除法。若要在Python2中也为浮点数除法,需要使用: from __future__ import division |
2/3 # Python3 中结果为:0.6666666666666666 2/3 # Python2 中结果为:0 |
|
| // | 截断除法(仅保留整数部分),又叫“地板除法”。 |
2//3 # 结果为 0 |
|
| % | 取模(浮点数也可以做取模运算)。 |
8 % 3 # 结果为 2 1.2 % 0.5 # 结果为 0.2 |
|
| ** | 乘方(次方)运算。 |
2**3 # 结果为 8 |
|
| -x | 一元减法。 |
x=3; x=-y # 结果为 x=-3 |
|
| +x | 一元加法(一般用不到)。 |
x=+3 # 结果为 x=3 |
|
| 位操作 | |||
| & | 按位与。 |
0b111 & 0b011 # 结果为 3 |
|
| | | 按位或。 |
0b010 & 0b001 # 结果为 3 |
|
| ^ | 按位异或。 |
0b001 & 0b011 # 结果为 2 |
|
| ~ | 按位求反。 |
~1 # 结果为 -2(这个涉及补码知识) |
|
| << | 左移 |
1<<2 # 结果为 4 |
|
| >> | 右移 |
1>>2 # 结果为 0 |
|
| 布尔运算 | |||
| and | 逻辑与(短路求值) |
略 |
|
| or | 逻辑或(短路求值) |
略 |
|
| not | 逻辑非 |
略 |
|
| 从属关系 | |||
| in | 属于成员 |
x in seq |
|
| not in | 不属于成员 |
x not in seq |
|
| is | 是否引用了内存中的同一个对象 |
x is y |
|
| is not | 是否引用了内存中的不同对象 |
x is not y |
|
| 其他 | |||
| . | 属性运算符 |
略 |
|
| () | 函数调用运算符 |
f=some_fun # 假设some_fun为某个已定义函数 f() # 即调用some_fun函数 |
|
(2)运算符优先级
下表中运算符优先级从高到低。
| 运算符 | 说明 |
|---|---|
| (...), [...], {...} | 创建元组、列表、字典 |
| s[i], s[i:j] | 索引和切片 |
| . | 属性运算符 |
| () | 函数调用运算符 |
| +x, -x, ~x | 一元操作符(一元加法、一元减法、按位取反) |
| ** | 乘方(次方)运算 |
| *, /, //, % | 乘法、除法、截断除法、取模 |
| +, - | 加法、减法 |
| <<, >> | 移位 |
| & | 按位与 |
| ^ | 按位异或 |
| | | 按位或 |
| <, <=, >, >=, ==, !=, is, is not, in, not in |
关系运算符、身份检查、成员检查 |
| not | 逻辑非 |
| and | 逻辑与 |
| or | 逻辑或 |
| lambda args: exrp | 匿名函数 |
(3)math模块
前面的运算符仅能做一些最基础的运算,如果需要进一步的标准数学运算函数,需要导入math模块。
math模块所有函数的返回值都是浮点数,所有三角函数都默认使用弧度。math模块不支持复数运算,若要运算复数,需要导入cmath模块。
| 字符串方法 | 简述 | 举例或说明 | |
|---|---|---|---|
| 属性 | |||
| pi | 数学常数π |
math.pi # 结果为 3.141592653589793 |
|
| e | 数学常数e |
math.e # 结果为 2.718281828459045 |
|
| tau | Python3.6新增,数学常数2π |
math.tau # 结果为 6.283185307179586 |
|
| inf | Python3.5新增,正无穷大 |
略 |
|
| nan | Python3.5新增,浮点数的NaN,相当于float('nan') |
略 |
|
| 舍入运算 | |||
| ceil(x) | 返回x的向上舍入值 |
math.ceil(2.1) # 结果为 3 math.ceil(-2.1) # 结果为 -2 |
|
| floor(x) | 返回x的向下舍入值 |
math.floor(2.8) # 结果为 2 math.floor(-2.8) # 结果为 -3 |
|
| trunc(x) | 将x截为最接近于零的整数 |
math.floor(2.8) # 结果为 2 math.floor(-2.8) # 结果为 -2 |
|
| 一般数学计算 | |||
| fabs(x) | 返回x的绝对值,其效果同内置函数abs() |
math.fabs(-2.8) # 结果为 2.8 |
|
| fsum(s) | 返回可迭代序列s中的和,其效果比内置函数sum()更精确 |
math.fsum([1,1e100,-1e100]) # 结果为 1.0 sum([1,1e100,-1e100]) # 结果为 0.0(内置函数计算) |
|
| fmod(x, y) | 返回x % y,浮点数亦可作取模运算 |
math.fmod(8,3) # 结果为 2.0 |
|
| pow(x, y) | 乘方运算,返回x**y |
math.pow(2,3) # 结果为 8.0 |
|
| sqrt(x) | 返回x的平方根 |
math.sqrt(4) # 结果为 2.0 |
|
| hypot(x, y) | 返回坐标点(x,y)到原点的几何距离,即sqrt(x*x + y*y) |
math.hypot(3,4) # 结果为 5.0 |
|
| factorial(x) | 返回x的阶乘 |
math.factorial(4) # 结果为 24 |
|
| copysign(x, y) | 返回与y具有相同符号的x |
math.copysign(1,-3) # 结果为 -1.0 |
|
| gcd(x, y) | Python3.5新增,返回x与y的最大公约数(Greatest Common Divisor) |
math.gcd(6,8) # 结果为 2 |
|
| exp(x) | 返回 ex值 |
math.exp(1) # 结果为 2.718281828459045 |
|
| expm1(x) | Python3.2新增,返回exp(x)-1, |
math.expm1(1) # 结果为 1.718281828459045 |
|
| ldexp(x, i) | 返回 x * 2i |
math.ldexp(4, 10) # 结果为 4096.0 |
|
| log(x [,base]) | 返回指定base为底的x的对数,base默认为自然常数math.e |
math.log(math.e) # 结果为 1.0 math.log(100,10) # 结果为 2.0 |
|
| log10(x) | 返回以10为底的x的对数 |
math.log10(100) # 结果为 2.0 |
|
| log2(x) | Python3.3新增, |
math.log2(8) # 结果为 3.0 |
|
| log1p(x) | 返回1+x的自然对数 |
math.log1p(math.e-1) # 结果为 1.0 |
|
| erf(x) | Python3.2新增,返回x的误差函数(统计学公式) |
math.erf(1) # 结果为 0.8427007929497149 |
|
| erfc(x) | Python3.2新增,返回x的互补误差函数(统计学公式) |
math.erfc(1) # 结果为 0.1572992070502851 |
|
| gamma() | Python3.2新增,返回x的伽玛函数(概率学公式) |
略 |
|
| lgamma() | Python3.2新增,返回x的伽玛函数的绝对值的自然对数(概率学公式) |
略 |
|
| 三角函数 | |||
| sin(x) | 正弦函数 |
math.sin(math.pi/2) # 结果为 1.0 |
|
| cos(x) | 余弦函数 |
math.cos(math.pi/4) # 结果为 0.7071067811865476 |
|
| tan(x) | 正切函数 |
math.tan(math.pi/3) # 结果为 1.7320508075688767 |
|
| asin(x) | 反正弦函数 |
math.asin(1.0) # 结果为 1.5707963267948966 |
|
| acos(x) | 反余弦函数 |
math.acos(1.0) # 结果为 0.0 |
|
| atan(x) | 反正切函数 |
math.atan(inf) # 结果为 1.5707963267948966 |
|
| atan2(y, x) | 返回atan(y/x) |
math.atan2(2,2) # 结果为 0.7853981633974483 |
|
| degrees(x) | 将x从弧度转换为角度 |
math.degrees(math.pi/2) # 结果为 90.0 |
|
| radians(x) | 将x从角度转换为弧度 |
math.radians(180) # 结果为 3.141592653589793 |
|
| 双曲函数 | |||
| sinh(x) | 双曲正弦函数 |
略 |
|
| cosh(x) | 双曲余弦函数 |
略 |
|
| tanh(x) | 双曲正切函数 |
略 |
|
| asinh(x) | 反双曲正弦函数 |
略 |
|
| acosh(x) | 反双曲余弦函数 |
略 |
|
| atanh(x) | 反双曲正切函数 |
略 |
|
| 其他 | |||
| modf(x) | 返回元组形式的x的小数和整数部分 |
math.modf(3.14) # 结果为 (0.14000000000000012, 3.0) |
|
| frexp(x) | 返回元组形式的x的正浮点尾数和浮点指数 |
math.frexp(100.0) # 结果为 (0.78125, 7) |
|
| remainder(x, y) | Python3.7新增,返回x类似浮点数结构的尾数,计算方式为:x-n**y,其中n为最佳接近x/y的整数。 |
math.remainder(10,1) # 结果为 0.0 |
|
| isinf(x) | 如果x是正无穷大,则返回True |
math.isinf(inf) # 结果为 True |
|
| isfinite() | Python3.2新增,如果x不是无穷大的数,则返回True |
math.isfinite(123) # 结果为 True |
|
| isnan(x) | 如果x是浮点数的NaN(Not a Number),则返回True |
math.isnan(float('nan')) # 结果为 True |
|
| isclose(a, b) | Python3.新增,如果a和b足够接近,则返回True |
math.isclose(0.1,0.1000000001) # 结果为 True |
|
(4)表达式与语句
表达式与语句的根本区别在于:语句没有值,而表达式有值。
● 赋值语句
由于赋值语句是“语句”,故其没有值,不能像C语言那样使用诸如 if(a=3)之类的形式(C语言的赋值语句有值,值为赋值内容),但Python的赋值语句支持链式赋值、增量赋值、序列解包赋值等多种形式。
x = 1 # 普通赋值
x = y = 1 # 链式赋值
x += 1 # 增量赋值(使用增量运算符 += )
x,y,z = (1,2,3) # 序列解包赋值(将元组中的3个值分别赋给x,y,z)
x,y = y,x # 交换x和y的值
● del语句
del语句(del既不是内置函数,也不是运算符,是语句)可以移除一个变量名对实例的引用,并且也会移除这个变量名本身。 但是del不会真正在内存中删除实例,删除实例的工作是由“垃圾收集器”做的,当某个实例的被引用计数减到0时,垃圾收集器会真正删除这个实例并释放其占用的内存。
# ---------- del 示例1:----------
x = 1
del x # 之后x就不可用了 # ---------- del 示例2:----------
x = 'Hello'
y = x
del x # 虽然解除了x对'Hello'的引用,但由于y还指向'Hello',故'Hello'其实还在
print(y) # 结果为 'Hello'
● 条件表达式
条件表达式和C语言中条件赋值功能大致相同,语法格式如下:
x = a if 布尔表达式 else b
含义为:当布尔表达式的值为True,则将a赋值给x;否则,将c赋值给x。 条件表达式在“列表推导”和“生成器表达式”中比较有用。
● 连续比较表达式
Python支持比较运算符的连写,如:a < b < c < d,这样可以让代码看上去更精简。
Python语法速查: 5. 运算符、math模块、表达式的更多相关文章
- Python语法速查: 4. 字符串常用操作
返回目录 (1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串 ...
- Python语法速查:目录
1. 数据类型与内置函数 2. 列表.元组.字典.集合操作 3. 字符串格式化 4. 字符串常用操作 5. 运算符.math模块.表达式 6. 循环与迭代 7. 函数基础 8. 类与对象 9. 函数进 ...
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- Python语法速查: 6. 循环与迭代
返回目录 (1)while循环与for循环 while仅能用于普通循环,而for除了可以做循环外,还可以遍历序列.集合.字典.迭代器等. 需要注意的是,在类似:for i in somelist: 的 ...
- Python语法速查: 14. 测试与调优
返回目录 本篇索引 (1)测试的基本概念 (2)doctest模块 (3)unittest模块 (4)调试器和pdb模块 (5)程序探查 (6)调优与优化 (1)测试的基本概念 对程序的各个部分建立测 ...
- Python语法速查: 1. 数据类型与内置函数
返回目录 (1)常用内置数据类型 分类 类型名称 描述 数字 int 整数 float 浮点数 complex 复数 bool 布尔值 序列 str 字符串(不可变序列) list 列表 tuple ...
- Python语法速查: 15. 常用数据结构
返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...
- Python语法速查: 12. 文件与输入输出
返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...
- Python语法速查: 7. 函数基础
返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
随机推荐
- java之动态代理设计模式
代理:专门完成代理请求的操作类,是所有动态代理类的父类,通过此类为一个或多个接口动态地生成实现类. 弄清动态代理的关键是清楚java的反射机制,在https://www.cnblogs.com/xix ...
- mac下使用minicom几个注意事项
一 安装: 安装是比较简单的,直接: brew install minicom 二 查找串口驱动 这里不得不吐槽苹果公司,搞一个串口,从来就不像ubuntu中那样很简洁的名字,这里的名字一般是一长串, ...
- js 日期格式化小问题
看一个图 toLocaleString 的格式是 yyyy/MM/d , 想要 yyyy/MM/dd, toISOString 的格式基本满足, 本想直接 split("T"), ...
- Jmeter中使用HTTP信息头管理器发送json格式请求体的接口
Jmeter中,如果请求体的格式为x-www-form-urlencoded,则不需要添加请求头,保持默认即可,但是如果遇到接口的请求体格式为json时,就要用到HTTP信息头管理器,在线程组上右键— ...
- fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Fiddler的HTTPS抓包功能." 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启, ...
- 如何抓取 framework input 事件相关 log
出现事件输入相关的问题时, 建议先 followhttp://429564140.iteye.com/blog/2355405来检测对应的设备是否有响应输入 如果没有响应输入,则可能是 driver ...
- Eclipse如何重置窗口
https://jingyan.baidu.com/article/915fc41459585f51394b20c3.html 在Eclipse进行开发的时候,我们经常会由于这个窗口或者那个窗口没有打 ...
- pgwSlideshow.js
<!DOCTYPE html> <html> <head id="Head"> <meta http-equiv="Conten ...
- PWA 学习笔记(五)
离线与缓存 资源请求的拦截代理: 1.资源请求的判断: (1)fetch 事件会拦截页面上所有的网络资源请求,但我们通常只对部分资源请求进行处理, 其余的请求会继续走浏览器默认的资源请求流程 (2)f ...
- diango中的MTV——FBV/CBV以及装饰器的复用问题解决
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...