码迷,mamicode.com
首页 > 编程语言 > 详细

Python封装和结构

时间:2019-10-11 18:13:19      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:got   十分   java   error   tail   定义   code   不能   syn   

在Python中有封装和解构的概念。封装 ——是将将多个值使用逗号分割,组合在一起 。本质上,返回一个元组,只是省掉了小括号。这是Python特有的概念,现在被很多语言借鉴。

a  = (1,2)#元组
b = 1,2#元组
print(type(a))
print(type(b))

结果为:
<class tuple>
<class tuple>

解构是把线性结构(也可以是非线性结构)的元素解开,并顺序的赋给其它变量,应该注意的是左边接纳的变量数要和右边解开的元素个数一致。

lst = [3, 5]
first, second = lst
print(first, second)

结果为:
3 5

a = 4
b = 5
temp = a
a = b
b = temp
print(a,b)

a = 4
b = 5
a,b = b,a
print(a,b)

上面两个例子的结果都为:

5 4

a,b =1,2,3

结果为
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-1f237ab311da> in <module>
----> 1 a,b =1,2,3

ValueError: too many values to unpack (expected 2)

 a,b,c=1,2

  结果为:

  

ValueError                                Traceback (most recent call last)
<ipython-input-14-dfc132c7dc8e> in <module>
----> 1 a,b,c=1,2

ValueError: not enough values to unpack (expected 3, got 2)

 

上面的例子中,a, b = b, a,等号右边使用了封装,而左边就使用了解构。

a,b = {10,20}
print(a,b)

结果为:
10 20

a,b = {a:10,b:20} # 非线性结构也可以解构
print(a,b)

结果为:
a b

a,b = {10,20,30}
print(a,b)

结果为:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-f1e9d0f368d9> in <module>
----> 1 a,b = {10,20,30}
      2 print(a,b)

ValueError: too many values to unpack (expected 2)


a,*b = {10,20,30}
print(a,b)

结果为:
10 [20, 30]

[a,b] = (1,2)
print(a,b)

结果为:
1 2
[a,b] = 10,20
print(a,b)

结果为:
10 20

(a,b) = {30,40}
print(a,b)

结果为:
40 30

Python3中的多变量解构

使用 *变量名 接收多个值,但不能单独使用,被 *变量名收集后组成一个列表 。

lst = list(range(10))
head, *mid, tail = lst
print(head,mid,tail)

结果为:
0 [1, 2, 3, 4, 5, 6, 7, 8] 9

*lst2 = lst

结果为:
 File "<ipython-input-42-419bc512b767>", line 4
SyntaxError: starred assignment target must be in a list or tuple

*body, tail = lst
print(body,tail)

结果为:
[0, 1, 2, 3, 4, 5, 6, 7, 8] 9

head, *tail = lst
print(head,tail)

结果为:
0 [1, 2, 3, 4, 5, 6, 7, 8, 9]

head, *m1, *m2, tail = lst
print(head,m1,m2,tail)

结果为:
 File "<ipython-input-49-c1bd0409aec6>", line 4
SyntaxError: two starred expressions in assignment

head, *mid, tail = "abcdefghijklmn"
print(type(mid))
print(head,mid,tail)

结果为:
<class list>
a [b, c, d, e, f, g, h, i, j, k, l, m] n

丢弃变量

丢弃变量是一个惯例,是一个不成文的约定,不是标准。它指的是如果不关心一个变量,就可以定义改变量的名字为_,_是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用。所以一般情况,看到下划线就知道这个变量就是不想被使用。

lst = [9,8,7,20]
first, *second = lst
head, *_, tail = lst
print(head)
print(tail)
print(_)

结果为:
9
20
[8, 7]

lst = [9,8,7,20]
first, *second = lst
_, *_, tail = lst
print(_)
print(tail)
print(_)

 

结果为:

[8, 7]
20
[8, 7]

所以,_ 这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的,Python中很多库,都使用这个变量,使用十分广泛。请不要在不明确变量作用域的情况下,使用 _ 导致和库中_ 冲突。

# lst = list(range(10)) 取出第二个、第四个、倒数第二个
_,second,_,four,*_,sa,_ = list(range(10))
print(second,four,sa)

结果为:
1 3 8

从lst = [1,(2,3,4),5]中,提取4出来

lst = [1,(2,3,4),5]
a,(b,c,d),e = lst
print(d)

结果为:
4

lst = [1,(2,3,4),5]
_,(*_,val),*_ = lst
print(val)

结果为:
4

_,[*_,val],*_ = lst
print(val)

结果为:
4

环境变量JAVA_HOME=/usr/bin,返回环境变量名和路径

key, _ , val = "JAVA_HOME=/usr/bin".partition(=)
print(key)
print(val)

结果为:

JAVA_HOME
/usr/bin

s = "JAVA_HOME=/usr/bin"
s.split("=")

结果为:
[JAVA_HOME, /usr/bin]

 





 



 


 

Python封装和结构

标签:got   十分   java   error   tail   定义   code   不能   syn   

原文地址:https://www.cnblogs.com/xpc51/p/11655668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!