Python数据结构&封装解构

List

  1.   可变
  2.   线性有序

Tuple

  1.   不可变
  2.   线性有序

String:字符串是字符组成的有序序列,字符可以使用编码来理解

  1.   不可变
  2.   线性有序

Bytes:bytes是字节组成的有序的不可变序列

  1.   不可变
  2.    有序
  3.   使用b前缀定义
    1.    只允许基本ASCII使用字符形式b'abc9'
    2.   使用16进制表示b"\x41\x61"

ByteArray

  1.   可变
  2.   有序

Set

  1.   可变
  2.   非线性
  3.   set元素
    1.   set的元素要求必须可以hash
    2.   目前学过的不可hash的类型有list、set,可hash的就是不可变的数据结构

Dict

  1.   可变
  2.   非线性

 

编码与解嘛

  1.   字符串按照不同的字符集编码encode返回字节序列bytes p encode(encoding='utf-8', errors='strict') -> bytes
  2.   字节序列按照不同的字符集解码decode返回字符串 p bytes.decode(encoding="utf-8", errors="strict") -> str p bytearray.decode(encoding="utf-8", errors="strict") -> str

 

封装解构

举例
a = 4
b = 5
temp = a
a = b
b = temp
等价于
a, b = b, a
上句中,等号右边使用了封装,而左边就使用了解构

封装

  1.    将多个值使用逗号分割,组合在一起
  2.    本质上,返回一个元组,只是省掉了小括号  

解构

  1.   把线性结构的元素解开,并顺序的赋给其它变量
  2.   左边接纳的变量数要和右边解开的元素个数一致

Python3解构

  1.   使用 *变量名 接收,但不能单独使用
  2.   被 *变量名 收集后组成一个列表

 

位置参数可变参数

  1.   在形参前使用*表示该形参是可变参数,可以接收多个实参
  2.   收集多个实参为一个tuple
def add(*nums):
    sum = 0
    print(type(nums))
    for x in nums:
        sum += x
    print(sum)
add(3, 6, 9) # 调用

关键字参数可变参数

  1.   形参前使用**符号,表示可以接收多个关键字参数
  2.   收集的实参名称和值组成一个字典
p 关键字参数的可变参数
p 配置信息打印
def showconfig(**kwargs):
  for k,v in kwargs.items():
  print('{} = {}'.format(k, v))
showconfig(host='127.0.0.1',port='8080',username='harden',password='harden')

  

 

keyword-only参数(Python3加入)

  1.   如果在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的 参数了,而是keyword-only参数
  2.   args可以看做已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参

 

def fn(*args, x):
    print(x)
    print(args)
fn(3,5)
fn(3,5,7)
fn(3,5,x=7)

  

参数解构

  1.    给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
  2.    非字典类型使用*解构成位置参数
  3.    字典类型使用**解构成关键字参数
  4.    提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配

 

def add(x, y):
    return x+y
add(*(4,5)) add(*[4,5]) add(*{4,6})
d = {'x': 5, 'y': 6}
add(**d)
add(**{'a': 5, 'b': 6}) add(*{'a': 5, 'b': 6})

 

匿名函数

匿名函数 使用lambda关键字来定义匿名函数 口参数列表不需要小括号

冒号是用来分割参数列表和表达式的

不需要使用return,表达式的值,就是匿名函数返回值

lambda表达式(匿名函数)只能写在一行上,被称为单行函数

用途 在高阶函数传参时,使用lambda表达式,往往能简化代码

  

 

  

posted @ 2021-08-30 11:10  亚洲哈登  阅读(101)  评论(0编辑  收藏  举报