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:       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 [23]: a = 1

In [24]: b = 2

In [25]: a,b

Out[25]: (1, 2)    #

In [26]: a,b =b,a

先将值封装为元组,然后将新的元组将新值进行重新赋值

In [30]: c = a,b

In [31]: c

Out[31]: (1, 2)

解构:

将线性结构元组解开,并按照顺序方式赋值给其他变量

左右顺序:左边接纳的变量和右边解构的元素个数必须一致

In [44]: lst =[3,5]

In [45]: lst

Out[45]: [3, 5]

In [46]: f,s =lst

In [47]:print(f,s)

3 5

解构的过程

在解构之前需要先进行封装,然后对右值进行封装,再对左值进行解构

解构的时候则使用list进行,因为在解构的时候,其不知空间占用多少,所以在设计结构的时候优先使用列表

正与封装的时候相反,在封装的时候因为已知数据占用情况,所以在内存占用上考虑更小的空间

例:

*号位当前去掉占位变量其余所有数据全部进行赋值,类似贪婪模式

In [49]: a,*b =1,2,3,4,5

In [50]: a

Out[50]: 1

In [51]: b

Out[51]: [2, 3,4, 5]

例2

n [53]: [a,b] =(1,2)

In [54]: a

Out[54]: 1

In [55]: b

Out[55]: 2

In [56]: a,b

Out[56]: (1, 2)

python3的解构

使用*+变量名,但是*不能单独使用

In [71]: a =list(range(10))

In [72]: *b = a

File"", line 1

*b= a

^

SyntaxError:starred assignment target must be in alist or tuple

*必须跟多变量进行赋值

In [73]: n,*b =a

In [74]: n

Out[74]: 0

In [75]: b

Out[75]: [1, 2,3, 4, 5, 6, 7, 8, 9]

In [76]: n,b

Out[76]: (0, [1,2, 3, 4, 5, 6, 7, 8, 9])

本身*不能独立去接收,原因在于*不能单独出现

*号本身定义就是为了尽可能的多收集,但是并不能全部收集

In [77]: *b,o =a

In [78]: b,o

Out[78]: ([0, 1,2, 3, 4, 5, 6, 7, 8], 9)

*在解构的时候做尽可能重复去接收更多的元素,例:

In [88]:head,*_,tail = lst

In [89]: head

Out[89]: 0

In [90]: _

Out[90]: [1, 2,3, 4, 5, 6, 7, 8]

In [91]: tail

Out[91]: 9

_丢弃变量

_号  ,下划线是合法的标识符,但是一般使用_只引用来测,因为根本看不明白其要做什么事

In [92]: lst

Out[92]: [0, 1,2, 3, 4, 5, 6, 7, 8, 9]

In [93]:head,*_,tial = lst

In [94]:head,tail

Out[94]: (0, 9)

在开发习惯中,一般_表示丢弃,以上例子,我们只想取头部和尾部,_为丢弃

例:以下_为赋值两次,最后一次*_将前面的_值覆盖

In [95]:_,*_,tail = lst

In [96]: tail

Out[96]: 9

In [97]: _

Out[97]: [1, 2,3, 4, 5, 6, 7, 8]

In [98]: lst

Out[98]: [0, 1,2, 3, 4, 5, 6, 7, 8, 9]

_变量本身没有任何语义,并没有可读性

例:取出第二个,第四个,和倒数第二个

In [108]: lst

Out[108]: [0, 1,2, 3, 4, 5, 6, 7, 8, 9]

In [108]:_,two,_,four,*_,nine,_ = lst

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

In [120]: lst

Out[120]: [1,(2, 3, 4), 5]

In [121]: _,[*_,a],_= lst

In [122]: a

Out[122]: 4

In [136]:_,(*_,a),_ = lst

In [137]: a

Out[137]: 4

取出路径

In [144]:name,_,path  = a.partition('=')

In [145]: path

Out[145]:'/usr/bin'

本文转自zuzhou 51CTO博客,原文链接:http://blog.51cto.com/yijiu/1968668

python封装概念_Python封装及解构相关推荐

  1. python 封装函数_python封装函数

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python函数教程函数本身其实就相当于一个集装箱,她负责把我们之前写的那些代码 ...

  2. python mysql操作封装库_python封装mysq操作,进行数据库的增删改

    python操作mysql进行封装,封装的好处我就不提了,以下是我做项目时的一个封装,大家可以根据实际需要进行自己的一个封装 我封装的内容: 1.数据库的配置文件 2.获取数据配置文件的地址 3.连接 ...

  3. python函数的封装调用_Python封装一个函数来打印到变量

    如果我有一个包含大量打印语句的函数: 即. def funA(): print "Hi" print "There" print "Friend&qu ...

  4. python模块讲解_python模块详解

    使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识. 本文分为如下几个部分概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...

  5. [转载] 递归函数python基例_python递归函数详解 python 递归函数使用装饰器

    参考链接: Python递归 移动宽带检查显示 CRM,radius状态不一致是怎么回事啊?您可以把电信宽带猫等设备重启试一下,如果仍然不行,可以拨打10000号请工作人员帮您查看.处理. 电信宽带诊 ...

  6. python pexpect输出_Python Pexpect详解

    背景介绍 Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况.因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现.最初 ...

  7. python extractall函数_python zipfile extract 解压 中文文件名[图]

    python zipfile extract 解压 中文文件名[图] 08-01栏目:技术 TAG:extractall extractall Python zipfile模块官网 copyright ...

  8. python 正则 空格_python 正则详解

    正则表达式概述 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科学的 ...

  9. python获取数据类型_python数据类型详解

    python数据类型:int.string.float.boolean 可变变量:list 不可变变量:string.元组tuple 1.list list就是列表.array.数组 列表根据下标(0 ...

最新文章

  1. 结构光|一文详解相移步长的选择问题
  2. Centos 7 学习之静态IP设置
  3. 如何在Linux系统上自动执行任务
  4. 用思科网络模拟器搭建一个简单的局域网
  5. 【版本更新】IM 4.3.0新版本升级上线!
  6. tinycore php,tinycore中文支持
  7. 你真的知道一个HTML及资源是如何load的吗(了解各个部分是何时下载和执行的)
  8. LeetCode 2119. 反转两次的数字
  9. 普通大学毕业后干啥_一名女孩从大学毕业后在机械行业干了十年,背后经历让人辛酸……...
  10. mysql添加标签_PHP / MySQL - 如何添加多个标签
  11. ORA-00904:quot;T1quot;.quot;AREA_IDquot; :标识符无效
  12. java jdk官网下载地址
  13. win11还原win10磁贴方法ExplorerPatcher,替代Start 11、StartALLBack(开源免费~)
  14. cmd命令行激活win7
  15. .net Core 3.1下的Roslyn 动态编译
  16. Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, of
  17. 解决页面怎么模拟手机端屏幕
  18. JS的map方法和Map对象
  19. html5水墨效果,用html5可以做出水墨晕开的效果吗
  20. Docker学习-Network网络

热门文章

  1. kafka是什么_Kafka的Controller Broker是什么
  2. 无法打开文件“libboost_python-vc120-mt-sgd-1_59.lib”
  3. 全网首秀,我用动画展现Pycharm十大实用技巧
  4. 使用selenium框架的Python爬虫被检测到的 解决方法
  5. Python采集知乎小姐姐图片,打造颜颜值排行榜!
  6. LeetCode 题 - 35. 搜索插入位置
  7. C# Regex 深入正则表达式
  8. 第三讲 关系映射反演原则
  9. 神经网络-损失函数是不是凸的
  10. Leetcode --9