Python:生成器,yield,字节

生成器 Generator

什么是生成器:
	生成器是能够动态提供数据的可迭代对象
	生成器在程序运行时生成数据,与容器类不同,它通常不会在
	内存中保存大量的数据,而是现用现生成

好处:
	不占用计算机的内存

生成器有两种:
	生成器函数
	生成器表达式

生成器函数的定义
	含有yield语句的函数是生成器函数,此函数被调用将返回
	一个生成器对象
	yield 翻译为(产生或生成)

yield 语句

语法:
	yield 表达式
说明:
	yield 只能用于def 函数中,目地是将此函数作为生成器函数使用
	yield 用来生成数据,供迭代器的next(it) 函数使用

说明:
	1. 生成器函数的调用将返回一个生成器对象,生成器对象是
		一个可迭代对象
	2. 生成器函数用return会触发一个StopIteration异常
		(即生成结束)

生成器表达式

语法:
	(表达式 for 变量 in 可迭代对象 [if 真值表达式])
作用:
	用推导式形式创建一个新的生成器
说明:
	if 子句可以省略
	生成器表达式也可以象列表推导式一样嵌套
 	示例:
    gen = (x**2 for x in range(1, 5))
    it = iter(gen)  # 拿到迭代器
    next(it)  # 1
    next(it)  # 4
    next(it)  # 9
    next(it)  # 16
    next(it)  # StopIteration

迭代工具函数

迭代工具函数的作用是生成一个符合条件的可迭代对象

zip(iter1[,iter2[, ...]])  返回一个zip生成器对象
    	此对象用于生成一个元组,此元组的数据分别来自于
    	参数中的每个可迭代对象,生成元组的个数由最小的
    	一个可迭代对象决定
enumerate(iterable, start=0)  返回一个enumerate
    	生成器对象,此对象生成类型为(索引,值对) 的元组
    	默认索引从零开始,也可以用start指定
	zip示例:
  	numbers = [10086, 10000, 10010, 95588]
  	names = ['中国移动', '中国电信', '中国联通']
  	for t in zip(numbers, names):
      	print(t)
             # 结果
   	# (10086, '中国移动')
    # (10000, '中国电信')
    # (10010, '中国联通')
  	for t in zip(numbers, names, range(1, 10000)):
     print(t)
  

	enumerate 示例:
  	names = ['中国移动', '中国电信', '中国联通']
  	# for t in zip(range(100000000), names):
  	#     print(t)
  	for t in enumerate(names):
      	print(t)
  	# 打印 (0, '中国移动')  (1, '中国电信')  (2, '中国联通')
  	for t in enumerate(names, 101):
      	print(t)
  	# 打印 (101, '中国移动')  (102, '中国电信')  (103, '中国联通')
容器
列表,字符串,元组(序列), 字节串,字节数组
字典,集合,固定集合

字节串和字节数组

字节串(字节序列) bytes
存储以字节为单位的数据
字节串是不可变的字节序列

说明:
字节是0~255之间的整数,用来表示一个字节的取值

创建空字节串的字面值方式:
b''
b""
b''''''
b""""""
创建非空字节串的字面值
b'ABCD'
b"ABC"
b'''aaaa'''
b"""BBBB"""

字节串的构造函数 bytes

bytes()  生成一个空的字节串,等同于b''
bytes(整数可迭代对象)  用可迭代对象始化一个字节串
bytes(整数n)  生成n个值为0的字节串
bytes(字符串, encoding='utf-8')  用字节串转换编
    		码生成一个字节串
  示例:
      B = bytes()
      B = bytes(range(0x41, 0x61))
      B = bytes([65, 66, 67, 68])
      B = bytes(10)
      B = bytes("Hello", 'utf-8')
      B = bytes("中文", 'utf-8')

字节串的运算:
+    +=   *   *= 
< <= > >= == !=
in / not in 
索引和切片
函数:
len(x), max(x), min(x), sum(x), any(x), all(x)

bytes 与 str 的区别:

	bytes 存储字节(0~255之间的整数)
	str 存储UNICODE字符(0~0x10FFFF) 的字符

bytes 与 str 的转换
        编码(encode)
str   --------------> bytes
   b = s.encode(encoding='utf-8')

        解码(decode)
	bytes ---------------> str
  	s = b.decode(encoding='utf-8')
示例:
  s = "ABC中文"
  b = s.encode('utf-8')
  s2 = b.decode('utf-8')
  print(s, b, s2)

字节数组 bytearray

可变的字节串

字节数组的构造函数 bytearray
bytearray()
bytearray(整型可迭代对象)
bytearray(整数n)
bytearray(字符串, encoding='utf-8')

运算:
同字节串
+ += * *=
比较: < <= > >= == !=
in / not in 
索引/切片
(字节数组可以索引和切片赋值,规则同列表的索引和切
片赋值规则)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值