美文网首页
《python基础教程(第三版)》第五章 条件、循环及其他语句

《python基础教程(第三版)》第五章 条件、循环及其他语句

作者: Colleen_oh | 来源:发表于2019-08-05 19:25 被阅读0次

    5.1 再谈print和import

    >>> print("I", "wish", "to", "register", "a", "complaint", sep="_")
    I_wish_to_register_a_complaint
    

    5.2 赋值魔法

    可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,如下例所示:

    >>> a, b, *rest = [1, 2, 3, 4]
    >>> rest
    [3, 4]
    

    还可将带星号的变量放在其他位置。

    >>> name = "Albus Percival Wulfric Brian Dumbledore"                                                                    >>> first, *middle, last = name.split()                                                                                 
    >>> middle                                                                                                              
    ['Percival', 'Wulfric', 'Brian']                                                                                        
    >>> *first,middle,last = name.split()                                                                                   
    >>> first                                                                                                               
    ['Albus', 'Percival', 'Wulfric']  
    

    增强赋值

    >>> x=2
    >>> x+=1
    >>> x
    3
    >>> x*=2
    >>> x
    6
    
    >>> fnord = 'foo'                                                                                                       
    >>> fnord += 'bar'                                                                                                      
    >>> fnord *= 2                                                                                                          
    >>> fnord                                                                                                               'foobarfoobar' 
    

    5.3 循环

    5.3.1 while循环

    x = 1
    while x <= 100:
        print(x)
        x += 1
    

    5.3.2 迭代字典

    >>> d = {'x': 1, 'y': 2, 'z': 3}
    >>> for key in d:
    ...  print(key, 'corresponds to', d[key])
    ...
    x corresponds to 1
    y corresponds to 2
    z corresponds to 3
    

    也可使用keys等字典方法来获取所有的键。如果只对值感兴趣,可使用d.values。你可能还记得,d.items以元组的方式返回键值对。for循环的优点之一是,可在其中使用序列解包。

    >>> for key, value in d.items():
    ...  print(key, 'corresponds to', value)
    ...
    x corresponds to 1
    y corresponds to 2
    z corresponds to 3
    

    5.3.3 一些迭代工具

    并行迭代

    有时候,你可能想同时迭代两个序列。假设有下面两个列表:

    >>> names = ['anne', 'beth', 'george', 'damon']                                                                         >>> ages = [12, 45, 32, 102]                                                                                            
    >>> for i in range(len(names)):                                                                                         
    ...  print(names[i], 'is', ages[i], 'years old')                                                                       
     ...                                                                                                                     
    anne is 12 years old                                                                                                   
    beth is 45 years old                                                                                                    
    george is 32 years old                                                                                                  
    damon is 102 years old  
    

    i是用作循环索引的变量的标准名称。一个很有用的并行迭代工具是内置函数zip,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。

    >>> list(zip(names, ages))
    [('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]
    >>> for name, age in zip(names, ages):
    ...  print(name, 'is', age, 'years old')
    ...
    anne is 12 years old
    beth is 45 years old
    george is 32 years old
    damon is 102 years old
    

    5.3.4 跳出循环

    1.break

    要结束(跳出)循环,可使用break。假设你要找出小于100的最大平方值(整数与自己相乘的结果),可从100开始向下迭代。找到一个平方值后,无需再迭代,因此直接跳出循环。

    from math import sqrt
    for n in range(99, 0, -1):
       root = sqrt(n)
       if root == int(root):
          print(n)
          break
    

    2.continue

    语句continue没有break用得多。它结束当前迭代,并跳到下一次迭代开头。这基本上意味着跳过循环体中余下的语句,但不结束循环。这在循环体庞大而复杂,且存在多个要跳过它的原因时很有用。在这种情况下,可使用continue,如下所示:

    for x in seq:
        if condition1: continue
        if condition2: continue
        if condition3: continue
        do_something()
        do_something_else()
        do_another_thing()
        etc() 
    

    5.4 简单推导

    列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于for循环。

    >>> [x * x for x in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
    

    这个列表由range(10)内每个值的平方组成,非常简单吧?如果只想打印那些能被3整除的平方值,该如何办呢?可使用求模运算符:如果y能被3整除,y 3 % 将返回0(请注意,仅当x能被3整除时,x*x才能被3整除)。为实现这种功能,可在列表推导中添加一条if语句。

    >>> [x*x for x in range(10) if x 3 == 0] %
    [0, 9, 36, 81] 
    

    还可添加更多的for部分。

    >>> [(x, y) for x in range(3) for y in range(3)]
    [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] 
    

    使用圆括号代替方括号并不能实现元组推导,而是将创建生成器,详细信息请参阅第9章的
    旁注“简单生成器”。然而,可使用花括号来执行字典推导。

    >>> squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)}
    >>> squares[8]
    '8 squared is 64' 
    

    在列表推导中,for前面只有一个表达式,而在字典推导中,for前面有两个用冒号分隔的表
    达式。这两个表达式分别为键及其对应的值。

    5.5 什么都不做

    有时候什么都不用做。这种情况不多,但一旦遇到,知道可使用pass语句大有裨益。
    那么为何需要一条什么都不做的语句呢?在你编写代码时,可将其用作占位符。例如,你可
    能编写了一条if语句并想尝试运行它,但其中缺少一个代码块,如下所示:

    if name == 'Ralph Auldus Melish':
       print('Welcome!')
    elif name == 'Enid':
     # 还未完成……
    elif name == 'Bill Gates':
       print('Access Denied')
    

    这些代码不能运行,因为在Python中代码块不能为空。要修复这个问题,只需在中间的代码块中添加一条pass语句即可。

    if name == 'Ralph Auldus Melish':
       print('Welcome!')
    elif name == 'Enid':
     # 还未完成……
       pass
    elif name == 'Bill Gates':
       print('Access Denied')
    

    相关文章

      网友评论

          本文标题:《python基础教程(第三版)》第五章 条件、循环及其他语句

          本文链接:https://www.haomeiwen.com/subject/ionkdctx.html