• python基础之打/解包及运算符与控制流程


    python基础之打/解包及运算符与控制流程


    python中的解压缩(即序列类型的打包和解包)

    python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包自动解包功能,比如:

    data = 2,3,6,9
    

    会使标识符data赋值成元祖(2,3,6,9),这种行为称为元祖的自动打包。在python中另一种常用的打包是从一个函数中返回多个值,如:

    return x,y
    

    就会返回单个对象,也就是元祖(x,y)。

    作为一个对偶的打包行为,python也可以自动解包一个序列,允许单个标识符的一系列元素赋值给序列中的各个元素,具体如下:

    a,b,c = range(1,4)      #等同于a=1、b=2、c=3
    
    list1 = ['name','age','gender','height']
    s1,s2,s3,s4 = list1     # s1='name',s2='age',s3='gender',s4='height'
    s1,_,_,s4 = list1       # 下划线表示不想要的数据,在这里只是用于占位
    *_,s4 = list1           #如果有多个不想要的数据可以用*_代替
    
    for k,v in mapping.items()  #用于遍历字典的items()方法返回的键值对
    

    自动打包与解包结合起来就是同时分配技术,即我们可以显式地将一系列的值赋给一系列的标识符,语法为:

    x,y,z = 3,4,6
    x,y = y,x        #依赖于同时分配技术,省去了中间值
    

    格式化输出的三种方式

    长话短说,在python发展的过程中,出现了以下几种格式化输出:

    name = 'DU'
    age = 18
    
    print("姓名:%s,年龄:%s" % (name, age))    #最开始的版本
    
    print("姓名:{},年龄:{}".format(name, age))  #升级后的
    
    print("姓名:{0},年龄:{1}".format(name, age))  #{}内是索引
    
    print(f"姓名:{name},年龄:{age}")    #以‘f'或’F'开头,直接在字符串内操作,推荐使用!
    
    

    运算符和优先级

    1. 算术运算符:

      +
      -
      *
      /
      // 整数除
      %
      **
    2. 比较运算符:

      == 等价
      != 不等价
      < 小于
      > 大于
      <= 小于等于
      >= 大于等于
    3. 逻辑运算符:

      not 逻辑非
      and 逻辑与
      or 逻辑或
    4. 相等运算符:

      is 同一实体
      is not 不同实体
    5. 整数的位运算符:

      ~ 取反
      & 按位与
      | 按位或
      ^ 按位异或
      >> 右位移,按符号位填充
      << 左位移,用零填充
    6. 序列运算符:

      s[j] 索引下标为j的元素
      s[start:stop] 切片,[start,stop)的序列
      s[start:stop:step] 切片,start+step,start+2*step...直到结束
      s+t 序列的连接
      k*s s+s+s+s+....(k次)
      val in s 检查元素val在序列s中
      val not in s 检查元素val不在序列s中
    7. 集合字典的运算符:

      key in s 检查key是s的成员
      key not in s 检查key不是s的成员
      s1 == s2 s1等价s2
      s1 != s2 s1不等价s2
      s1 <= s2 s1是s2的子集
      s1 < s2 s1是s2的真子集
      s1 >= s2 s1是s2的超集
      s1 > s2 s1是s2的真超集(s1不等于s2)
      s1 | s2 s1与s2的并集
      s1 & s2 s1与s2的交集
      s1 - s2 s1与s2的差集
      s1 ^ s2 对称差分

    运算符优先级:

    类型 符号
    成员访问 expr.member
    函数/方法调用 expr(...)
    容器下标/切片 expr[...]
    **
    一元运算符 + expr, - expr,~expr
    乘/除 *,/,//,%
    加/减 +,-
    按位位移 <<,>>
    按位与 &
    按位异或 ^
    按位或 |
    比较 is,is not,==,!=,in,not in等
    逻辑非 not
    逻辑与 and
    逻辑或 or
    条件判断 val if cond else val2
    赋值 =,+=,-=,*=等

    控制流程

    条件语句:

    条件结构(也称if语句)提供了一种方法,用以执行基于一个或多个布尔表达式的运行结果而选择的代码块。在python中,条件语句一般形式如下:

    if first_condition:
        first_body
    elif second_condition:
        second_body
    elif third_condition:
        third_body
    .
    .
    .
    else :
        else_body
    

    ​ 其中每个条件都是布尔表达式,并且每个主体包含一个或多个在满足条件时才执行的命令。如果满足第一个条件,那么将执行第一个结构体,而其他条件或者结构体不会执行。如果不满足第一个条件,那么就这个流程就以相似的方式评估第二个条件,并继续。整体构造的执行将决定必有一个结构体会被执行。

    循环语句

    python提供了两种不同的循环结构。while循环允许以布尔条件的重复测试作为自出的一般重复。for循环对定义序列的值提供了适当的迭代(如字符串中的字符、列表中的元素或一定范围内的数字)。

    while 循环

    在python中的while循环的语法如下:

    while condition:
        body
    

    执行while循环时首先测试布尔条件。如果条件为True,执行循环的主体。每次执行结构体后,重新测试循环条件,如果为True,那么开始另一轮迭代。如果条件为False,那么就终止循环。

    例子:

    j=0
    while j < len(data) and data[j] != 'X':
        j += 1
    

    这里给出一个循环,通过字符序列的索引,找到一个输入值为‘X’的值或直接到达序列的尾部。

    for 循环

    在迭代一系列的元素时,python的for循环时一种比while更便利的选择。for循环的语法可以用在任何类型的迭代结构中,如列表、元组、str、集合、字典或文件。一般语法如下:

    for element in iterable:
        body
    

    例如,我们考虑寻找一个列表的元素中寻找最大值(不使用max函数),假设列表中至少有一个元素:

    biggest = data[0]
    for val in data:
        if val > biggest:
            biggest = val
    

    虽然我们也可以用while循环来完成上面任务,但for循环的优点就是简洁,即不需要管理列表的明确索引以及构造布尔循环条件。此外,我们还可以在while循环不适用的情况下使用for循环,例如遍历一个集合set,但是它不支持任何形式的索引。

    基于索引的for循环:

    虽然for循环可以遍历每一个元素,但是有一个限制就是我们不知道这个元素在序列的哪一个位置,所以我们需要用到range()来遍历索引,比如我们想知道列表中最大元素的索引,我们可以这样:

    big_index = 0
    for i in range(len(data)):
        if data[i] > data[big_index]:
            big_index = i
    

    break 和 continue 语句

    • break

      在python中,当在循环体内执行break语句,while或for循环就会立即终止。如果在嵌套结构中使用break语句,它会导致内层循环立即终止。例如判断一个目标值是否出现在数据集中:

    found = False
    for i in data:
        if i == target:
            found = True
            break
    
    • continue

      continue语句会使循环体的当前迭代停止,但循环过程的后续迭代会正常运行。

    我们建议慎用break和continue语句,然而有些情况下,可以有效的使用这些命令,以免引入过于复杂的逻辑条件。

    扩展

    与if相似的,while和for中也可以引用else语句,else语句只会在正常循环结束之后才会执行,如果遇到break,则不会执行else,这个知识点仅作了解,一般开发过程中不会用到。


    祝大家越来越棒!

  • 相关阅读:
    org.apache.catalina.LifecycleException: Protocol handler start failed
    达梦数据库修改表失败 错误号: -6407 错误消息: 锁超时
    mybatis sql语句配置大于号小于号的处理(元素内容必须由格式正确的字符数据或标记组成)
    Unity基础—Transform类
    Naocs 配置中心报错问题
    inux 设置开机自启动 文件配置开机自启动命令
    jar中配置文件读取外面的配置文件
    Unity 制作天空盒
    Maven 剔除已存在jar包
    Maven安装本地jar包到本地仓库
  • 原文地址:https://www.cnblogs.com/Du704/p/11278537.html
Copyright © 2020-2023  润新知