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通过文件头部,来确定文件的类型. 用法 ...
随机推荐
- redis——持久化策略
4.2.2 持久 化方式(1 ) RDB 方式1. 什么是 RDB 方式?Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存 ...
- No result defined for action com.java.test.Action.HelloAction and result index
Struts中配置action访问出错: Struts Problem Report Struts has detected an unhandled exception: Messages: No ...
- cas的客户端配置
知识点:cas的客户端配置 一:cas客户端配置 二:cas认证流程原理(图) 参考:https://www.cnblogs.com/suiyueqiannian/p/9359597.html 源码: ...
- MySQL进阶2 sql选择语句 where
与SQL语句一致 #进阶2: 条件查询 /* 语法 select 查询列表 #3 from 表名 #1 where 筛选条件; #2 分类: 1.按条件表达式进行筛选 > < = != & ...
- mongodb中find $ne null 与$exists的区别
$ne null 会把空列表也算入,即使不存在. $exists 的识别效果就比较好 1.插入样例数据 db.nullexistsdemo.insertMany( [{ "name" ...
- harbor批量导出镜像
工作中遇到一个问题,要把某个项目的harbor镜像库全部迁移到其他环境的harbor上,由于网络不通,只能导出来,传给同事,让同事导入到他们的harbor上: 记录下我的操作方法. 参考博客园的一篇博 ...
- AtCoder Beginner Contest 128 F - Frog Jump
题意 有一只青蛙,有\(0, 1, \cdots, N - 1\)个荷叶.每个荷叶上有权值\(s_i\). 选定\(A\), \(B\),初始分数为\(0\). 当前位置为\(x\): 对于\(y = ...
- Hdu Can you find it?(二分答案)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others) P ...
- iOS Jenkins 自动化打包构建
前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...
- SpringMVC配置数据验证(JSR-303)
这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...