Python全栈day 06

一、数据类型补充完整

1. 列表(list)

  • 反转reverse

    list1 = [1,2,3,4,5,6,7,8,9]
    list1.reverse()
    print(list1)        #  将list1中元素相反排列[9, 8, 7, 6, 5, 4, 3, 2, 1]
  • sort

    list1 = [1,5,9,7,88,22,55,44,77,99]
    list1.sort()    # 默认从小到大排序  相当于括号内有'reverse = False'  ,不填的时候默认reverse = False
    print(list1)
    list1.sort(reverse = True)
    Print(list1)

2. 字典(dict)

  • 回顾:dict.keys() / .values() / .items()

  • get(key, default=None),指定返回键的值,如果字典中不包含该键,就返回得到None

    info = {'k1':'v1','k2':'v2'}
    v1 = info.get('k1')       #   v1
    v2 = info.get('k123456')    #  None,数据类型,该类型表示空(无任何功能,专门用于提供空值)
    v3 = info.get('k124563','自定义内容')  # v3 = '自定义内容',如果键不存在,则返回"自定义内容"给v3.
  • .pop(key),如果字典中没有该键,会报错。返回值为该键对应的得值

    info = {'k1':'v1','k2':'v2'}
    result = info.pop('k1')      #返回得到  'v1'
    print(info)                #{'k2':'v2'}
  • .update(), 括号内只能跟字典,给字典添加键值对.

    info = {'k1':'v1','k2':'v2'}
    info.update({22:33})
    info.update({'k1':'123456'})   #  没有的键,键值对就添加进去,有的键,键对应的值就更新
    print(info)   #  {'k1': '123456', 'k2': 'v2', 22: 33}

3. 判断敏感字符

  • str: 使用in 即可判断

  • list/tuple

    list1 = ['alex','oldboy','deng','xin']
    if 'deng' in list1:
      print('含敏感字符')   #  同样,对于元组也是这样
    
  • dict

    dict1 = {'k1':'v1','k2':'v2','k3':'v3'}
    #默认按照键判断
    if 'x' in dict1 :     #  判断x是否是字典的键。
      print('dict1的键包含x')
    
    #判断字典的值x   #第一种
    dict1 = {'k1':'v1','k2':'v2','k3':'v3'}
    if 'x' in list(dict1.values()):    #  ,强制转化为list判断x是否是字典的值。
        print('dict1的值包含x')   
    
    #判断字典的值v2   #第二种循环
    for v in dict1.values():
      if v == 'v2'
        print('存在')
    
    #判断字典的键值对 k2:v2 是否在其中
    value = list1.get('k2')
    if value == 'v2':
      print('包含')   

二、集合(set)

1. 特点:

  • 无序,元素唯一,不允许重复,

  • 注意,和字典同样的大括号 {}

    v = {}    # 空字典
    v = set{}   # 空集合,同样的int、str、list、tuple、dict也有一样的用法
    v = int()
    v = str()
    v = bool()   # 默认False
    v= list()
    v = tuple()
    v = dict()   

2. 独有方法

  • .add(x),为集合添加元素,若有x元素,保持不变,只能单个元素。

  • .update(x), x 可以是列表,元组,字典

    tiboy = set()
    tiboy.add('boy')
    tiboy = {1,2,3,4,56,7,8,9,'boy'}
    tiboy.add('boy')
    print(tiboy)
    
    print(tiboy)    #  update  x 可以是列表,元组,字典。
    tiboy.update([(1,2,3,4,5,6,7),'deng','yi','xin',1,2,3])
    print(tiboy)
    #  {1, 2, 3, 4, 7, 8, 9, 'xin', 'deng', 'yi', 56, (1, 2, 3, 4, 5, 6, 7), 'boy'}   列表/字典/集合不能放在集合中,但元组可以。
  • .discard(x) ,移除集合的元素x,若集合没有x,返回值为None,区别于.remove(x) ,若集合没有x,则会报错。.clear() 清除集合所有元素。

    tiboy = {1,2,3,4,56,7,8,9,'boy'}
    t = tiboy.discard(1)
    print(tiboy,t)   # {2, 3, 4, 7, 8, 9, 'boy', 56} None
  • .intersection() / .union( ) / .difference() /.symmetric_difference(求交集,并集 差集)

    A = {1,2,3,4,5,6}
    B = {5,6,7,8,9,10}
    集合1和2的并集 =  A.union(B)
    print(集合1和2的并集)    #A∪B
    集合1减去2的差集 = A.difference(B)
    print(集合1减去2的差集)    # 集合A-B
    集合1和2的交集 = A.intersection(B)
    print(集合1和2的交集)    #A∩B
    deng123 = A.symmetric_difference(B)
    print(deng123)      #  A∪B-A∩B

3.公共功能

  1. len,长度,返回值为集合元素个数

  2. for 循环

    A = {1,2,6,3,4,5}
    for item in A :
        print(item)    # 竖向打印1,2,3,4,5,6,集合是无序的

3.集合无序,故没有索引、步长、切片、删除、修改的公共功能

4. 关于嵌套(重点)

  • 列表/字典/集合(可变类型) -> 不能放在集合中+不能作为字典的key(unhashable)

  • hash函数,在内部会将值进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。值必须不可变。

  • 特殊情况,True和False在集合和字典可能会和0, 1 重复。hash函数对2者得到一样的值。如:

    info = {0, 2, 3, 4, False, "国风", None, (1, 2, 3)}
    print(info)  # {0, 2, 3, 4, "国风", None, (1, 2, 3)}
    
    info1 = {
         True:'alex',
         1:'oldboy'
     }
    print(info1)      #  {True:'oldboy'}

三、内存问题

  • 变量

    1. 第一次赋值时,即创建它,之后赋值将会改变变量的值。
    2. 变量名本身是没有类型的,类型只存在对象中,变量只是引用了对象而已。
  • 对象

    1. 对象是有类型的,例如各种数据类型。
    2. 对象是分配的一块内存空间,来表示它的值。
  • 引用

    在Python中从变量到对象的连接称作引用。
    引用是一种关系,以内存中的指针的形式实现。

    1. 简单引用

      v1 = [11,22,33]  #解释器创建了一块内存空间(地址),v1指向这里,v1引用此内存位置
      v1 = [44,55,66]
      v1 = [1,2,3]    # v1被多次赋值,即修改了v1的引用,把v1的指向关系变了,指向改为另一块内存地址。
      v2 = [1,2,3]   #解释器创建了另一块内存空间(地址),v2指向这里。
      v1 = 666   # 同理,v1,v2指向不同的内存地址
      v2 = 666
      v1 = "asdf"   # 特殊,对于赋值给字符串,v1,v2指向一个内存地址                  (字符串不可变)
      v2 = "asdf"
      
      v1 = 1
      v2 = 1   #特殊:v1,v2指向相同的内存地址
               #解释:1. 整型:  -5 ~ 256 ,py认为它是常用的,有缓存机制,就把v1和v2指向相同的内存地址,以节省内存。
               #####  2. 字符串:"alex",'asfasd asdf asdf d_asd'(字符串不可变 ),指向同一内存地址
               #####  3."f_*" * 3  - 重新开辟内存,一旦字符串有其他运算,就重新开辟内存空间
    2. 共享引用

      #示例一
      a = 3  #解释器创建了一块内存空间(地址),a指向此处
      b = a  # b也指向次内存地址
      #示例二(内部修改)
      v1 = [11,22,33]   #解释器创建了一块内存空间(地址),v1指向此处
      v2 = v1  #v2也指向这里,如果语句为:v2 = [11,22,33],则是解释器创建了另一块内存空间(地址),v2指向这里。只是v1和v2的值相同。
      v1.append(123) #v1指向的内存地址添加上来元素666,v2跟着变更。
      print(v2)     # [11,22,33,123]
      #示例三(赋值)
      v1 = [11,22,33]
      v2 = [11,22,33]
      v1.append(123)
      print(v2)     #  [11,22,33]
      #示例四(重新赋值)
      v1 = [11,22,33]  # v1指向一个内存地址
      v2 = v1  # v2指向同一个内存地址
      v1 = [44,55,66,77]  #v1的指向关系改变,解释器创建了内存地址,并将v1的指向改为指向它。
      print(v2)  # v2的指向没有变化,输出[11,22,33]
    3. == 和 is d的区别

      • == 用于比较值是否相等

      • is 用于比较内存地址是否相等/比较指向关系是否相同/比较指向的内存空间是否是同一个。

        id(v1)   # 返回得到 变量名v1指向的内存地址
      • 小总结

        • 变量是一个系统表的元素,拥有指向对象的连接的空间。
        • 对象是分配的一块内存,有足够的空间去表示它们所代表的值。
        • 引用是自动形成的从变量到对象的指针

Python全栈day 06的更多相关文章

  1. python 全栈开发之路 day1

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

  2. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  3. python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  4. python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

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

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

  6. Python全栈

    Python基础 Python基础01 Hello World! Python基础02 基本数据类型 Python基础03 序列 Python基础04 运算 Python基础05 缩进和选择 Pyth ...

  7. python 全栈之路

    目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...

  8. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  9. Python全栈【异常处理】

    Python全栈[异常处理] 本节内容: 1.异常处理 2.什么时候用异常处理 异常处理 1.异常处理: 异常就是程序运行时发生错误的信号,异常处理是在编程过程中为了增加友好性,在程序出现bug时一般 ...

随机推荐

  1. XHTML教会我的一些东西-2

    不知道写些什么,每次看完视频之后都按照里面的方法把相应的代码写了一遍.感觉问题不大,可能是我没去写那些复杂的代码,没有去思考其他一些新颖的架构. 在自己写代码和看视频的过程中,我明白了,一定要注意每一 ...

  2. spoon kettle连接数据库失败解决方法

    Driver class 'oracle.jdbc.driver.OracleDriver' could not be found, make sure the 'Oracle' driver (ja ...

  3. sharepoint2007就地升级2010系列(三)升级系统

    OK,上两篇我们完成sharepoint2007的预览,以及升级前的补丁准备.今天我们来正式进行升级windows server系统以及SQL数据库 升级之前首先确定 search服务停止而且被禁用, ...

  4. 栅格那点儿事(四D)

    统计值与空值 在上一篇的内容里反复提到了一个统计值.那这个统计值是怎么来的,具体是干嘛用的呢? 统计值主要就是用于栅格数据的显示和重分类,顾名思义就是一个波段中所有像元值的一个统计信息,最大值,最小值 ...

  5. 多路复用select poll epoll

    I/O 多路复用之select.poll.epoll详解 select,poll,epoll都是IO多路复用的机制.I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般 ...

  6. python异常处理、断言

    异常处理基本语法 捕获异常 try: 语句1 语句2 ... except ERRNAME as e: print(e) #尝试执行语句,捕获到ERRNAME异常时打印异常信息e 捕获多个异常 try ...

  7. java设置随机数教程

    java作为程序猿开发人员都在使用的一款编程语言,许多入门的朋友都陷入了一个简单的问题就是,使用java开发时随机数要怎么设置?java怎么设置随机数?经常会有地方需要用到随机数,不用着急,一起来看看 ...

  8. eclipse 上使用tomcat 启动项目,项目目录下无.class 文件

    摘要:在使用eclipse 启动taomcat时,项目报错,但将项目打成war包单独部署到tomcat时,则项目正常,通过对比两次部署文件发现,从eclipse直接启动tomcat时,部署到tomca ...

  9. 如何获得C4C里某个code字段对应的描述信息

    通过我这篇文章介绍的方法使用C4C OData服务去取服务订单数据(Sales Order): 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据 https://www.jiansh ...

  10. IOS 打开照相机 打开相册

    /** * 打开照相机 */ - (void)openCamera { if (![UIImagePickerController isSourceTypeAvailable:UIImagePicke ...