Python流控制工具

流控制工具

if语句

>>> x = 0
>>> if x < 0:
...     x = 0
...     print('Negative changed to zero')
... elif x == 0:
...     print('Zero')
... elif x == 1:
...     print('Single')
... else:
...     print('More')
... 
Zero

for语句

  • python中的for语句像c中是给予用户定义迭代步骤和结束条件的能力,而是在列表或者字符串等任意序列的元素上迭代,按它们在序列中出现的顺序。
>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w, len(w))
... 
cat 3
window 6
defenestrate 12
  • 在python中很难正确的在迭代多项集的同时修改多项集的内容,一般是迭代多项集的副本或者创建新的多项集
>>> users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}
>>> for user, status in users.copy().items():
...     if status == 'inactive':
...         del users[user]
... 
>>> users
{'Hans': 'active', '景太郎': 'active'}
>>> active_users = {}
>>> for user, status in users.items():
...     if status == 'active':
...         active_users[user] = status
... 
>>> active_users
{'Hans': 'active', '景太郎': 'active'}

rang函数

  • range生成的序列不会包括给定的终止值,range可以不从0开始,且可以按给定的步长递增,即使是负数步长

    list(range(5, 10))
    [5, 6, 7, 8, 9]
    
    list(range(0, 10, 3))
    [0, 3, 6, 9]
    
    list(range(-10, -100, -30))
    [-10, -40, -70]
    
  • 要按照索引迭代序列,可以组合使用range和len

    a = ['Mary', 'had', 'a', 'little', 'lamb']
    for i in range(len(a)):
        print(i, a[i])
    
    0 Mary
    1 had
    2 a
    3 little
    4 lamb
    

循环中的break,continue语句和else子句

  • break 语句将跳出最近的一层 forwhile 循环。forwhile 循环可以包括 else 子句。在 for 循环中,else 子句会在循环成功结束最后一次迭代之后执行。在 while 循环中,它会在循环条件变为假值后执行。无论哪种循环,如果因为 break 而结束,那么 else 子句就 不会 执行。下面的搜索质数的 for 循环就是一个例子:
>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
... 
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

​ 没错,这段代码就是这么写。仔细看:else 子句属于 for 循环,不属于 if 语句。)else 子句用于循环时比起 if 语句的 else 子句,更像 try 语句的。try 语句的 else 子句在未发生异常时执行,循环的 else 子句则在未发生 break 时执行。 try 语句和异常详见 异常的处理

continue语句同样借鉴自c语言

>>> for num in range(2, 10):
...     if num % 2 == 0:
...         print("Found an even number", num)
...         continue
...     print("Found an odd number", num)
... 
Found an even number 2
Found an odd number 3
Found an even number 4
Found an odd number 5
Found an even number 6
Found an odd number 7
Found an even number 8
Found an odd number 9

match语句

  • match语句接受一个表达式并把它的值与一个或多个 case 块给出的一系列模式进行比较。这表面上像 C、Java 或 JavaScript(以及许多其他程序设计语言)中的 switch 语句,但其实它更像 Rust 或 Haskell 中的模式匹配。只有第一个匹配的模式会被执行,并且它还可以提取值的组成部分(序列的元素或对象的属性)赋给变量。 -> 就是说这里的match语句不需要在每一个后面都写上break
def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"
  • 这里最后一个_被作为通配符并必定会匹配成功,如果没有case匹配成功,则不会执行任何分支
  • 还可以使用 | (or)在一个模式中组合几个字面值
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值