• 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新增,数学常数

    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,这样可以让代码看上去更精简。

    返回目录

  • 相关阅读:
    愚蠢的程序员...
    云计算优于终端计算和集中计算?
    REST资源合集
    龙芯软件开发:使用龙芯2e的模拟器GXemul
    The Origins of Complex Numbers
    net 3.5 Ms Chart 使用心得
    XPO 第三方控件学习(DevExpress Persistent Object )系列表间关系
    show your data
    缩略数据
    单片机试题
  • 原文地址:https://www.cnblogs.com/initcircuit/p/11649018.html
Copyright © 2020-2023  润新知