python学习笔记(四)、条件、循环及其他语句

时间:2023-12-24 08:23:13

1 再谈print和import

  1.1 打印多个参数

    print 能够同时打印多个表达式,并且能自定义分隔符。如下:

    print('a','b','c')  ——> a b c

    print('a','b','c',sep="_")  ——> a_b_c

  1.2 import

    导入模块时,能够给导入的模块取一个别名(相对于生活中的小名,不管怎么叫,还是你而已),方法是在语句末尾添加 as 子句并指定别名。

    import math as foobar

    from pi import math as PI

2 赋值

  即便是不起眼的赋值语句也蕴含着一些敲门。

  2.1 序列解包

  python 能够同时(并行)给多个变量赋值。如 x,y,z = 1,2,3          x,y = y,x 。这样的操作我们称之为序列解包(可迭代对象解包):将一个序列(任何可迭代对象)解包,并将得到的值存储到一系列变量中。值得注意的是,要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则python将引发异常。

  如果你想要收集要解包的序列包含的元素多余值,可以使用星号运算符( * )来收集,这样无需确保值和变量的个数相同。如:

  a, *b , c = (1, 2, 3, 4)  ——> b = [2, 3]

  2.2 链式赋值

  将多个变量关联到同一个值。如:x = y = fn1()

  2.3 增强赋值

  可以不编写代码x = x + 1,而将右边表达式中的运算符移到赋值运算符( = )的前面,从而写成 x += 1。这称为增强赋值。适用于所有标准运算符,如+、-、* 、%等。

3 代码块

  代码块是一组语句,可在满足条件时执行(if语句),可执行多次(循环),等等。代码块是通过缩进代码(即在前面加空格)来创建的。如:

  while True:

      ....

      ....

4 条件和条件语句

  4.1 这正是布尔值得用武之地

  用作布尔表达式时,下面的都将被解释器视为

  False None 0 "" () '' [] {}

  换而言之,标准值False和None、各种类型的数值0、空序列以及空映射都被视为假,其他各种值都被视为真。

  布尔值True和False属于类型bool,与list、str、tuple和dict一样,都可以用来转换其他值。如bool("aa")  ——> True

  4.2 if...else / if...elif...elif...else语句

  if 语句能够让你有条件的执行代码。并且if 条件语句中能够通过代码块嵌套if语句。

  4.3 更复杂的条件

    4.3.1 比较运算符

    常见的比较运算符有==、<、> 、!= 等,python中还可以用is、in来比较对象。

    x is y    x和y是同一个对象时返回True

    x is not y   x和y不是同一个对象时返回True

    x in y    x是容器(如序列)y的成员时返回True

    x not in y   x不是容器(如序列)y的成员时返回True

    还能够进行链式标记,如 1 <= number < 20。

    4.3.2 布尔运算符

    and 、or not。and表示同时满足两个条件才为True; or表示只有有一个条件满足就为True,否则为False; not表示相反。布尔运算符有个有趣的特征:只做必要的技术,也就是常说的短路,即短路逻辑(延迟求值)。

  4.4 断言

  关键字 assert ,当条件满足时执行,不满足时程序异常退出,一般用于程序中的检查点。

5 循环

  使程序多次执行。

  5.1 while循环

  while 条件:

    ......

  当满足条件的时候,执行程序块。

  5.2 for 循环

  for a1 in list1:

    ......

  对可迭代的对象(如序列)进行遍历。

  5.3 迭代字典

  for key in dict1:

    dict1[key]......

  5.4 一些迭代工具

    5.4.1 并行迭代

    有时候你可能想同时迭代两个序列,python提供了一个内置函数 zip ,它将两个序列 “缝合” 起来,并返回一个由元祖组成的序列。如:

    list(zip(names,ages))  ——> [(name1,age1),(name2,age2).....]

    值得注意的是,zip 比不需要两个序列的长度len相等,zip只取两个序列长度的最小值,即ziplen = min((len(names),len(ages)))。

    5.4.2 迭代时获取索引

    python 提供了一个内置函数enumerate。能够在迭代的时候获取到序列项的索引值。如:

    for index,ages in enumarate(ages):

      .......

    enumerate函数相当于把序列转为一个dict字典类型。key为index,value为序列对应的值。

    5.4.3 方向迭代和排序后再迭代

    使用函数:reversed和sorted。

  5.5 跳出循环

    在编码过程中,有时候只要当满足一定条件才能执行循环、跳出循环等。

    5.5.1 break

    跳出当前循环。并且能够在循环中添加一条else子句,它表示在没有调用break 时才执行。如:

    for age in ages:

      if age > 10 :

        break

    else:

      print("ages中年龄全部都小于等于10")

    5.5.2 continue

    表示结束当前迭代,并跳到下一次迭代开头。即意味着跳过循环体重余下的语句,但不结束循环。

6 简单推导

  列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。如:

  [x * x for x in range(10)]    表示0~9 的平方列表。

  [x * x for x in range(10) if x%2 == 0]    表示0~9中能够被整除2的数的平方列表

  [(x,y) for x in range(10) for y in range(10)]    等效于两个for循环,表示x从0~9、y从0~9的笛卡尔积。

7 pass、del、exec、eval

  7.1 pass

  由于python中代码块不能为空,通常用pass 占位符来表示,代表什么都不用做。

  7.2 del

  对于你不再使用的对象,python通常对将其删除。del obj  不仅会删除到对象的引用,还会删除名称本事。

  7.3 exec

  函数exec将字符串作为代码执行。

  7.4 eval

  函数eval将字符串作为表达式执行并返回结果。