Python封装和结构

在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‘]

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

时间: 2024-10-08 22:22:50

Python封装和结构的相关文章

Python封装应用程序的最佳项目结构是什么?

Python封装应用程序的最佳项目结构是什么? 转载来源于stackoverflow:https://stackoverflow.com/questions/193161/what-is-the-best-project-structure-for-a-python-application 和http://www.cnblogs.com/alex3714/articles/5765046.html#3719169 开发一个终端用户桌面应用(非网页),最佳的项目文件夹层次结构是怎样的? 理想的项目

Python封装及解构

python封装及解构 Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象 将多个值使用逗号进行分割,本质上是返回元组 In [1]: a = 1,2 In [2]: type(a) Out[2]: tuple In [3]: a Out[3]: (1, 2) 封装 在进行交换的时候,已经被封装为元组 在赋值的过程中,看似什么都没有做,但是在右值将其封装为元组,因为其值不变 In [9]: a = 1,2 In [10]: a?? Type:       tupl

python 软件目录结构规范

为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时间去

Baseline Testing 开源(基于Python插件式结构开发)

[其他]入职37.com后写的一个东西,为了检查下服务器的一些安全配置.数量太多,手工不靠谱. [OSCHINA开源社区地址]http://www.oschina.net/p/baseline-testing 基于Linux的配置检查工具,采用插件式结构开发.开发语言使用的是python.开发者可以通过自行开发插件来扩展该工具,灵活性高.开发该工具的主要目的是因为刚入职,需要对几百台服务器进行检查.有需要的朋友可以对其进行插件扩展.在使用的过程当中,可以自己配置FTP,目前支持将结果上传到FTP

python软件目录结构规范

软件目录结构规范 软件开发规范 一.为什么要设计好目录结构? 1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 2.可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下.这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 二.目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结

C++和python利用struct结构传输二进制数据实现

网络编程中经常会涉及到二进制数据传输的问题,在C++中常用的传输方式有文本字符串和结构体封包.如果能将要发送的数据事先放进连续的内存区,然后让send函数获取这片连续内存区的首地址就可以完成数据的发送了,文本字符串如char型数组,以字节为单位,在内存中是顺序存储的,所以可以直接用send函数发送.但是如果要同时发送多个不同类型的数据时,它们在内存中存储的地址是随机的,不是顺序存储的,而且它们之间的相对位置也无法确定,这样就需要一种数据组织方式来明确各数据之间的相对位置.结构体显然就是一种的数据

使用uiautomator的python封装进行android的UI测试

最近项目中有个需求要在至少100台手机上对应用进行兼容性测试,首先想到的就是自动化来操作,不想一台台的操作相同的重复操作 基本的需求是这样的,安装被测试的应用,启动并退出,然后安装测试样本,检测是否有相应的弹窗拦截 考虑到市面上的各种测试框架与自已熟悉的编程语言,最后选择了google自家的uiautomator来搞,借助于前人对其进行了python封装,所以一开始还是挺顺利的,但是整个过程中还是有很多需要注意的地方 https://github.com/xiaocong/uiautomator

Source Code Structure - Python 源码结构

Source Code Structure - Python 源码结构 Include 目录包含了 Python 提供的所有头文件, 如果用户需要用 C 或 C++ 编写自定义模块扩展 Python, 那么就需要用到这里提供的头文件. Lib 目录包含了 Python 自带的所有标准库, 其中的库都是用 Python 写的. Moudles 目录包含了所有用 C 语言写的模块, 是那些对速度要求非常严格的模块, 如 random, cStringIO 等. 然而一些对速度要求不高的模块,如 os

关于linux上cron服务的python封装工具

关于cron:定时任务服务,一般linux自带且已启动.(pgrep cron查看cron服务是否启动了.) 关于plan:一个通过python来定制cron服务的工具.其官网:http://plan.readthedocs.org/ plan的使用例子: 例子1: from plan import Plan cron = Plan() output = dict(stdout='~/stdout.log', stderr='~/stderr.log') cron.command('date',