python学习笔记9

python学习笔记9

一、新的格式化输出方法

# 基本使用方法
name = 'Lieve'
age = 18
msg = f'我叫{name},今年{age}'
print(msg) # 我叫Lieve,今年18

# 其他用法
dict_1 = {'name':'Lieve','age':18}
msg_1 = f'我叫{dict_1["name"]},今年{dict_1["age"]}' 
print(msg_1) # 我叫Lieve,今年18

n = 10
print(f'{n}的平方:{n**2}') # 10的平方:100

二、迭代器

  1. 可迭代对象:首先关于python中的对象,python中一切皆对象(一个实实在在存在的值)。在python中内部含有“_iter_”方法的对象称为可迭代对象(str,list,tuple,dict,range,文件句柄)

  2. 获取一个对象的所有方法

    # 使用dir方法去获取一个对象的所有方法
    # 内部有__iter__方法的对象是可迭代对象
    s1 = 'abcde'
    print(dir(s1)) # 将s1所有的方法以列表的形式返回
    
  3. 迭代器:内部含有“__iter_”方法并且含有“__next__”方法的对象。

    li_1 = [1,2,3,4,5] # 创建一个可迭代对象
    # 将可迭代对象转化成迭代器
    li = iter(li_1) # 或者li=li_1.__iter__()
    print(next(li)) # 1
    print(next(li)) # 2
    print(next(li)) # 3
    print(next(li)) # 4
    print(next(li)) # 5
    

三、生成器

  1. 生成器:生成器的本质就是迭代器。生成器是我们自己用python代码人工构建的数据结构,而迭代器都是由解释器提供或者转化得来的。

  2. 获取生成器的方式:

    1. 生成器函数:

      # 在函数中加入yield就是一个生成器函数
      def func_1():
          for i in range(3):
              yield i
      ret = func_1()
      print(type(ret)) # <class 'generator'>
      print(next(ret)) # 0
      print(next(ret)) # 1
      print(next(ret)) # 2
      print(next(ret)) # StopIteration
      """
      return:函数中只存在一个return结束函数,并且给函数的执行者返回值
      yield:只要函数中有yield那么它就是生成器而不再是函数
      生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next
      """
      
      # yield from
      def func_2():
          li_1 = [1,2,3,4,5]
          yield from li_1
          # 相当于yield 1
          # yield 2
          # yield 3
          # yield 4
          # yield 5
      
    2. 生成器表达式:

      # 列表推导式
      # 循环模式
      li_1 = [i for i in range(10)]
      print(li_1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      # 它跟一下列表生成结果一模一样
      li_2 = []
      for i in range(10):
          li_2.append(i)
      print(li_2) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      
      # 筛选模式
      li_3 = [x for i in li_1 if x%2==0]
      print(li_3) # [0, 2, 4, 6, 8]
      
      # 生成器表达式
      # 在代码写法上与列表推导式的写法几乎一模一样
      li_1 = [i for i in range(10)] # 列表推导式
      ret = (i for i in range(10)) # 生成器表达式
      
      print(li_1) 
      # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      
      print(ret) 
      # <generator object <genexpr> at 0x000001D4D311C0C8>
      
    3. python内部提供的一些生成器

四、内置函数(python提供了68个常用的内置函数)

  1. 匿名函数lambda

    # 也叫一句话函数
    # 格式 lambda 参数:表达式(返回值)
    func_1 = lambda a,b:a + b
    print(func_1(1,2)) # 3
    
  2. reversed

    # 将一个可迭代对象转换成迭代器,反向取值
    # 原列表不会变化
    li = [i for i in range(3)]
    obj = reversed(li)
    for i in range(4):
        print(next(obj))
    """
    2
    1
    0
    StopIteration
    """
    
  3. zip

    # 拉链方法
    l1 = [1,2,3,4,5]
    tu1 = ('a','b','c','d')
    s1 = 'ABC'
    obj = zip(l1,tu1,s1)
    print(obj) # <zip object at 0x000001D4D3127888>
    for i in obj:
        print(i)
    """
    (1, 'a', 'A')
    (2, 'b', 'B')
    (3, 'c', 'C')
    """
    
  4. min、max

    # 求最大最小值
    li_1 = [33,2,-9,17,-98,23,0]
    print(min(li_1)) # -98
    print(max(li_1)) # 33
    # 以绝对值方式对列表取最值
    print(min(li_1,key=abs)) # 0
    print(max(li_1,key=abs)) # -98
    # 它会自动地将可迭代对象中的每个元素按照顺序传入key对应的函数中
    # 然后用返回值进行比较大小
    
  5. sorted

    # 排序形成新对象,默认从低到高
    li_1 = [1,4,53,-9,78]
    li_2 = sorted(li_1)
    print(li_2) # [-9, 1, 4, 53, 78]
    li_3 = sorted(li_1,key=lambda x:-x)
    print(li_3) # [78, 53, 4, 1, -9]
    
  6. filter

    # 列表推导式的筛选模式
    li = [2,3,4,1,6,7,8]
    # 返回列表
    print([i for i in li if i>3]) # [4, 6, 7, 8]
    
    # 返回迭代器
    ret = filter(lambda x:x>3,li)
    print(ret) # <filter object at 0x000001D4D31238C8>
    print(list(ret)) # [4, 6, 7, 8]
    
  7. map

    # 列表推导式的循环模式
    li = ['1','2','3','4']
    ret = map(int,[i for i in li])
    print(ret) # <map object at 0x000001D4D311A608>
    print(list(ret)) # [1, 2, 3, 4]
    

猜你喜欢

转载自www.cnblogs.com/20-03-14/p/12555787.html