第三章 - 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]
a,b = {10,20}
a,b = {'a':10,'b':20} # 非线性结构也可以解构,a为a是key值,b为b
a,b = {10,20,30}
a,*b = {10,20,30} # a为1,b为[20,30],*是匹配任意多个元素,因为解构时元素不确定,所以用列表
[a,b] = (1,2)
[a,b] = 10,20
(a,b) = {30,40}

Python3的解构

  • 使用 *变量名 接收,但不能单独使用
  • 被 *变量名 收集后组成一个列表
  • 举例

   lst = list(range(1, 101, 2))
   head, *mid, tail = lst
   *lst2 = lst
   *body, tail = lst
   head, *tail = lst
   head, *m1, *m2, tail = lst
   head, *mid, tail = "abcdefghijklmn"
   type(mid)

丢弃变量

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

   lst = [9,8,7,20]
   first, *second = lst
   head, *_, tail = lst
   print(head)
   print(tail)
   _是合法的标识符,看到下划线就知道这个变量就是不想被使用
   print(_)

丢弃变量

  • 举例

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

丢弃变量

  • 总结

    • _ 这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的
    • Python中很多库,都使用这个变量,使用十分广泛。请不要在不明确变量作用域的情况下,使用 _ 导致和库中 _ 冲突
  • 练习
    • lst = list(range(10)) # 这样一个列表,取出第二个、第四个、倒数第二个

练习

  • 练习

    • 从lst = [1,(2,3,4),5]中,提取4出来
    • 环境变量JAVA_HOME=/usr/bin,返回环境变量名和路径
    • 对列表[1, 9, 8, 5, 6, 7, 4, 3, 2]使用冒泡法排序,要求使用封装和解构来交互数据

练习

  • 练习

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

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

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

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

练习

  • 练习

    • 环境变量JAVA_HOME=/usr/bin,返回变量名和路径
      key, _ , val = "JAVA_HOME=/usr/bin".partition('=')
      print(key)
      print(val)
  • 总结:
    • 解构,是Python提供的很好的功能,可以方便的提取复杂数据结构的值
    • 配合 _ 的使用,会更加便利

最后

本文的另外链接是:https://herodanny.github.io/python-magedu-2018-notes9.html

Python全栈-magedu-2018-笔记9的更多相关文章

  1. 自学Python全栈开发第一次笔记

           我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...

  2. Python全栈之jQuery笔记

    jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...

  3. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  4. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  5. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  6. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  7. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  8. 老男孩最新Python全栈开发视频教程(92天全)重点内容梳理笔记 看完就是全栈开发工程师

    为什么要写这个系列博客呢? 说来讽刺,91年生人的我,同龄人大多有一份事业,或者有一个家庭了.而我,念了次985大学,年少轻狂,在大学期间迷信创业,觉得大学里的许多课程如同吃翔一样学了几乎一辈子都用不 ...

  9. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. HEAD FILE

    心血来潮做的沙雕Head,喜欢就拿去用吧,Explosion! HEAD //#pragma comment(linker, "/STACK:1024000000,1024000000&qu ...

  2. 消除导入MNIST数据集发出的警告信息

    原本导入数据集你仅需这样: # Import MNIST data from tensorflow.examples.tutorials.mnist import input_data mnist = ...

  3. Python中__get__, __getattr__, __getattribute__的区别及延迟初始化

    本节知识点 1.__get__, __getattr__, __getattribute__的区别 2.__getattr__巧妙应用 3.延迟初始化(lazy property) 1.__get__ ...

  4. 排序算法以及其java实现

    一.术语了解 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排序操作都在内存中完成: 外排序:由 ...

  5. 使用fetch调用node.js的Resuful服务

    在目前的软件架构中,慢慢又有这样的趋势,就是在前端和业务接口层中间再加入一层,这是由于nodejs相对JAVA而言不适合做复杂的业务逻辑,如下图: 在这样的结构中,JS前端和web层都是前端开发工程师 ...

  6. 解析电子墨水屏技术(工作原理与LCD的区别)【转】

    转自:https://blog.csdn.net/weixin_42509369/article/details/84646808 阅读电子书早已成为大家生活中一部分,方便轻巧的电子版书籍更便于携带, ...

  7. JMeter学习笔记02-基础介绍

    基本构成 1)负载发生器:产生负载,多线程模拟用户行为 2)用户运行期:脚本运行引擎,用户运行器附加在线程上,根据指定脚本模拟指定的用户行为 3)资源发生器:生成测试过程中服务器.负载机的资源数据 4 ...

  8. I2C与EEPROM

    一.基本概念 RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的.它在任何时候都可以读写,RAM 通常是作为操作系统或其他正在运 ...

  9. XAMPP环境下配置Phalcon框架

    目前环境:win7  xampp 从phalcon 官网下载如下包:https://phalconphp.com/en/download/windows phalcon_x86_vc11_php5.6 ...

  10. C#中用ILMerge合并DLL和exe文件成一个exe文件或者DLL

    ILMerge是一个将多个.NET程序集合并到一个程序集中的实用程序.它既可以作为  开源使用,也可以作为NuGet包使用. 如果您在使用它时遇到任何问题,请与我们联系.(mbarnett _at_ ...