python封装和解构
封装
- 将多个值使用逗号分割,组合在一起
- 本质上,返回一个元组,只是省略了小括号
- python的特有的语法,被很多语言学习借鉴
t1 = (1,2) #定义元组
t2 = 1,2 #将1和2封装成元组
type(t1)
type(t2)
举例:
a = 4
b = 5
temp = a
a = b
b = temp
#等价于
a,b = b,a #右边使用了封装,左边使用了解构
解构
- 把线性结构的元素解开,并顺序的赋给其他变量
- 左边接纳的变量数要和右边解开的元素个数一致
举例
lst = [3, 5]
first, second = lst
print(first, second)
其他举例:
a,b = 1,2 #正常的封装解构a,b = (1,2) #元组的封装解构a,b = [1,2] #列表的封装解构a,b = {10,20} #set的封装解构a,b = {'a':10,'b':20} # 非线性结构也可以解构 a,b = {10,20,30}a,*b = {10,20,30} #*b 可以接受剩下的所有值,并生产个列表[a,b] = (1,2) [a,b] = 10,20(a,b) = {30,40}
- 使用*变量名接收,但不能单独使用
- 被*变量名 收集后组成一个列表
举例:
lst = list(range(1, 21, 2))
head, *mid, tail = lst #执行结果1 [3, 5, 7, 9, 11, 13, 15, 17] 19
*lst2 = lst #不能单独使用
*body, tail = lst #执行结果 [1, 3, 5, 7, 9, 11, 13, 15, 17] 19
head, *tail = lst #执行结果 1 [3, 5, 7, 9, 11, 13, 15, 17, 19]
head, *m1, *m2, tail = lst #只能有一个*变量名
head, *mid, tail = "abcdefghijklmn" #执行结果 a ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'] n
type(mid) #mid 类型是列表 list
丢弃变量
- 这是一个惯例,是一个不成文的规定,不是标准
- 如果不关心一个变量,就可以定义变量的名字为_
- _是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
举例:
lst = [9,8,7,20]
first, *second = lst
head, *_, tail = lst
print(head)
print(tail)
#_是合法的标识符,看到下划线就知道这个变量就是不想被使用
print(_)
总结
- _这个变量本身无任何语义,没有任何可读性,所以不是用来给人用的
- Python中很多库,都使用这个变量,使用十分广泛,请不要在不明确变量作用域的情况下使用_导致和库中的冲突
练习
1、从lst = [1,(2,3,4),5]中,提取4出来
lst = [1,(2,3,4),5]
_,(*_,val),*_ = lst
print(val)
2、环境变量JAVA_HOME=/usr/bin,返回变量名和路径
key,_,val = "JAVA_HOME=/usr/bin".partition("=")
print(key,val)
python封装和解构的更多相关文章
- 第一天python3 封装和解构
封装 将多个值使用逗号分割,组合在一起:本质上,返回一个元组,只是省略了小括号:python特有语法,被很多语言学习和借鉴;比如javascript:t1=(1,2) 定义为元组:t2=1,2 将1和 ...
- 03.python封装与解构
封装与结构 基本概念 t1 = 1, 2 print(type(t1)) # 什么类型 t2 = (1, 2) print(type(t2)) Python等式右侧出现逗号分隔的多值的时候,就会将这几 ...
- 素数、杨辉三角、封装结构和集合操作(15)——IPython使用和封装解构
IPython使用 帮助 ? ##Ipython的概述和简介 help(name) ##查询指定名称和帮助 obj? ##列出obj对象的详细信息 obj?? ##列出更详细的信息 特殊变量 _表示前 ...
- 8.字典dict和解构-封装
字典dict 与列表的区别:列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 字典中的键 ...
- ES6 学习笔记(一)let,const和解构赋值
let和const let和const是es6新增的两个变量声明关键字,与var的不同点在于: (1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效.va ...
- python封装configparser模块获取conf.ini值(优化版)
昨天晚上封装了configparser模块,是根据keyname获取的value.python封装configparser模块获取conf.ini值 我原本是想通过config.ini文件中的sect ...
- 使用boost.python封装C++库
使用boost.python封装C++库 C++以高性能著称,但是编写较为复杂.而简洁是Python的强项.如果能珠联璧合,就能发挥两家之长.本文尝试用boost库的python模块封装C++ 前期准 ...
- python的解构
今天学习python看到python的解构,觉得很有用就写下来,防止自己忘了 首先定义个列表 然后我们来解构 字典呢?字典需要两个*号才能解构 这样调用不明显 来个明显点的 上面错误是,你定义了一个形 ...
- 【AMAD】python-magic -- libmagic的python封装
简介 动机 作用 用法 个人评分 简介 libmagic的python封装 动机 封装libmagic,使用python代码获取文件类型. 作用 libmagic通过文件头部,来确定文件的类型. 用法 ...
随机推荐
- Window脚本学习笔记之定时关闭进程
定时关闭进程, 从字面上即可看出操作分为两个步骤,即: 1,结合“任务计划程序”,定时. “计算机->管理->计划任务程序”,作用是让系统定时启动脚本文件(bat脚本). 2,结合“nt ...
- zend studio 13.6.1汉化包安装方法
1.这里介绍的是离线汉化包的安装,在线汉化安装总是失败,还是离线的方便 2.汉化安装过程中系统可能会弹出报错,忽略就可以(反正我现在就是忽略了在用着) 下面图片中的链接就是在线安装的链接,不管是在线还 ...
- LINQ图解教程
LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…where片段 from子句let子句w ...
- replace函数实现
##replace函数,跟split函数处理类似,比split简单 #coding=gbk ss='** *axx* *bv** *ctt** **dff***' print(ss) result=[ ...
- Spring-Spring配置-依赖注入
5.Spring配置 5.1.别名 <!--别名,如果添加了别名,我们也可以使用别名获取到这个对象--> <alias name="user" alias=&qu ...
- mysql sql语句多表合并UNION ALL和UNION
select d1.ID,CAST(d1.ID AS CHAR) AS intId, d1.CODE_TYPE, d1.CODE, d1.CODE_IMG, d1.VALUE from m_dict_ ...
- 011_Linux驱动之_s3c2410_gpio_getpin
1. 功能:获取引脚状态 2. 函数原型: unsigned int s3c2410_gpio_getpin(unsigned int pin) { void __iomem *base = S3C2 ...
- 为什么说Redis是单线程的?
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看 ...
- mac 安装oh-my-zsh的问题
安装完,如果想切换回mac原来的bash终端,可以: chsh -s /bin/bash 反之,切换回zsh: chsh -s /bin/zsh
- Egyptian Collegiate Programming Contest (ECPC 2015) C题 Connecting Graph
这题上次用的是线性求LCA过的,数据比较水,当时没有被T掉(不过线性的做法是在线的).现在重新的分析一下这个问题.在所有的操作都进行完毕以后,这个图形肯定会变成一棵树,而我们的要求是在这棵树上的一条链 ...