zoukankan      html  css  js  c++  java
  • 简明Python3教程 7.运算符和表达式

    简介

    你写的大多数逻辑行都包含表达式。表达式的一个简单例子是2 + 3。一个表达式可分为操作符和操作数两部分。

    操作符的功能是执行一项任务;操作符可由一个符号或关键字代表,如+ 。操作符需要数据以供执行其功能,这些数据名为操作数。在上面的例子中,23是操作数。

    操作符

    我们在这里简单地介绍操作符及其用途:

    你可在Python解释器中交互验证下面给出的例子。例如,验证2 + 3,在Python解释器提示符中输入:

    >>> 2 + 3
    5
    >>> 3 * 5
    15
    >>>
    操作符及其用途

    操作符

    名称

    用途

    举例

    +

    使两操作数相加

    3 + 5 得到 8. 'a' + 'b' 得到 'ab'.

    -

    求出前后两数之差。若第一个操作数未写则默认为0。

    -5.2 得道一个负数, 50 - 24得到26

    *

    得出两数乘积或返回重复若干次的字符串。

    2 * 3得到6'la' * 3得到'lalala'.

    **

    返回x的y次幂。

    3 ** 4得到813 * 3 * 3 * 3

    /

    将x除以y。

    4 / 3 得到 1.3333333333333333

    //

    取整除

    返回最大的整数商。

    4 // 3 得到 1

    %

    取模

    返回余数。

    8% 3 得到2-25.5% 2.25得到1.5.

    <<

    左位移

    将操作数向左移动若干bit位。(数字在内存中以二进制表示)

    2 << 2 得到 82在二进制中表示为10 。左位移两bit位后得到1000,十进制中表示为8

    >>

    右位移

    将操作数向右移动若干bit位。

    11 >> 1得到511二进制下表示为1011,右位移一位后得到101,十进制中表示为5

    &

    按位与

    数的按位与。

    5 & 3 得到 1

    |

    按位或

    数的按位或。

    5 | 3得到7

    ^

    按位异或

    数的按位异或。

    5 ^ 3得到6

    ~

    按位翻转

    x的按位翻转是-(x+1)。

    ~5得到-6

    <

    小于

    返回x是否小于y。所有比较运算符返回布尔值TrueFalse。请注意布尔值大小心敏感。

    5 < 3得到False3 < 5得到True.

    比较运算符可任意连接,如3 < 5 < 7得到True.

    >

    大于

    返回x是否大于y。

    5 > 3 得到True。如果两个操作符都是数字,解释器会将其转换到同一类型后再比较。若否则返回False

    <=

    小于等于

    返回x是否小于等于y。

    x = 3; y = 6; x <= y返回True

    >=

    大于等于

    返回x是否大于等于y。

    x = 4; y = 3; x >= 3得到True

    ==

    等于

    比较两操作数是否相等。

    x = 2; y = 2; x == y得到True

    x = 'str'; y = 'stR'; x == y得到False

    x = 'str'; y = 'str'; x == y得到True

    !=

    不等于

    比较两操作数是否不相等。

    x = 2; y = 3; x!= y得到True

    not

    布尔非

    若X为True则返回False,反之亦然。

    x = True; not x返回False

    and

    布尔与

    无论y值为何,若X为Falsex and y 返回False

    x = False; y = True; x and y由于x为False返回False。此例中Python因为已知and左值为False而不会计算整个布尔表达式,这是短路求值法

    or

    布尔或

    若x为True则返回True,否则返回y的布尔值。

    x = True; y = False; x or y返回True。布尔或同样使用短路求值。

    数学运算与赋值捷径

    对一个变量进行运算后再赋值给其自身是常见的,因此对于此类表达式有对应捷径:

    你可将:

    a = 2; a = a * 3

    写成:

    a = 2; a *= 3

    注意:变量 = 变量 操作符 表达式变为了变量 操作符= 表达式

    运算顺序

    如果你遇到了类似2 + 3 * 4的表达式,首先做加法还是乘法?先做乘法,高中数学如是说。这意味着乘法运算符比加法运算符有更高的优先级。

    下表中以从低到高的顺序给出了Python中操作符优先级列表。给定一个表达式,Python将会首先计算在此表中靠下的操作符与表达式,然后计算靠上的操作符与表达式。

    此表取自Python reference manual,包括了所有的运算符。建议使用圆括号标注具有较高优先级的部分,这可使程序更可读。详情请看改变计算顺序

    操作符优先级

    操作符

    描述

    lambda

    Lambda表达式

    or

    布尔或

    and

    布尔与

    not x

    布尔非

    in, not in

    成员测试

    is, is not

    同一性测试

    <, <=, >, >=,!=, ==

    比较运算符

    |

    按位或

    ^

    按位异或

    &

    按位与

    <<, >>

    位移

    +, -

    加减

    *, /, //, %

    乘除、取整除、取余

    +x, -x

    正负

    ~x

    按位非

    **

    x.attribute

    属性引用

    x[index]

    下标

    x[index1:index2]

    寻址段

    f(arguments …)

    函数调用

    (expressions, …)

    显示绑定或元组

    [expressions, ...]

    显示列表

    {key:datum, …}

    显示字典

    表中仍未接触到的运算符将会在后续章节中说明。

    拥有相同优先级的运算符位于上表的同一行中,例如+-拥有相同优先级。

    改变计算顺序

    使用括号可增加表达式可读性。例如2 + (3 * 4)就比需要运算符优先级知识的2 + 3 * 4更好理解。但是仍要避免过量使用括号,例如(2 + (3 * 4))

    使用括号还可以改变运算顺序,例如在(2 + 3) * 4中括号使表达式先进行加法运算后进行乘法运算。

    结合律

    操作符在优先级相同的情况下从左向右计算,例如2 + 3 + 4等价于(2 + 3) + 4。另一些运算符如赋值运算符从右向左计算,例如a = b = c等价于a = (b = c)

    表达式

    例子:

    #!/usr/bin/python
    # Filename: expression.py
    
    length = 5
    breadth = 2
    
    area = length * breadth
    print('Area is', area)
    print('Perimeter is', 2 * (length + breadth))

    输出:

       $ python expression.py
       Area is 10
       Perimeter is 14
    

    工作原理:

    矩形的长与宽存储在同名变量中。我们通过计算面积与周长的表达式得出这两个值。我们将表达式length * breadth的值存储在变量area中,并使用print函数打印变量值。在第二种情况中,我们直接使用print函数打印表达式2 * (length + breadth)的值。

    另外即便我们没有专门在'Area is'与变量area中加入空格,Python仍美观地打印出了此输出。Python自动为我们生成了一个漂亮的输出格式并因此令程序更可读:我们不需要担心输出字符串中的空格。这是另一个Python简化程序员工作的例子。

    总结

    我们了解了书写任何程序都需要的砖块:操作符、操作数和表达式。下一步我们将了解如何在程序中使用这三者。

  • 相关阅读:
    常用词汇短语
    Java中的数据结构
    Java中的设计模式
    .NET中的编译、程序调用
    常用口语
    0. Angular框架原理
    茶叶
    NPOI自定义单元格背景颜色
    ASP.NET MVC添加Action就找不到
    navicat for mysql 导入SQL Server显示中文乱码解决办法
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468020.html
Copyright © 2011-2022 走看看