zoukankan      html  css  js  c++  java
  • 七、条件和条件语句

    布尔值

    真值也称为布尔值,是以在真值方面做出巨大贡献的George Blooe命名的。

    用作布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为,其它时候都为真。

    False None 0 "" [] () {}

    在有些语言中,标准的真值为0(表示假)和1(表示真).实际上,True和False不过时0和1的别名,虽然看起来不同。但作用时相同的。

    布尔值的True和False属于类型bool,而bool与list和tuple一样,可以用来转换其他的值。

    >>> bool('hello world')
    True
    >>> bool(78)
    True
    >>> bool(1)
    True
    >>> bool(0)
    False
    >>> bool({})
    False
    

      布尔运算符:and not or  (短路逻辑)

    在表达式x or y 中,如果x为真,就返回x,否则就返回y:

    >>> name = input('Name: ') or 'root'
    Name:
    >>> name
    'root'
    >>> name = input('Name: ') or 'root'
    Name: ubuntu
    >>> name
    'ubuntu'
    >>> name = input('Name: ') or 'root'
    Name:       #输入纯空格了
    >>> name
    '     '

     断言

    让程序在错误条件出现时立即崩溃。

    >>> age = 10
    >>> assert  age == 15 ,'The age must be 10'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AssertionError: The age must be 10
    

      如果条件不满足,程序立即崩溃。可以在后面加字符串,对断言做出说明。

    for

    可迭代对象是可使用for循环进行遍历的对象。

    只要能够使用for循环,就不要使用while循环。

    迭代字典

    要遍历字典里面所有关键字,可像遍历序列那样使用普通的for语句。

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

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

    d = {'x':1, 'y':2, 'z':3}
    for key, value in d.items():
        print(key, value)
    

      并行迭代

    有时候你可能想同时迭代俩个序列。

    names = ['lilei', 'hanmeimei', 'jom']
    ages = [13, 14, 15]
    for i in range(len(names)):
        print(names[i], 'is', ages[i], 'years old.')
    

      内置函数zip

    它将俩个序列缝合起来,并返回一个由元祖组成的序列。返回值是一个适合迭代的对象,要查看其内容,需用list将其转换为列表。

    >>> names = ['lilei', 'hanmeimei', 'jom']
    >>> ages = [13, 14, 15]
    >>> list(zip(names, ages))
    [('lilei', 13), ('hanmeimei', 14), ('jom', 15)]
    

      缝合后,可在循环中将元祖解包。

    names = ['lilei', 'hanmeimei', 'jom']
    ages = [13, 14, 15]
    for name, age in zip(names, ages):
        print(name, 'is', age, 'years old.')
    

      函数zip可用于缝合任意数量的序列,需要注意的是,当序列的长度不同时,函数zip将在最短的序列用完后停止。

    迭代时获取索引

    names = ['lilei', 'hanmeimei', 'jom']
    for index, name in enumerate(names):
        print(index, name)
    

      编号可以不从0开始

    names = ['lilei', 'hanmeimei', 'jom']
    for index, name in enumerate(names, 5):
        print(index, name)
    

      反向迭代和排序后再迭代

    reversed和sorted.它们类似于列表方法reversed和sort(sorted接受的参数也与sort类似)。但可用于任何序列或可迭代对象,且不就地修改,而是返回反转和排序后的版本。

    >>> sorted([7, 5, 45, 8, 9, 52])
    [5, 7, 8, 9, 45, 52]
    >>> reversed([7, 5, 45, 8, 9, 52])
    <list_reverseiterator object at 0x7ff681238b38>
    >>> list(reversed([7, 5, 45, 8, 9, 52]))
    [52, 9, 8, 45, 5, 7]
    

     sorted返回的是一个列表,而reversed返回的时一个可迭代对象。

    跳出循环

    break 跳出这个循环。
    continue 跳出这次循环,继续下一次循环。

    循环中的else子句

    for i in range(5):
        if i > 3:
            break
    else:
        print('hello')
    print('world')
    

     else子句,仅在没有调用break时才执行。

    count = 0
    while count < 5:
        count += 1
        if count < 0:
            break
    else:
        print('hello')
    print('world')
    

      

    简单推导

    列表推导是一种从其它列表创建列表得一种方式。

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

     奇偶数

    >>> [x for x in range(1, 101) if x % 2 == 0]
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
    >>> [x for x in range(1, 101) if x % 2 == 1]
    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
    

      还可以添加更多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)]
    

      pass

    有时候什么都不要做,或者是占位符。

      del

    对于你不在使用得对象,Python会将其删除(因为没有任何变量或数据结构指向它)。垃圾回收。

    使用del不仅会删除到对象本身,还会删除名称本身。

    >>> x = 1
    >>> del x
    >>> x
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'x' is not defined
    

      俩个引用

    >>> x = ['hello', 'world']
    >>> y = x
    >>> del x
    >>> y
    ['hello', 'world']
    

      只是删除名称x,并没有删除列表本身(值),在Python中,根本没有办法删除值。因为对于你不在使用得值,Python解释器会立即将其删除。

    使用exec和eval执行字符串及计算其结果。

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

    >>> exec('print("hello world")')
    hello world
    

      大多数情况下,还应向它传递一个命名空间-用于放置变量的地方;否则代码将污染你的命名空间,即修改你的变量。例如:

    >>> from math import sqrt
    >>> exec("sqrt = 1")
    >>> sqrt(4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'int' object is not callable
    

      为了安全,要提供一个字典来充当命名空间。为此添加第二个参数---字典,用作代码字符串的命名空间。

    >>> from math import sqrt
    >>> scope = {}
    >>> exec("sqrt = 1", scope)
    >>> sqrt(4)
    2.0
    >>> scope['sqrt']
    1
    

      eval

    eval是一个类似于exec的内置函数。exec执行一些列Python语句,而eval计算用字符串表示的Python表达式的值。并返回结果。(exec什么都不返回,因为它本身是条件语句)。创建Python计算器:

    >>> eval(input("Enter: "))
    Enter: 5*6-9+7
    28
    

      与exec一样,也可向eval提供一个命名空间,虽然表达式通常不会像语句那样给变量重新赋值。

      向exec和eval提供命名空间时,可在使用这个命名空间前在其中添加一些值。

    >>> scope = {}
    >>> scope['x'] = 1
    >>> scope['y'] = 2
    >>> eval("x * y",scope)
    2
    

      一个命名空间可用于多次调用exec和eval.

    小结

    打印语句:你可以使用print语句来打印多个逗号分割值。还可以指定print结尾符。(默认是换行\n)

    导入语句:在导入的函数名称过长或者这个名称你已经在使用,可以使用import...as...语句

    赋值语句:通过使用序列解包或者链式赋值,可以同时给多个变量赋值。通过增强赋值,可以就地修改变量。

    代码块:代码块用于通过缩进将语句编组。代码块可用于条件语句和循环中,还可用于函数和类定义中。

    条件语句:条件语句根据条件(布尔表达式)决定是否执行后续代码块。条件语句的一个变种条件表达式。

    断言:断言断定某件事(一个布尔表达式)为真,可包含说明为何必须如此的字符串。如果指定的字符串为假,断言将导致程序停止执行。

    循环:你可针对序列中的每个元素(如特定范围内的每个数)执行代码块,也可在条件为真时反复执行代码块。要跳过代码块中余下的内容,直接进入下一次迭代,可使用continue语句;要跳出循环,可使用break语句。另外,还可以在循环末尾添加一个else子句,它将在没有执行循环中的任何break时执行。

    推导:推导并不是语句,而是表达式。推过列表推导,可从既有列表创建出新列表。

    pass、del、exec和eval:pass语句什么都不做,但适合用作占位符。del语句用于删除变量或数据结构的成员,但不能删除值。函数exec用于将字符串作为python程序执行。函数eval计算用字符串表示的表达式并返回结果。

     

  • 相关阅读:
    python之面向对象
    python之异常处理
    python之函数的使用
    python之模块的使用
    python之循环语句
    python之文件操作
    初识Python
    python爬虫之request模块详解
    pikachu之文件上传
    pikachu靶场之暴力破解
  • 原文地址:https://www.cnblogs.com/kongzhou/p/9020803.html
Copyright © 2011-2022 走看看