Python高级特性

切片(slice)

  • 作用:取list、tuple、str的部分元素
  • slice操作符
    • L[开始索引:结束索引:间隔]
    • 举例
      L[0:3] 取前三个元素 同L[:3]
      L[-2:-1] 取后一个元素 同L[-2:]
      L[10:20:2]从索引为10开始,每隔两个元素取一个,直到索引为20
      L[::5]从索引为0开始所有数每隔5个取一个
      L[:]复制list
      L[::-1]复制一个反的list
  • 特点
    • 正序索引从0开始,倒数索引从-1开始
    • 如果第一个索引是0,可以省略第一个参数
    • 如果最后一个索引是-1,可以省略第二个参数
    • 取出的数是前包含后不包含
  • 可作用于list、tuple、字符串,操作的结果跟原值的类型相同,list取出单个值的时候,类型为该值的类型

迭代(Iteration)

  • 通过for…in循环遍历list、tuple、dict、字符串等,这种遍历称为迭代
  • 无论有没有下标,只要是迭代对象,都可以迭代
    • dict的存储不是按照list的方式顺序排列,所以迭代出来的结果顺序很可能不一样
    • 默认情况下,dict迭代的是key,用for key in d
    • 如果迭代value,用for value in d.values()
    • 同时迭代可以和value,用for k,v in d.items()
  • 通过collections模块的Iterablele类型判断是否是迭代对象
    • isinstance(判断的对象,iterable)
    • 返回布尔值
    • isinstance(判断的对象,str)判断是不是字符串
  • 通过enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同事迭代索引和元素本身
    • for i,value in enumerate([‘a’,‘b’,‘c’])

列表生成式

  • 作用:运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list
  • range(start, stop[, step])生成一个整数列表,常用于for循环
    • start:计数默认从0开始,可省略,如range(5)等同于range(0,5)
    • stop:计数到stop结束,但不包括stop,如range(5)是[0,1,2,3,4]没有5
    • stop:步长,默认为1,如range(0,5)等同于range(0,1,5)
  • list(range(1,5))生成一个从1到4的list
  • [xx for x in range(1,11)]生成一个x从1到10值为xx的list
    把要生成的元素x*x放到前面
    后面跟for循环
  • [x*x for x in range(1,11) if x%2 ==0]生成一个筛选出仅x为偶数的平方list
    结果为[4,16,36,64,100]
  • [m+n for m in ‘ABC’ for n in ‘XYZ’]使用两层循环生成全排列
    结果为[‘AX’,‘AY’,‘AZ’,‘BX’,‘BY’,‘BZ’,‘CX’,‘CY’,‘CZ’]
  • [k + ‘=’ +v for k,v in d.items()],生成key=value格式的list
  • [s.lower() for s in L]将list中的所有字符串变成小写

生成器(generator)

  • 是指python中一边循环一边计算的机制
  • 创建生成器的方法
    • 把列表生成式的[]换成()
      L = [xx for x in range(10)] L是一个list
      g = (x
      x for x in range(10)) g是一个generator
    • 推算的算法比较复杂,可以用函数创建generator
      • 函数实际上是定义了generator的推算法则
      • 用yielb关键字,替换函数中的print()
      • 如果一个函数中含有yield,那这个函数就不再是一个普通的函数,而是一个generator
      • 与普通函数的执行流程不同
        普通函数时顺序执行,遇到return或者执行完就返回
        generator是在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
  • 打印方法
    • 通过next()打印
      生成器的值可以通过next(g)一个一个的打印
      每次调用next(g),就计算出g的下一个元素的值
      没有更多元素的时候,抛出StopIteration的错误
      基本不使用该方法
    • 通过for循环打印
      由于generator是可迭代对象,所以可以用for循环打印值
      for n in g: print(n) 打印第一种创建方法产生的generator
      for n in fib(6):print(n) 打印第二种创建方法产生的generator

迭代器

  • 可迭代对象
    • 可以直接作用于for循环的对象称为可迭代对象:Iterable
    • 分类
      一类是集合数据类型:list、tuple、dict、set、str等
      一类是generator
    • 可以用isinstance()判断是否是可迭代对象
      isinstance([],Iterable)
  • 迭代器
    • 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
    • 可以用isinstance()判断是否是迭代器
      isinstance([],Iterator)
    • 所有的迭代器都是可迭代对象
      用iter()可以把非迭代器的可迭代对象变成迭代器(str、list等)
      iter(‘abc’)
    • 迭代器标识一个惰性计算的序列
  • 总结
    • 凡是可作用于for循环的对象都是可迭代对象(iterable类型)
    • 凡是可作用于next()函数的对象都是迭代器(iterator类型)
    • 集合数据类型(list、dict、str等)是iterable但不是iterator,不过可以通过iter()函数变成iterator
    • python循环本质上就是通过不断调用next()函数实现的
    • 包含关系
      可迭代对象(:iterable):可作用于for循环
      生成器(迭代器)(:iterator):可作用于next()函数
      集合数据类型)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高级特性是指一些内置函数的高级用法,可以帮助我们更方便地完成一些功能。以下是一些常见的Python高级特性的介绍和示例: 1. 列表推导式(List Comprehension):通过简洁的语法创建新的列表。可以在一个列表中根据条件筛选元素、对元素进行操作等。例如: ```python # 创建一个包含1到10的平方的列表 squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ``` 2. 字典推导式(Dictionary Comprehension):类似于列表推导式,可以用简洁的语法创建新的字典。例如: ```python # 创建一个包含1到10的平方的字典 squares_dict = {x: x**2 for x in range(1, 11)} print(squares_dict) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100} ``` 3. 生成器表达式(Generator Expression):类似于列表推导式,但是返回一个生成器对象,可以逐个生成值,而不是一次性生成所有值。例如: ```python # 创建一个生成器,逐个生成1到10的平方 squares_gen = (x**2 for x in range(1, 11)) print(next(squares_gen)) # 输出:1 print(next(squares_gen)) # 输出:4 # ... ``` 4. 匿名函数(Lambda Function):一种简洁的函数定义方式,通常用于需要一个简单函数的地方。例如: ```python # 定义一个匿名函数,计算两个数的和 add = lambda x, y: x + y print(add(3, 5)) # 输出:8 ``` 5. 高阶函数(Higher-order Function):可以接受函数作为参数或返回函数的函数。例如,`map()`函数可以将一个函数应用到一个可迭代对象的每个元素上。例如: ```python # 将函数应用到列表的每个元素上 numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x**2, numbers)) print(squared_numbers) # 输出:[1, 4, 9, 16, 25] ``` 这些是Python的一些常见高级特性,它们可以帮助我们更加简洁和高效地编写代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值