• Python-----学了今天,忘了昨天.


    1. 生成器初始
    
       - 生成器本质就是迭代器。python社区生成器与迭代器是一种。生成器与迭代器的唯一区别:生成器是我们自己用python代码构建的。
    
    2. 生成器产生方式
    
       - 生成器函数。
       - 生成器表达式。
       - python给你提供的一些内置函数,返回一个生成器。
    
    3. 生成器函数。
    
       - 之前接触的函数:
    
    
     # def func():
     #     print(111)
     #     return 2
     # ret = func()
     # print(ret)
     # 执行此函数,遇到return结束函数。
     # 将数字2返回给ret。
     
    
    
    - 生成器函数: 只要函数中出现了yield那么他就不是函数,它是生成器函数
    
    

    def func():
    # print(111)
    # print(111)
    # print(111)
    # print(111)
    # print(111)
    # print(111)
    yield 2,4,5
    yield 3
    yield 4
    yield 5
    ret = func() # 生成器对象

    print(ret) # <generator object func at 0x0000000001E10F68>

    '''

    类比

    l1 = [2,] [2,3,4,5]
    obj = iter(l1)

    '''

    只要函数中出现了yield那么他就不是函数,它是生成器函数。

    一个next对应一个yield.

    print(next(ret))

    print(next(ret))

    print(next(ret))

    print(next(ret))

    print(next(ret))

    print(next(ret))

    
    4. yiled与return的区别
    
    

    return 结束函数,给函数的执行者返回值(多个值通过元组的形式返回)。

    yield 不结束函数,对应着给next返回值(多个值通过元组的形式返回)。

    
    5. send(了解) 
    
    pass
    
    6. 生成器的举例
    
    

    def eat_baozi():

    list1 = []

    for i in range(1,2001):

    list1.append(f'{i}号包子')

    return list1

    print(eat_baozi())

    def eat_baozi_gen():
    for i in range(1,2001):
    # print(11)
    yield f'{i}号包子'

    '''

    ret1 = eat_baozi_gen()

    ret2 = eat_baozi_gen()

    # print(ret1)

    # print(ret2)

    print(next(ret1))

    print(next(ret1))

    print(next(ret1))

    print(next(ret2))

    print(next(ret2))

    print(next(ret2))

    print(next(ret))

    print(next(ret))

    '''

    ret = eat_baozi_gen()

    for i in range(200):

    print(next(ret))

    for i in range(200):

    print(next(ret))

    
    7. yiled与yiled from。
    
    

    yield from

    def func():

    l1 = [1, 2, 3]

    yield l1

    ret = func()

    print(next(ret))

    print(next(ret))

    print(next(ret))

    def func():

    l1 = [1, 2, 3]

    yield from l1

    '''

    yield 1

    yield 2

    yield 3

    '''

    ret = func()

    print(next(ret))

    print(next(ret))

    print(next(ret))

    yield : 对应next给next返回值

    yield from 将一个可迭代对象的每一个元素返回给next

    yield from 节省代码,提升效率(代替了for循环)

    
    
    
    8. 列表推导式,生成器表达式(字典推导式,集合推导式)。
    
    - 列表推导式:一行代码构建一个有规律比较复杂的列表。
    - 列表推导式与之前写法对比
    
    

    l1 = [1,2,3......100]

    l1 = []

    for i in range(1,101):

    l1.append(i)

    print(l1)

    列表推导式

    l1 = [i for i in range(1, 101)]

    print(l1)

    
    - 两种构建方式:
      1.循环模式: [变量(加工后的变量) for 变量 in iterable]
      2.筛选模式: [变量(加工后的变量) for 变量 in iterable if 条件]
    
      
    
    - 循环模式:
    
      ```
      # 循环模式:
      # 将10以内所有整数的平方写入列表。
      # print([i**2 for i in range(1, 11)])
      # 100以内所有的偶数写入列表.
      # print([i for i in range(2, 101, 2)])
      # 从python1期到python100期写入列表list
      # print([f'python{i}期' for i in range(1, 101)])
      
      ```
    
    - 筛选模式:
    
      ```
      # print([i for i in range(1, 101) if i > 49])
      # 三十以内可以被三整除的数。
      # print([i for i in range(1, 31) if i % 3 == 0])
      # 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
      # l1 = ['barry', 'fdsaf', 'alex', 'sb', 'ab']
      # print([i.upper() for i in l1 if len(i) > 3])
      # 找到嵌套列表中名字含有两个‘e’的所有名字(有难度)
      names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
               ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
      # l1 = []
      # for i in names:
      #     for j in i:
      #         if j.count('e') > 1:
      #             l1.append(j)
      # print(l1)
      
      print([j for i in names for j in i if j.count('e') > 1])
      ```
    
    - 列表推导式的优缺点:
    
      ```
      # 列表推导式的优缺点:
      # 优点:
          # 1, 简单,快捷,装b。
      # 缺点:
          # 2. 可读性不高,不好排错。
      # 慎用,不要入迷。
      ```
    
    - 生成器表达式:
    
    与列表推导式几乎一模一样。
    
    循环模式,筛选模式。
    
    

    obj = (i for i in range(1, 11))

    # print(obj)

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    # print(next(obj))

    
    - 如何触发生成器(迭代器)取值?
    
    

    # 1. next(obj)

    # 2. for 循环

    # for i in obj:

    # print(i)

    # 3. 数据转化

    print(list(obj))

    生成器表达式:生成器 节省内存。

    
    - 字典推导式,集合推导式
    
    

    字典推导式,集合推导式: 两种模式: 循环模式,筛选模式

    l1 = ['小潘', '怼怼哥','西门大官人', '小泽ml亚']

    {0: '小潘', 1: '怼怼哥', 2: '西门大官人'}

    dic = {}

    for index in range(len(l1)):

    dic[index] = l1[index]

    print(dic)

    print({i:l1[i] for i in range(len(l1))})

    1~100

    print({i for i in range(1, 101)})

    
    
    
    9. 内置函数I。
    
    内置函数:内置的函数,python中的内置函数68种。13种是在面向对象之后讲解,还有一些不讲的。
    
    

    eval exce

    # 慎用

    s1 = "{1: 'alex'}"

    s2 = '1 + 3'

    eval 剥去字符串的外衣,返回里面的本质

    ret = eval(s1)

    print(ret,type(ret))

    print(eval(s2))

    exec 代码流,过程。

    s3 = '''

    for i in range(3):

    print(i)

    '''

    exec(s3)

    s3 = input('>>>')

    print(eval(s3))

    hash()

    print(hash(123214134))

    print(hash('fkljdsaklgjdfs'))

    print(hash('gjdfs'))

    help()

    print(help(str.count))

    callable **

    def a():

    pass

    b = 3433

    a()

    b()

    print(callable(a))

    print(callable(b))

    int **

    print(int(3.14))

    print(int('123'))

    print(float(100))

    print(complex(1,2))

    print(bin(100)) # 将十进制转化成二进制。 **

    print(oct(10)) # 将十进制转化成八进制字符串并返回。

    print(hex(17)) # 将十进制转化成十六进制字符串并返回。 **

    print(hex(15))

    计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)分页用到

    print(divmod(10, 3)) # **

    保留小数的有效位置

    print(round(3.1485926,2))

    print(pow(3, 3)) # 333

    print(pow(3, 3, 2))

    输入字符寻找其在unicode的位置。

    print(ord('a'))

    print(ord('中'))

    输入位置数字找出其对应的字符

    print(chr(98)) # **

    print(chr(20104)) # 予

    repr 原形毕露 **

    print('太白')

    print(repr('太白'))

    msg = '我叫%r' %('太白')

    print(msg)

    all any **

    0,'',[],{},set(),(),None

    l1 = [1, 'fgdsa', [], {1: 2}]

    l2 = [0, '', [], {}]

    print(all(l1)) # 判断可迭代对象元素全部都为True,返回True

    print(any(l2)) # 判断可迭代对象元素只要有一个True返回True

    
    
    
    10. 匿名函数。
    
     ```
     # 匿名函数:没有名字的函数
     # 匿名函数只能构建简单的函数,一句话函数。
     
     
     def func(x,y):
         return x + y
     # print(func(1, 2))
     
     # 匿名函数构建
     # func2 = lambda x,y: x + y
     # print(func2(1, 2))
     
     # 匿名函数最常用的就是与内置函数结合使用。
     
     # 写匿名函数:接收一个可切片的数据,返回索引为 0与2的对应的元素(元组形式)。
     
     # func = lambda x: (x[0],x[2])
     # print(func('太白金星'))
     # 写匿名函数:接收两个int参数,将较大的数据返回。
     
     # func1 = lambda x, y: x if x > y else y
     # print(func1(100,2))
     
     # func2 = lambda : 3
     # print(func2())
     # str() dir() range() len() print() max() min() open()
     # input() type() int() enumerate() list() id() set() dict()
     # iter() next() tuple() bool() globals() locals() frozenset()
     # 
     
     ```
    
     
    
    11. 内置函数II.
    
     ```
     # sep 设定分割符。
     # end 默认是换行可以打印到一行
     # print(1, 2, 3, sep='|')
     # print(1, 2, end=' ')
     # print(3, 4)
     # f = open('log','w',encoding='utf-8')
     # # f.write('写入文件')
     # print('写入文件', file=f)
     
     # list
     # l1 = list('fdsafd')
     # print(l1)
     
     # dict
     # 创建字典的几种方式
     # dic = {1: 2}
     # # 字典推导式
     # # print({i: 1 for i in range(3)})
     # # dict()
     # dic = dict(one=1, two=2, three=3)
     # print(dic)
     # # fromkeys()
     
     # abs()  获取绝对值
     # print(abs(-10))
     
     # sum() 数字相加求和
     # sum(iterable,)
     # print(sum([1,2,3,4]))
     # print(sum([1, 2, 3, 4], 100))
     
     # 非常非常非常重要的
     
     # min 可以加功能
     # print(min([22, 11, 45, 2]))
     l1 = [('alex', 73, 170), ('太白', 18, 185), ('武大', 35, 159),]
     # # l1 = [(73, 'alex'), (35, '武大'), (18, '太白')]
     # # 找年龄最小的元组
     # # print(min(l1))
     # # 通过设置key去使用min
     # # key = 函数名
     # # def func(x):  # x = ('alex', 73)
     # #     return x[1]
     #
     # # 返回值是什么就按照什么比较最小的。
     # # min 会自动的将可迭代对象的每一个元素作为实参传给x,
     '''
     第一次,x = ('alex', 73)   73
     第二次,x = ('武大', 35)   35
     第三次,x = ('太白', 18)   18
     '''
     # 将遍历的那个元素即是 ('太白', 18) 返回
     # print(min(l1,key=func))
     # print(min(l1,key=lambda x: x[1]))
     
     # def func(x):
     #     return x[1]
     
     # print(min(l1,key=func))
     # print(min(l1,key=lambda x: x[1]))
     # print(min(l1,key=lambda x: x[2])[0])
     
     
     
     
     
     a = 1
     # 练习:
     dic = {'a':3,'b':2,'c':1}
     # 将dic值最小的键返回。
     # print(min(dic,key= lambda x:dic[x]))
     # # 将dic值最小的值返回。
     # print(dic[min(dic,key= lambda x:dic[x])])
     
     # dic = {'A':['李业', 67],'b': ['怼哥', 95],'c': ['冯垚', 85]}
     #
     # # 将成绩最低的从属于的那个列表返回。
     # print(dic[min(dic,key=lambda x:dic[x][1])])
     # # 将成绩最低的分数返回。
     # print(dic[min(dic,key=lambda x:dic[x][1])][1])
     
     # max() 与min 相同。
     
     # reversed()  对一个可迭代对象进行翻转,返回一个迭代器
     
     # s1 = 'alex'
     # # print(reversed(s1))
     # for i in reversed(s1):
     #     print(i)
     
     # 内置函数:bytes()
     s1 = '太白'
     # 方法一:
     # print(s1.encode('utf-8'))
     # 方法二:
     # print(bytes(s1,encoding='utf-8'))
     
     # 解码:
     # b1 = b'xe5xa4xaaxe7x99xbd'
     # # 方法一:
     # # print(b1.decode('utf-8'))
     # # 方法二:
     # print(str(b1, encoding='utf-8'))
     ```
    
     
    
    

    生成器的初识

    生成器本质就是迭代器.python社区中生成器与迭代器是一种.生成器与迭代器唯一的区别:生成器是我们自己用python代码构建的
    生成器的产生方式

    生成器函数
    生成器表达式
    python给你提供的一些内置函数,返回一个生成器
    生成器函数

    def func():

    ​ print(111)

    ​ return 2

    ret = func() #执行此函数,遇到return结束函数

    print(ret) #将数字2返回给ret

    def func():

    ​ print(111)

    ​ yield 2

    ret = func() #生成器对象

    print(next(ret))

    111

    2

    只要函数中出现yield那么他就不是函数,他是生成器函数

    一个next对应一个yield

    yiled与return的区别

    return 结束函数 给函数的执行者返回值(返回值是多个值时通过元组的形式返回)
    yield 不结束函数 对应着给next返回值(返回值是多个值时通过元组的形式返回)
    send(了解)

    生成器的举例

    def eat_baozi():

    list1 = []

    for i in range(1,2001):

    ​ list1.append(f'{i}号包子')

    return list1

    eat_baozi()

    yield与yiled from

    yield: 对应next给next返回值

    yield from: 将一个可迭代对象的每一个元素 返回给next

    yield from: 节省代码,提升效率(代替了for循环)

    列表推导式,生成器表达式(字典推导式,集合推导式)

    列表推导式: 一行代码构建一个有规律的比较复杂的列表.

    两种构建方式:

    循环模式:[变量(加工后的变量) for 变量 in iterable]
    筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
    列表推导式的优缺点:

    优点: 简单 快捷 装逼
    缺点: 可读性不高,不好排错
    慎用 不要入迷

    生成器表达式:

    与列表表达式几乎一模一样

    循环模式,筛选模式

    如何触发生成器(迭代器)取值?

    next(obj)
    for循环
    数据转化
    生成器表达式: 节省内存

    字典推导式:两种模式 循环模式 筛选模式

    内置函数1:python中的内置函数68种.

    eval 剥去字符串的外衣,返回里面的本质 慎用
    exec 执行代码流 过程
    hash 计算hash值
    help 提供帮助的
    callable 判断一个对象是否可调用的
    int 取整 转换成整数
    float 转换成小数
    complex -数
    bin 将十进制转换成二进制
    oct 将十进制转换成八进制
    hex 将十进制转换成十六进制
    divmod 计算除数与被除数的值 分页用到
    round 保留小数的有效位数会四舍五入
    pow 求次幂
    bytes 用于不同编码之间的转换
    ord 输入字符找该字符编码的位置 输入字符寻找其在Unicode的位置
    chr 输入位置数字找出其对应的字符
    repr 返回一个对象的string形式(原形毕露)
    all 判断可迭代对象元素全部为True返回True any 判断可迭代对象只要有一个元素为True就返回True
    内置函数

    sep: 设定分隔符
    end:默认是换行可以打印到一行
    list:
    dict:
    abs:获取绝对值
    sum:sum(iterable,) 只能是数字相加
    max():求最大值
    min():求最小值可以加功能
    reversed 对一个可迭代对象进行翻转返回一个迭代器
    匿名函数:没有名字的函数

    匿名函数只能构建简单的函数,一句话函数.
    匿名函数的构建 lambda 匿名函数最常用的就是与内置函数结合使用
    func = lanbda x,y: x+y

  • 相关阅读:
    .NET Core SignalR 和 .NET SignalR 区别
    MySQL 连接出现 Authentication plugin 'caching_sha2_password' cannot be loaded
    Geohash 基本知识及 .NET 下计算相邻8个区域编码
    ASP.NET 下配置请求大小、请求时间等参数
    .NET Core、EF、Dapper、MySQL 多种方式实现数据库操作(动态注册实体类)
    .NET Core 开发常用命令(VS Code)
    ping
    exec与xargs区别
    doc转docx
    读取docx表格中的信息
  • 原文地址:https://www.cnblogs.com/hql1117/p/11061091.html
Copyright © 2020-2023  润新知