Python封装及解构
python封装及解构Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象
将多个值使用逗号进行分割,本质上是返回元组
In : a = 1,2
In : type(a)
Out: tuple
In : a
Out: (1, 2)
封装
在进行交换的时候,已经被封装为元组
在赋值的过程中,看似什么都没有做,但是在右值将其封装为元组,因为其值不变
In : a = 1,2
In : a??
Type: tuple
String form: (1,2)
Length: 2
Docstring:
tuple() ->empty tuple
tuple(iterable)-> tuple initialized from iterable's items
If the argumentis a tuple, the return value is the same object.
为什么使用元组进行解构?
元组在实现中比list轻巧的多,在内存占用上考虑更小的空间,所以使用元组
元组的定义
a = 1,2
a = (1,2)
封装的过程
In : a = 1
In : b = 2
In : a,b
Out: (1, 2) #
In : a,b =b,a
先将值封装为元组,然后将新的元组将新值进行重新赋值
In : c = a,b
In : c
Out: (1, 2)
解构:
将线性结构元组解开,并按照顺序方式赋值给其他变量
左右顺序:左边接纳的变量和右边解构的元素个数必须一致
In : lst =
In : lst
Out:
In : f,s =lst
In :print(f,s)
3 5
解构的过程
在解构之前需要先进行封装,然后对右值进行封装,再对左值进行解构
解构的时候则使用list进行,因为在解构的时候,其不知空间占用多少,所以在设计结构的时候优先使用列表
正与封装的时候相反,在封装的时候因为已知数据占用情况,所以在内存占用上考虑更小的空间
例:
*号位当前去掉占位变量其余所有数据全部进行赋值,类似贪婪模式
In : a,*b =1,2,3,4,5
In : a
Out: 1
In : b
Out:
例2
n : =(1,2)
In : a
Out: 1
In : b
Out: 2
In : a,b
Out: (1, 2)
python3的解构
使用*+变量名,但是*不能单独使用
In : a =list(range(10))
In : *b = a
File"<ipython-input-72-a92a123ff659>", line 1
*b= a
^
SyntaxError: starred assignment target must be in alist or tuple
*必须跟多变量进行赋值
In : n,*b =a
In : n
Out: 0
In : b
Out:
In : n,b
Out: (0, )
本身*不能独立去接收,原因在于*不能单独出现
*号本身定义就是为了尽可能的多收集,但是并不能全部收集
In : *b,o =a
In : b,o
Out: (, 9)
*在解构的时候做尽可能重复去接收更多的元素,例:
In :head,*_,tail = lst
In : head
Out: 0
In : _
Out:
In : tail
Out: 9
_丢弃变量
_号,下划线是合法的标识符,但是一般使用_只引用来测,因为根本看不明白其要做什么事
In : lst
Out:
In :head,*_,tial = lst
In :head,tail
Out: (0, 9)
在开发习惯中,一般_表示丢弃,以上例子,我们只想取头部和尾部,_为丢弃
例:以下_为赋值两次,最后一次*_将前面的_值覆盖
In :_,*_,tail = lst
In : tail
Out: 9
In : _
Out:
In : lst
Out:
_变量本身没有任何语义,并没有可读性
例:取出第二个,第四个,和倒数第二个
In : lst
Out:
In :_,two,_,four,*_,nine,_ = lst
从lst = 将4提取出来
In : lst
Out:
In : _,[*_,a],_= lst
In : a
Out: 4
In :_,(*_,a),_ = lst
In : a
Out: 4
取出路径
In :name,_,path= a.partition('=')
In : path
Out:'/usr/bin'
页:
[1]