Python数据类型(python3)

基础数据类型


  • 整型 <class 'int'>

    • 带符号的,根据机器字长32位和64位表示的范围不相同,分别是:
    • -2^31 - 2^31-1 和 -2^63 - 2^63 -1
    • Python为了程序运行速度,使用了小整数对象池,避免整数对象的频繁申请和销毁,增加程序运行速度的开销。也就是声明多个小整数赋值给变量,这些变量都是指向的小整数对象池里面的那个小整数对象。相反大整数都会重新实例一个在内存中。

>>>id(258)
1971357673680
>>>id(258)
1971357675120
>>>id(258)
1971357672720
#以上三次实例的整数都是单独的
>>>id(256)
1390248128
>>>id(256)
1390248128
#以上两次实例的小整数都是同一个实例

  • .

    • 所谓小整数是[-5,257)的左闭右开区间。
    • 而对于大整数也会有个对象池,将没有使用的保留在对象池中,不会销毁,有需要的时候直接被使用。

    • 整数对象能进行算数运算,特别的是%取模,和divmod(a,b) -> (整除数,余数) 形式的一个元组tuple

    • 多种表示方式
      • 二进制binary:0b111011
      • 八进制octonary:0o7237
      • 十进制decimalism:10392049
      • 十六进制hexadecimal:0xAB23CF
      • 进制转化间使用bin(),oct(),hex()
  • 浮点<class 'float'>

    • 即分数,有限小数和无限循环小数
    • 之所以叫浮点,是按照科学计数法表示时,小数点位是可变的1.23*109
    • 不精确,默认是17位精度。如果都是用严格的科学计数法表示的话,那么小数点后能表示16位,小数点前只有1位
    • 当需要更高精度,超过16位,那么就得使用decimal模块。1st,先使用getcontext(位数)设置精确位数,然后在使用Decimal(1.232)对象来表示小数并使用其进行算数运算,最后得到的也是Decimal对象
    • 如果用格式化字符串来设定精确位数,会非常的不准确。

>>> a = "%.30f" % (1.0/3)
>>> a

'0.333333333333333314829616256247'

  • 字符串<class 'str'>

    • 字符串也是序列,很多序列的工厂函数都可以使用
    • 字符串是不可变对象,immutable,可以hash,可以做字典key
    • 表示法:

      • 单引号,双引号,三对单/双引号
      • r"dsf" 表示的字符,取消引号中的特殊字符意义
      • u"kdsjf"表示unicode编码的字符串,在python3中等同于普通字符串表示法;但在python2中这就是一种单独类型的数据对象,叫unicode。所以蛋疼的python2和python3在字符编码上让人头晕。好了,这里我们只提python3,那python3多了一个bytes类型,因为是独立的一个类型,但是还是是序列的一种。下面说:
      • b'sdfs' 在python3中这个可不是字符串,是bytes。应该可以认为是可以表示数据流。python2中就是字符串。
      • 在python3中通过str.encode()转换为bytes,通过bytes.decode()转换为str。和两个方法互转。
    • 字符串工厂方法:
      1. string.capitalize() -> str 首字母大写剩下的变小写
      2. string.center(self,width,fillchar=None) -> str 返回一个指定字节宽度,string在中间,其它有填充字符填充
      3. string.count(self,sub,start=None,end=None) -> int
      4. string.encode(self,encoding='utf-8',errors='strict') -> bytes
      5. string.endwith(self,suffix,start=None,end=None) -> bool
      6. string.startwith(self,prefix,start=None,en=None) -> bool
      7. string.expandtab(self,tabsize=8) -> str 将字符串中tab字符转换为指定个数的空格字符
      8. string.find(self,sub,start=None,end=None) -> int 最小的索引值sub在string之一
      9. string.format(self,*args,**kwargs) -> str 将string中{}无论根据名字还是数字使用函数参数进行替换。
      10. string.index(self,sub,start=None,end=None) -> int 不同于find的是,没有不会返回-1而是抛出ValueError异常。
      11. string.isalnum()-> bool 字符串不为空且都是字母和数字
      12. string.isdigit()-> bool
      13. string.isalpha()-> bool
      14. string.isdecimal() -> bool 是否是十进制证书
      15. string.isidentifier() -> bool 是否是关键字字符
      16. 序列的特性都有
    • python3解释器默认utf-8编码,是支持对utf-8的转码为unicode的。python2就需要显示指定编码。同样python3的源码如果是gbk的编码,那么也是需要在文件头添加gbk的编码指定,代码加载到内存中后会转码为unicode

>>>import sys
>>>print(sys.getdefaultencoding())
utf-8

  • .

    • 编码不能说太多了,太多只有看网上大牛的文章了。

    • 字符的编码查看ord('s')返回字符的unicode编码十进制,通过chr(103923)返回十进制编码对应的字符。
    • 对于小于4个字节字符串使用一个类似小整数的字符串对象池。
    • 还有大于4个字节字符串也有想大整数类似的字符串对象缓冲池,而且提供intern()方法手动都指定同一个字符串实例。

  • 布尔<class 'bool'>

    • False True
    • 隐含bool值:[] {} 0 () '' 0 None 0.0 0j 作False, 其它所有非空的数据都可以作True,还有 instances of user-defined classes,if the class defines a __bool()__ or __len__() method,when that method returns the integer zero or bool value False.
  • 空值
    • None 什么都没有

其它常用类型(进行ing)


  • 列表list

    • mutable可变数据类型,不能hash不能做key,属于序列即有序的,可以嵌套,有深浅copy一说的特性,可迭代。
    • 列表相当于一个容器,存放其它数据类型对象,列表容器也有容器自己的内存地址,列表中的是有序的存放其它数据的内存地址。
    • 通过列表生成式,产生一个列表实例
    • a = [] ; b = list(可迭代对象/单个元素/无参数) 来实例化一个列表对象。
    • 支持通用的可迭代对象遍历方式
    • 支持:
      • 索引访问(正反);
      • 切片(可自定步长第三个表示步长)->返回一个新列表存着切片出来的元素,原列表没变化。隐含有浅copy,虽然是切片部分copy。就是改变子列表元素,原列表也看的见改变的元素。
      • 追加append(从列表尾部压入)-> 改变列表
      • 删除:1) list.remove(元素)根据元素删 2) del list[idx1][idx2]根据索引删... ->改变列表
      • 取出:pop(ele) ->改变列表。和删除针对列表上,都是将元素移除列表。两者不同的是:删除是内存中删除了;取出是从列表移除,在内存中还是存在的,只是可以被其它变量引用。
      • 插入:list.insert(idx,ele)-> 改变列表
      • 列表长度:len(list) -> 不改变列表
      • 判断元素在列表容器中没:'seve' in list -> False or True 应该是判断有没相等的,而不是判断是否同一个对象。
      • 删除多个元素:del list[1:n]
      • list.clear() 清空列表 字典也有这个功能
  • 元组tuple
    • immutable,可hash,有序
    • t = (2,) 一个元素需要在后加上一个逗号,表明是元组,不然等价于没有() ; tt = tuple(可迭代对象/无参数) 来实例化一个元组对象。
    • 上面一条意思是:a = ('str') <=> a = 'str' 两种方式变量都是class 'str'而不是tuple 这点在声明元组时就最好使用tuple(可迭代对象)函数
    • 可以使用元组进行多变量赋值: a, b = (1, 2) # unpack
    • 支持:
      • 索引访问(正反);
      • 切片同list
      • tuple长度:len(tuple)
      • 判断元素是否在tuple中: 'seven' in tuple
  • 字典dict
    • mutable,可变的不能hash,是map映射的一种,好像python唯一映射类型。
    • 通过key->value 就是一种不可变数据对象映射另一个任意数据对象。
    • 实例字典对象:
实例方式 说明
d1 = {key1:value1,key2:value2} 直接
d2 = dict(name='seven', age=20) 间接通过dict()之关键字参数方式
d3 = dict(mapping) 间接通过dict()之带入一个mapping对象
d4 = dict(iterable) 间接通过dict()之带入一个可迭代并且每次迭代出一个二元的序列的对象,如 iterable = ('ab','cd','ef') -> dict(iterable) == {'a': 'b', 'c': 'd', 'e': 'f'},这种的反向操作是d4.items()
    • key必须不可变,在字典中唯一;字典是无序的。
    • 方法(python3):
      • dict.keys() -> key的迭代对象,可list()
      • dict.values() -> value的迭代对象,可list()
      • dict.items() -> 返回key,value二元组的可迭代对象
      • len(dict)-> 返回字典键值对个数
      • dict.clear() 清空字典 可变容器都有这个功能
      • dict.setdefault(k,None) 不存在就设置default值,这样添加就不会因为key冲突而报异常
      • dict.pop(key[,defaultvalue]) 和list.pop()类似,取出key对应的值,没有key就返回defaultvalue,没有default值抛异常
      • dict.get(self,k,d=None) 返回key对应的值,没有key返回default值,默认default为None
      • dict.copy() a shallow浅 copy of dict
      • dict.popitem(self) -> 返回键值对元组
      • dict.update(E,**F) 如果给了一个字典参数,那么使用参数字典的key更新dict有相同的key;如果是关键字参数,类似的,参数名作k,值做v,更新dict
  • 集合set
    • 可变,剔重,集合运算,set(),元素没顺序,因为元素必须唯一,所以集合中不能出现可变数据类型,如容器list,容器dict.
    • 强调集合本身也是一个容器,是可变的。可以通过frozenset()实例不可变集合。
    • 用处除了检查成员资格,还可以集合运算,剔重可迭代对象。
    • s1 = {1,2,3} s2 = set(可迭代对象)
    • in not in
    • 集合运算:
      • s1和s2并集: s1 | s3 ; s1.union(s2)
      • s1 s2 交集: s1 & s2 ; s1.intersection(s2)
      • s1 s2 对称差集: s1^s2 ; s1.symmetric_difference(b)
      • s1 差集 s2 : s1-s2 ; s1.difference(s2)
    • 集合包含关系:
      • 集合相等或不等: = ; !=
      • 集合s1 包含 s2: s1>=s2 ; s1.issuperset(s2)
      • 集合s1 包含于s2: s1<=s2 ; s1.issubset(s2)
      • 集合s1 不相交于 s2: s1.isdisjoin(s2)
    • 集合常用操作:
      1. set.add() 添加元素
      2. set.pop() 从集合中取出元素
      3. set.update() 将新元素和原集合并集的新集合
      4. set.clear() 清空集合
      5. set.copy() 浅copy
      6. set.remove() 删除元素,没有报异常
      7. set.discard() 删除元素,没有不报异常
  • collections模块
  • 深浅copy(copy.deepcopy())/enumerate(,索引起点)/rang()/is not is/split join/zip()/

Python数据类型(python3)的更多相关文章

  1. python 数据类型---布尔型& 字符串

    python数据类型-----布尔型 真或假=>1或0 >>> 1==True True >>> 0==False True python 数据类型----- ...

  2. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  3. 二、Python数据类型(一)

    一.Python的基本输入与输出语句 (一)输出语句 print() 示例: print('你好,Python') print(4+5) a = 10 print(a) 输出的内容可以是字符串,变量, ...

  4. python开发之路:python数据类型(老王版)

    python开发之路:python数据类型 你辞职当了某类似微博的社交网站的底层python开发主管,官还算高. 一次老板让你编写一个登陆的程序.咔嚓,编出来了.执行一看,我的妈,报错? 这次你又让媳 ...

  5. 【转】Python数据类型之“数字(numerics)”

    [转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个 ...

  6. 【Python】Python3基本语法入门学习

    0.Python概述 1.First Word Game 2.变量与字符串 3.improved game 4.Python数据类型 5.常用操作符 6.分支与循环 7.列表 8.元组 9.字符串内置 ...

  7. Python开发 第02课 Python 数据类型

    1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.因此,变量可以指定不同的数据 ...

  8. python数据类型小结

    变量 变量是 为了存储程序 运算过程中的一些中间结果,为了方便日后调用. 变量的命名规则1.要有描述性2.变量名只能_,数字,字母组成,不可以是特殊字符(#)3.不能以中文为变量名4.不能以数字开头5 ...

  9. PYTHON 100days学习笔记007-2:python数据类型补充(2)

    目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...

随机推荐

  1. python语法_模块

    方便调用的分组函数文件,一个py模块就是一个模块,模块分三类 python标准库 第三方模块 应程序自定义模块 模块的掉用: 可以把多个功能(函数)包含在一个模块文件里,调用时直接使用import 就 ...

  2. 2sat

    之前做的两发 https://vjudge.net/problem/UVALive-3211 #include<cstdio> #include<cstring> #inclu ...

  3. VSCode调试Flutter的问题解决

    错误:Target of URI doesn't exist: package:fultter/material.dart 原因:flutter版本不匹配.flutter升级到了最新版本,而项目引用的 ...

  4. 1 小时 SQL 极速入门(一)

    前几天,我在论坛溜达.看到一个人发帖说 做了6年的企业级开发,总是被互联网行业的人认为没技术含量,不就是CRUD么 先解释下 CRUD 是什么.CRUD 就是我们常说的增删改查(Create,Retr ...

  5. [SQL]LeetCode627. 交换工资 | Swap Salary

    SQL架构 create table ), sex ), salary int) Truncate table salary insert into salary (id, name, sex, sa ...

  6. 微信小程序实现图片是上传、预览功能

    本文实例讲述了微信小程序实现图片上传.删除和预览功能的方法,分享给大家供大家参考,具体如下: 这里主要介绍一下微信小程序的图片上传图片删除和图片预览 1.可以调用相机也可以从本地相册选择 2.本地实现 ...

  7. Java部署项目命令学习小结

    前言: 暂无 零:java -h 和很多linux命令一样,我们第一步先通过“java -h”命令查看java命令的使用语法,其输出如下 [root@wxapp203 basesoft]# java ...

  8. war包部署到腾讯云中报404的排错经历

    项目完成了部分功能,需要把项目放到公网上,方便演示讨论.本来以为挺简单的,直接将war包放到腾讯云服务器tomcat中,结果报错404,第一次碰到这种情况,于是想办法解决,花了一天的时间,终于解决了问 ...

  9. java集合框架整理

    一.总体框架 Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* .Java集合主要可以划分为4个部分:Lis ...

  10. WARNING: 'aclocal-1.14' is missing on your system.

    源码安装zabbix agent时进行到make install时报如下错误: WARNING: 'aclocal-1.14' is missing on your system. You shoul ...