跳转至

补充知识点

del 语句

用于删除列表的元素
  语法:
    del 列表[索引]
        如: del L[0]
    del 列表[切片]
        如: del L[1::2]

python 3中常用于序列的函数

  len(s)  返回序列的长度
  max(x)  返回序列的最大值元素
  min(x)  返回序列的最小值元素
  sum(x)  返回列中所有元素的和(元素必须是数值类型)
  any(x)  真值测试,如果列表中其中一个值为真值则返回True
  all(x)  真值测试,如果列表中所有值为真值返回True
  L = [3, 1, 9, 7, 5]
  print(len(L))  # 5
  print(max(L))  # 9
  print(min(L))  # 1
  print(sum(L))  # 25

深拷贝和浅拷贝

浅拷贝 shallow copy

浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程

  L = [3.1, 3.2]
  L1 = [1, 2, L]
  L2 = L1.copy()  # 浅拷贝
  print(L1)  # [1, 2, [3.1, 3.2]]
  print(L2)  # [1, 2, [3.1, 3.2]]
  L2[2][0] = 3.14
  print(L1)  # [1, 2, [3.14, 3.2]]
  print(L2)  # [1, 2, [3.14, 3.2]]

深拷贝 deep copy

复制对象及对象关联的对象一起复制过程叫深拷贝

  import copy  # 导入复制模块
  L = [3.1, 3.2]
  L1 = [1, 2, L]
  L2 = copy.deepcopy(L1)  # 深拷贝
  print(L1)  # [1, 2, [3.1, 3.2]]
  print(L2)  # [1, 2, [3.1, 3.2]]
  L2[2][0] = 3.14
  print(L1)  # [1, 2, [3.1, 3.2]]  <<< L1不变
  print(L2)  # [1, 2, [3.14, 3.2]]

列表和字符串比较

  1. 都是序列,有先后顺序关系,有相同的运算操作
  2. 列表是可变是,字符串是不可变的
  3. 列表可以存任意类型的数据,字符串只能存字符

字符串的文本解析方法

  • S.split(sep=None) 将字符串,使用 sep作用分隔符分割S字符串,返回分割后的字符串列表,当不给定参数时,用空白字符作为分隔符分割
  • S.join(iterable) 用可迭代对象中的字符串,返回一个中间用S进行分隔的字符串
  s = 'Beijing is capital'
  L = s.split(' ')  # L = ['hello', 'world', 'tarena']
  s2 = "hello#world#tarena"
  L = s2.split('#')  # L = ['hello', 'world', 'tarena']
  L = ['aaa', 'bbbb', 'ccccc']
  '$'.join(L) # 生成 'aaa$bbbb$ccccc'

python3 中不可变数据类型

bool, int, float, complex, str, tuple, frozenset, bytes

python3 中可变数据类型

list, dict, set, bytearray

闭包 closure

什么是闭包
        闭包是指引用了此函数外部变量的函数

如果一个内嵌函数访问了外部嵌套函数的变量,则这个内嵌函数就是闭包

闭包必须满足三个条件

  1. 必须有一个内嵌函数
  2. 内嵌函数必须引用外部函数中的变量
  3. 外部函数返回值必须是内嵌函数
# 写一个函数来创建 x 的y 次方的函数

def make_power(y):
    def fn(x):
        return x ** y
    return fn

pow2 = make_power(2)
pow3 = make_power(3)
print('5的平方是', pow2(5))
print('6的三次方是', pow3(6))
print('5的三次方是', pow3(5))

dir(obj) 函数

返回所有属性的字符串列表

help(obj) 函数

可以查看模块的文档字符串

异常高级

with 语句
        语法
            with 表达式1 [as 变量1], 表达式2 [as, 变量2], ....
                语句块
        作用
            使用于对资源进行访问的场合,确保使用过程中不管是否发生异常都会执行必须"清理"的操作,并释放资源
            如
                文件打开后自动关闭,线程中锁的自动获取和释放等
        说明
            as 字句中的变量用于绑定表达式执行后生成的对象
            with 语句并不会改变异常的状态
### 环境管理器
1. 类内有__enter__  __exit__ 实例方法的类创建的对象被称为环境管理器  
2. 能够使用with语句进行管理的对象必须是环境管理器  
3. __enter__ 方法将在进入with语句时被调用由as变量绑定返回的对象  
4. __exit__ 方法将在离开with语句时被自动调用且可以通过参数来判断离开with语句时是否有异常发生  


class A:
    '''此类对象可以用于with语句进行管理'''
    def __enter__(self):
        print('此方法是在with语句内执行的')
        return self  # self 将被with中的as 变量绑定

    def __exit__(self, exc_type, exc_val, exc_tb):
        ''' exc_type 用来绑定错误类型,当没有异常发生时绑定None
            exc_val  用来绑定错误对象,当内有发生异常时绑定None
            exc_th   用来绑定TraceBack对象,当没有异常时绑定None
        '''
        if exc_type is None:
            print('您已离开with语句, 离开时没有发生任何异常')
        else:
            print('您已离开with语句')
            print('错误类型是:', exc_type)
            print('错误的数据是:', exc_val)
            print('Traceback:', exc_tb)



with A() as a:
    print('这是with语句内部的输出')
    int(input('输入:'))

print('程序正常退出')