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. DevExpress XtraTabbedMdiManager删除Page

    DevExpress XtraTabbedMdiManager删除Page 时,xtraTabbedMdiManager1.Pages.Remove()是没用的. 正确的应该是xtraTabbedMd ...

  2. Revisiting Network Support for RDMA

    重新审视RDMA的网络支持 本文为SIGCOMM 2018会议论文. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎读者批评指正. 本文及翻译版本仅用于学习使用.如果有任何 ...

  3. 吴恩达机器学习笔记54-开发与评价一个异常检测系统及其与监督学习的对比(Developing and Evaluating an Anomaly Detection System and the Comparison to Supervised Learning)

    一.开发与评价一个异常检测系统 异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量

  4. [Swift]LeetCode459. 重复的子字符串 | Repeated Substring Pattern

    Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...

  5. windows下golang实现Kfaka消息发送及kafka环境搭建

    kafka环境搭建: 一.安装配置java-jdk (1)kafka需要java环境,安装java-jdk,下载地址:https://www.oracle.com/technetwork/java/j ...

  6. C# 当中 LINQ 的常规用法(Lambda 方式)

    仅以本篇博文记录 LINQ 相关操作的基本知识,原型参考自 MSDN 相关知识,中间加以自己的理解与 DEMO. 1. IEnuemrable<T>.Select() Select 方法比 ...

  7. SpringCloud(4)---Ribbon服务调用,源码分析

    SpringCloud(4)---Ribbon 本篇模拟订单服务调用商品服务,同时商品服务采用集群部署. 注册中心服务端口号7001,订单服务端口号9001,商品集群端口号:8001.8002.800 ...

  8. Visual Studio 2017中使用SourceLink调试ASP.NET Core源码

    背景 当我们在学习ASP.NET Core或者调试ASP.NET Core程序的时候,有时候需要调试底层代码,但是当我们在Visual Studio中调试程序的时候,由于一些基础库或者第三方库缺少pd ...

  9. Mac版AppStore无法下载、升级错误处理

    在mac版本AppStore下载软件的时候,有时会出现"This item is temporarily unavailable, Try again later"错误提示,当然等 ...

  10. 解决Springboot 的ajax跨域问题-动静分离

    @SpringBootApplication public class FsSysApiApp { public static void main(String[] args) { SpringApp ...