Python3零基础学习笔记十一

时间:2021-12-05 06:37:10
异常:exception,用作通知。
       try-except 语句:捕获错误通知,可以将异常状态转为正常状态。
       try—finally 语句:处理异常发生时一定要做的事,finally一定会执行。
       raise 语句:唤起错误,触发异常。
       raise 错误类型[错误对象]
       raise 错误类型[错误对象]
       assert 真值表达式 ‘错误数据’
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
迭代器:Iterator 和生成器 Generator
迭代器:是访问可迭代对象的一种方式,用迭代器可以访问可迭代对象
           迭代器是指iter(可迭代对象)返回的对象
           迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数:iter和next
           iter(iterable):从可迭代对象中返回一个迭代器,iterable必须是能提供
                                  一个迭代器的对象
           next(iterable):从迭代器iterator中获取下一个记录。如果无法获取下一条记录,
                                   则触发StopIterator异常
迭代器说明:
           迭代器只能往前取值,不会后退
           用iter函数可以返回一个可迭代对象的迭代器
示例:
      L = [2,3,5,7]
      it = iter(L)    #  用iter返回一个迭代器,并用 it 绑定
      next(it)   # 2 # 用next(it)用迭代器来获取L中的元素
      next(it)   # 3 #
      next(it)   # 5 #
      next(it)   # 7 #
      next(it)   # StopIteration #通知next调用者,已无数据
     # 用迭代器获取 range对象的数据
      it = iter(range(1,10,2))
      next(it)     # 1
      next(it)     # 4
      next(it)     # 7
      next(it)     # StopIteration
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
生成器generator py2.5以后  
生成器:是能够动态提供数据的对象,生成器对象也是可迭代对象 
           生成器有两种:生成器函数,生成器表达式
生成器函数定义:
           含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
yield语句
     语法:yield 表达式
     说明:yield 用于def函数中,目的是将此函数作为生成器函数使用
              yield 用来生成数据,供next(it)函数使用     
     示例:(next有记忆性,在同一个迭代器没结束之前,记录上次的位置)
def myyield():
print('即将生成2')
yield 2
print('即将生成3')
yield 2 + 1
print('即将生成5')
yield 5
print('即将生成7')
yield 7
print('生成器函数调用结束')


gen = myyied()
it = iter(gen)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
# 写一个生成器函数my_integer(n)生成1到n的整数:
def my_integer(n):
i = 1
while i < n:
yield i
i += 1
for x in my_integer(5):
print(x)
生成器表达式:
      语句:
        (表达式 for 变量 in 可迭代对象 [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(iter1(,iter2...)) ————返回一个zip对象,此对象用于生成一个元祖,此元组的个数是由
      最小的可迭代对象决定,元组内容是可迭代对象iter1和iter2中的元素的组合

enumerate(iterable[,start])
      生成带索引的枚举对象,返回的迭代类型为索引-值对儿(index-value)对儿,默认索引从
      零开始,也可以用start指定。
  示例:>>> [x for x in enumerate(l)]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]


name = ['中国移动','中国电信','中国联通']
for k,n in enumerate(name,1):
print(k,n)    >>>1 中国移动    2 中国电信   3 中国联通
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
字节串和字节数组:
字节串(字节序列)bytes(bit,位,8bit = 1byte)
    作用:储存以字节为单位的数据
    说明:字节串是不可改变的序列
             字节是0~255之间的整数
创建空字节串的字面值:(注意:b开头只能转换字母,数字,如果要转换中文,尽量用:‘xxx’.encode())
     b''
     b""
     b'''''''
     b""""""
创建非空字节串的字面值:(0~255)
     B = b'hello'
     B = b"hello"
     B = b'''hello''''
     B = b"""hello"""
     B = b'abc\n123'
     B = b'\x41\x42'
     字符串 --> 储存ascii编码                       type(str)
     字节串 --> 储存以字节为单位的数据         type(bytes)
字节串的构造函数 bytes
bytes() 生成一个空的字节串,等同于b''
bytes(整数可迭代对象) 用可迭代对象初始化一个字节串
bytes(整数n)  生成n个值为0的字节串
bytes(字符串)  encoding = 'utf-8'
用字符串的转换编码生成一个字节串
————————————————————————
>>> bytes(range(0x41,0x61))
b'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`'
>>> bytes('hello','utf-8')
b'hello'
>>> bytes('你好','utf-8')
b'\xe4\xbd\xa0\xe5\xa5\xbd'
————————————————————————
bytes的运算:
          +   +=   *   *=
          <   <=   >   >=   ==   !=
          in / not in
          索引,切片
in / not in:
          B = b'ABCDE'

          0x41 in B     # True

用于序列的函数:

          len,max,min,sum,any,all 都可以用于字节串

序列的方法:>>>help(bytes)

bytes 和 str 的区别:
         bytes   储存字节(0~255)
         str       储存字符(Unicode值)
bytes 与 str转换
               编码(encode)
         str  ------------>  bytes
               b = s.encode(encoding='utf-8')
                    解码(decode)
         bytes  ------------>  str
               s = b.decode(encoding='utf-8')
例如:  b = '你好’.encode('utf-8')
           print(b)
           s = b.decode('utf-8')
           print(s)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
字节数组bytearray
       可变的字节序列
创建函数 bytearray
        bytearray()     创建空的字节串
        bytearray(整数)
        bytearray(整型可迭代对象)
        bytearray(字符串,encode='utf-8')
bytearray的运算:
          +   +=   *   *=
          <   <=   >   >=   ==   !=
          in / not in
          索引,切片
    可变:(字节数组可以索引和切片赋值,赋值规则同列表的索引和切片赋值相同)
    例:ba=bytearray(b'abcdefg')
          ba[0]=0x41       >>> ba = bytearray(b'Abcdefg')
          ba[1::2] = byeearray(b'BDF')      >>>修改bdf为大写