• 生成器、表达式


    生成器

    1.什么是生成器? 生成的工具。 生成器是一个 "自定义" 的迭代器, 本质上是一个迭代器。

    2.如何实现生成器 但凡在函数内部定义了的yield, 调用函数时,函数体代码不会执行, 会返回一个结果,该结果就是一个生成器。

    yield: 每一次yield都会往生成器对象中添加一个值。 - yield只能在函数内部定义 - yield可以保存函数的暂停状态

    yield与return: 相同点: 返回值的个数都是无限制的。

    不同点: return只能返回一次值,yield可以返回多个值

    迭代器对象 python内置生成的迭代器

    iter_list = list1.__ iter __()

    #自定义的迭代器

    def func():

    print('from func')

    yield 'tank'

    res = func()

    #当我们通过__ next __取值时,才会执行函数体代码。

    print(res.__ next __())

    循环10次
    
    for i in range(1,11):
    
    ​    print(i)        #1~~10
    
    python2: range(1,5) --->[1, 2, 3, 4]
    
    python3:range(1,5) --->range对象--->生成器 ---->迭代器
    
    res = range(1,5)
    
    print(res)
     #自定义range功能,创建一个自定义的生成器
    
     #(1, 3) #start --> 1 , end --->5 , move = 2
    
     def my_range(start,end,move = 1):
    while start < end
    yield start
    
     ​       start += move

    面向过程编程

    面向过程编程是一门编程思想。

    面向 过程 编程: 核心是 '过程' 二字,过程 指的是一种解决问题的步骤,即先干什么再干什么 基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。

    优点:

    将复杂的问题流程化,进而简单化

    缺点:

    若修改当前程序设计的某一部分,会导致其他部分同时需要修改,扩展性差。

    三元表达式

    三元表达式:

    可以将if...else...分支变成一行。

    语法:

    条件成立返回左边的值 if 判断条件else 条件不成立返回右边的值

    if 判断条件:
    
    ​    执行
    
    else:
    
    ​    执行
    
    
    
    求两个值的大小
    
    通过if...else语法
    
    def max(num1,num2):
    
    ​    if num1 > num2:
    
    ​        return num1
    
    ​    else:
    
    ​        return num2
    
    res = max(100,20)
    
    print(res)
    
    > 100

    三元表达式

    def max1(num1,num2):
        res = num1    if num1 > num2 else num2
        return res
    res = max1(num1,num2)
    print(res)

    列表生成式:

    可以一行实现生成列表。 语法: list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]

    for的右边是循环次数,并且可以取出可迭代对象中每一个值

    for的左边可以为当前列表添加值

    list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]

    list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]

    将list中的值,依次取出,添加到new_list中
    list = [1, 2, 3, 4]
    new_list = []
    for line in list1:
        new_list.append(line)
    print(new_list)
    
    #普通方式
    new_list = []
    for line in range(1,101):
        new_list.append(line)
    print(new_list)
    
    #列表生成器
    list = [f'1{line}' for line in range(1,101)]
    print(list)

    生成器生成式

      列表生成式: 若数据量小时采用 [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]

       优点:

         可以依赖于索引取值,取值方便

       缺点:

         浪费资源

    • 生成器生成式: 若数据量过大时采用 () ---> 返回生成器 (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

      优点:

        节省资源

      缺点:

         取值不方便

    # 生成一个有1000个值的生成器
    g = (line for line in range(1, 1000001))
    # <generator object <genexpr> at 0x00000203262318E0>
    print(g)
    
    # 列表生成式实现
    list1 = [line for line in range(1, 1000001)]
    print(list1)

    匿名函数

      无名字的函数

        :左边是参数, 右边是返回值

      lambda :

        PS: 原因,因为没有名字,函数的调用 函数名 + () 匿名函数需要一次性使用。

         注意: 匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义

    有名函数

    def func():
        return 1
    print(func())  # func函数对象 + ()
    print(func())

    匿名函数

    def  ():
        pass
    
    ()  #  + ()
    lambda 匿名(): return 1
    func = lambda : 1
    print(func())
    func = lambda : 1
    print()
  • 相关阅读:
    面向对象设计大作业第二阶段:图书馆系统
    OO之接口-DAO模式代码阅读及应用
    OO设计-有理数类的设计
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS01——线性表
    c博客06-结构体&文件
    C语言博客作业05——指针
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11857872.html
Copyright © 2020-2023  润新知