zoukankan      html  css  js  c++  java
  • 控制语句

    条件控制

    选择结构 选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。
    单分支选择结构 if 语句单分支结构的语法形式如下:
    if 条件表达式: 语句/语句块 其中:

    • 1 .条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。
    • 2 .语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。

    条件表达式详解
    在选择和循环结构中,条件表达式的值为 False 的情况如下: False、0、0.0、空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空 range 对象、空迭代对象。 其他情况,均为 True。这么看来,Python 所有的合法表达式都可以看做条件表达式,甚至 包括函数调用的表达式
    条件表达式中,不能有赋值操作符“=”
    在 Python 中,条件表达式不能出现赋值操作符“=”,避免了其他语言中经常误将关系运 算符“==”写作赋值运算符“=”带来的困扰。

    双分支选择结构
    双分支结构的语法格式如下:

    if 条件表达式 : 
    	语句 1/语句块 1 
    else:
    	语句 2/语句块 2 

    三元条件运算符
    Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下: 条件为真时的值 if (条件表达式) else 条件为假时的值
    多分支选择结构
    多分支选择结构的语法格式如下:

    if 条件表达式 1 : 
    	语句 1/语句块 1 
    elif 条件表达式 2: 
    	语句 2/语句块 2 
    ...
    elif 条件表达式 n : 
    	语句 n/语句块 n 
    else:
    	语句 n+1/语句块 n+1 

    选择结构嵌套
    选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进量,因为缩进量决定了 代码的从属关系。

    循环结构

    循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反 复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果 为 True 则重复执行循环体里的语句。图示如下:

    while 循环
    while 循环的语法格式如下:

    while 条件表达式:   
        循环体语句 

    for 循环和可迭代对象遍历
    for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下:

     for 变量 in 可迭代对象: 
     	循环体语句 

    可迭代对象 Python 包含以下几种可迭代对象:

    1. 序列。包含:字符串、列表、元组
    2. 字典
    3. 迭代器对象(iterator)
    4. 生成器函数(generator)
    5. 文件对象
      range 对象
      range 对象是一个迭代器对象,用来产生指定范围的数字序列。
      格式为: range(start, end [,step]) 生成的数值序列从 start 开始到 end 结束(不包含 end)。
      若没有填写 start,则默认从 0 开始。step 是可选的步长,默认为 1。
      如下是几种典型示例:
    for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9 
    for i in range(3,10) 产生序列:3 4 5 6 7 8 9 
    for i in range(3,10,2) 产生序列:3 5 7 9

    嵌套循环
    一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”
    break 语句
    break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。
    continue 语句
    continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。
    else 语句
    while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。
    语法格式如下:

    while 条件表达式: 
    	循环体 
    else:
    	语句块
    for 变量 in 可迭代对象: 
    	循环体 
    else:
    	语句块 

    循环代码优化

    虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

    1. 尽量减少循环内部不必要的计算
    2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
    3. 局部变量查询较快,尽量使用局部变量。

    其他优化手段

    1. 连接多个字符串,使用 join()而不使用+
    2. 列表进行元素插入和删除,尽量在列表尾部操作

    使用 zip()并行迭代

    我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停
    止。

    推导式创建序列

    推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初 学者的水平。

    列表推导式

    列表推导式生成列表对象,语法如下:

    [表达式 for item in 可迭代对象 ] 或者:{表达式 for item in 可迭代对象 if 条件判断}

    字典推导式

    字典的推导式生成字典对象,格式如下:

      {key_expression : value_expression for 表达式 in 可迭代对象}

    集合推导式

    集合推导式生成集合,和列表推导式的语法格式类似:

     {表达式 for item in 可迭代对象 } 或者:{表达式 for item in 可迭代对象 if 条件判断}

    Python3 迭代器与生成器

    迭代器
    迭代是Python最强大的功能之一,是访问集合元素的一种方式。
    迭代器是一个可以记住遍历的位置的对象。
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
    迭代器有两个基本的方法:iter() 和 next()。

    >>> list=[1,2,3,4]
    >>> it = iter(list)    # 创建迭代器对象
    >>> print (next(it))   # 输出迭代器的下一个元素
    1
    >>> print (next(it))
    2
    >>>

    创建一个迭代器
    把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
    如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。
    iter_() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。
    next() 方法(Python 2 里是 next())会返回下一个迭代器对象。
    创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

    class MyNumbers:
      def __iter__(self):
        self.a = 1
        return self
     
      def __next__(self):
        x = self.a
        self.a += 1
        return x
     
    myclass = MyNumbers()
    myiter = iter(myclass)
     
    print(next(myiter))
    print(next(myiter))
    print(next(myiter))
    print(next(myiter))
    print(next(myiter))

    执行输出结果为:

    1
    2
    3
    4
    5

    StopIteration
    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

    class MyNumbers:
      def __iter__(self):
        self.a = 1
        return self
     
      def __next__(self):
        if self.a <= 20:
          x = self.a
          self.a += 1
          return x
        else:
          raise StopIteration
     
    myclass = MyNumbers()
    myiter = iter(myclass)
     
    for x in myiter:
      print(x)

    执行输出结果为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    生成器
    在 Python 中,使用了 yield 的函数被称为生成器(generator)。
    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
    调用一个生成器函数,返回的是一个迭代器对象。

    import sys
     
    def fibonacci(n): # 生成器函数 - 斐波那契
        a, b, counter = 0, 1, 0
        while True:
            if (counter > n): 
                return
            yield a
            a, b = b, a + b
            counter += 1
    f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
     
    while True:
        try:
            print (next(f), end=" ")
        except StopIteration:
            sys.exit()

    执行以上程序,输出结果如下:

    0 1 1 2 3 5 8 13 21 34 55

    具体的关于参考:Python yield 使用浅析

    别废话,拿你代码给我看。
  • 相关阅读:
    JAVA,JSP,Servlet获取当前工程路径-绝对路径
    Oracle中Null与空字符串' '的区别
    使用JDBC调用存储过程
    oracle 11g SQL语句补充学习
    flutter 登录后跳转到根路由
    Mac下mongodb connect failed 连接错误解决方法
    flutter 新增安卓ios 闪图
    npm 发布包
    js中setTimeout() 时间参数为0
    ionic3 打包 混淆代码
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707523.html
Copyright © 2011-2022 走看看