python内建类型与标准类型

目录
  • 前言
  • 理解对象和类型
    • 关于不可变类型和可变类型
  • 关于动态静态强弱类型
    • 标准类型
    • 其它内建类型
    • 类型的类型
    • None ->空类型
    • 内建类型的布尔值

前言

全可以访问相同的对象, 因此我们讲 这种变量名也叫对象的 "引用".

验证1:

a = 2
b = 3
print(id(a),id(b))  #140734889681584 140734889681616
b = 2
print(id(b))    #140734889681584

验证2:

b = 3
print(id(b))    #140734889681616
b +=1
print(id(b))    #140734889681648

相加其实是创建一个新的对象,然后把这个标签b移到这个新的对象上

思考: 为什么Python的变量是这样的? 和C/C++差异这么大捏?

  • 空间考虑: 比如一个数字2, 在Python中只有这么一个数字2; 而一个C/C++程序中可能会有N个2.
  • 时间考虑: 比如 a=b 这样的赋值, 只是修改了一下贴标签的位置, 不需要对对象进行深拷贝. 为什么Python可以这么做, 而C/C++不能这样设计呢?
    • C++中的赋值相当于深拷贝, a = 100 b = a ->内存中存放了两份100
    • java和python相当于浅拷贝 a = 100 b = a ->a和b都是100的引用,内存中只存放了一份100

Python的GC机制, 是这样的设定的基础.

理解对象和类型

关于不可变类型和可变类型

  • python中的 int,str,float,tuple其实是不可变类型的变量 (即:没办法修改一个已经存在的int类型的对象的值),只能创建新的,不能修改已经有的
s = "hehe"
s[0] = 'a'; #error 报错 TypeError: 'str' object does not support item assignment

s = 'a'+s[1:]   #只能重新创建
print(s)    #aehe
#原来的hehe对象已经销毁,s贴在了aehe这个对象的身上

列表和字典都是可变对象:

  • 有些对象是 "相似" 的, 于是我们把对象归归类. 比如把所有的整数归为一类, 把所有的浮点数对象归为一类,把所有的字符串归为一类.
  • 相同的类型的对象, 须有相同的操作. 比如, 所有的整数对象, 都可以进行加减乘除操作. 所有的字符串都可以使用切片操作.

关于动态静态强弱类型

  • Python是一种 动态强类型 编程语言.
  • 动态是指运行时进行变量类型检查; 强类型 指类型检查严格, 并且"偏向于"不允许隐式转换.

  • 动态类型:一个变量在运行过程中类型发生变化
  • 静态类型:一个变量在运行过程中类型不能发生变化
  • 强类型:越不支持隐式类型转化,类型越强
  • 弱类型:越支持隐式类型转化,类型越弱

类似的, C语言是一种静态弱类型语言. Java的类型检查更为严格, 一般认为是静态强类型, 而Javascript则是动态弱类型

如:

int a = 10; long b = 20; a = b ->C++可以 java不可

int a = 10; bool b = false; a = b ->C++可以,把false当成0 java不可

动态类型:小规模下更好,使用灵活

大规模常用静态类型,否则多人协作容易有歧义

但是类型:越强越好

标准类型

  • 整型
  • 浮点型

注意:如果想要比较两个浮点数是否相同,不能直接比较,因为会有精度损失,要做差比较

  • 复数型
  • 布尔型
  • 字符串
  • 列表
  • 元组
  • 字典

其它内建类型

  • 类型
  • NULL对象(None)
  • 文件
  • 函数
  • 模块

类型的类型

前面我们说, 类型也是对象

print(type(type(100)))  #<class 'type'>  
print(id(type(100)))    #140734889206240

None ->空类型

Python有一个特殊的类型, 称为NoneType. 这个类型只有一个对象, 叫做None

print(type(None))   #<class 'NoneType'>
  • NoneType类似于C语言中的void
  • None类似于C语言的空指针NULL(NULL的含义:特指0号地址的内存)
  • None这个对象没啥有用的属性, 它的布尔值为False
def func():
    print("haha")
ret = func()    #打印haha     函数没有返回值却接收了,就是None
print(ret)  #打印None,

内建类型的布尔值

所有的标准对象, 均可以用于布尔测试(放到if条件中).

下列对象的布尔值是False:

  • None
  • False
  • 所有值为0的数字(0, 0.0, 0.0 + 0.0j (复数))
  • "" (空字符串)
  • [] (空列表)
  • () (空元组)
  • {} (空字典)
if "":
    print("True")
else:
    print("False")
#打印:False

其他情况下, 这些内建对象的布尔值就是True.

到此这篇关于python内建类型与标准类型的文章就介绍到这了,更多相关python内建类型 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python标准库之typing的用法(类型标注)

    PEP 3107引入了功能注释的语法,PEP 484 加入了类型检查 标准库 typing 为类型提示指定的运行时提供支持. 示例: def f(a: str, b:int) -> str: return a * b 如果实参不是预期的类型: 但是,Python运行时不强制执行函数和变量类型注释.使用类型检查器,IDE,lint等才能帮助代码进行强制类型检查. 使用NewType 创建类型 NewType() 是一个辅助函数,用于向类型检查器指示不同的类型,在运行时,它返回一个函数,该函数返回其

  • Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】

    本文实例讲述了Python列表list操作符.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 列表也可以使用比较操作符,比较时更加ASCII进行比较的. 比较列表时也用内建函数cmp()函数: 两个列表的元素分别比较,直到有一方胜出. 元组进行比较操作时和列表遵循相同的逻辑. 列表的切片操作和字符串的切片操作很像, 不过列表的切片操作返回的是一个对象或者几个对象的集合. 列表的切片操作也遵循从正负索引规则,也有开始索引值,结束索引值, 如果这两个值为空,默认为序列的开始和

  • Python的五个标准数据类型你认识几个

    目录 一.数字 二.字符串 1.Python中的字符串被确定为一组连续的字符在引号之间. 2.字符串串的子集, 3.加号(+)符号的字符串连接操作符 4.星号(*)表示反复操作. 三.列表 四.元组 五.字典 总结 Python的五个标准数据类型 数字 字符串 列表 元组 字典 一.数字 不可变数据类型,存储值为数值 1.创建对象,分配数值 例: >>> num1 = 1 >>> num2 = 2 >>> 2.也能够使用del语句删去有关一些对象. d

  • Python随手笔记之标准类型内建函数

    Python提供了一些内建函数用于基本对象类型:cmp(),repr(),str(),type()和等同于repr()的(' ')操作符 (1)type() type的用法如下: type(object) 接受一个对象作为参数,并返回它的类型.他的返回值是一个类型对象. >>>type('r') <type 'str'> >>>type(3) <type 'int'> >>>type(type(5)) <type 'typ

  • 利用标准库fractions模块让Python支持分数类型的方法详解

    前言 你可能不需要经常处理分数,但当你需要时,Python的Fraction类会给你很大的帮助.本文将给大家详细介绍关于利用标准库fractions模块让Python支持分数类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: fractions模块 fractions模块提供了分数类型的支持. Fraction类 该类是fractions模块的核心,它继承了numbers.Rational类并且实现了该类所有的方法. 构造函数并不复杂: class fractions

  • 详解Python中映射类型的内建函数和工厂函数

    1.基本函数介绍 (1)标准类型函数[type().str()和 cmp()]         对一个字典调用type()工厂方法,会返回字典类型:"<type 'dict'>".调用str()工厂方法将返回该字典的字符串表示形式.         字典是通过这样的算法来比较的:首先是字典的大小,然后是键,最后是值.可是用cmp()做字典的比较一般不是很有用. 算法按照以下的顺序: 首先比较字典长度         如果字典的长度不同,那么用cmp(dict1, dict2

  • python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)

    一.变量和表达式 复制代码 代码如下: >>> 1 + 1               2>>> print 'hello world' hello world>>> x = 1               >>> y = 2>>> x + y3 Python是强类型语言,无法根据上下文自动解析转换成合适的类型. Python是一种动态语言,在程序运行过程中,同一个变量名在运行的不同阶段可以代表不同形式的值(整型,浮

  • python内建类型与标准类型

    目录 前言 理解对象和类型 关于不可变类型和可变类型 关于动态静态强弱类型 标准类型 其它内建类型 类型的类型 None ->空类型 内建类型的布尔值 前言 全可以访问相同的对象, 因此我们讲 这种变量名也叫对象的 "引用". 验证1: a = 2 b = 3 print(id(a),id(b))  #140734889681584 140734889681616 b = 2 print(id(b))    #140734889681584 验证2: b = 3 print(id

  • Python内建类型bytes深入理解

    目录 引言 1 bytes和str之间的关系 2 bytes对象的结构:PyBytesObject 3 bytes对象的行为 3.1 PyBytes_Type 3.2 bytes_as_sequence 4 字符缓冲池 引言 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 在我们日常的开发中,str是很常用的一个内建类型,与之相关的我们比较少接触的就是bytes,这里先为大家介绍一下bytes相关的知识点,下一篇博客再详细介绍str的相关内容

  • Python内建类型str源码学习

    目录 引言 1 Unicode 2 Python中的Unicode 2.1 Unicode对象的好处 2.2 Python对Unicode的优化 3 Unicode对象的底层结构体 3.1 PyASCIIObject 3.2 PyCompactUnicodeObject 3.3 PyUnicodeObject 3.4 示例 4 interned机制 5 总结 引言 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 在介绍常用类型str之前,在上

  • Python内建类型list源码学习

    目录 问题: 1 常用方法 小结: 题外话: 2 list的内部结构:PyListObject 3 尾部操作和头部操作 3.1 尾部操作 3.2 头部操作 4 浅拷贝和深拷贝 4.1 浅拷贝 4.2 深拷贝 4.3 直接赋值 4.4 小结 个人总结: TODO: 5 动态数组 5.1 容量调整 5.2 append() 5.3 insert() 5.4 pop() 5.5 remove() 6 一些问题 问题: “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种

  • Python内建类型int源码学习

    目录 1 int对象的设计 1.1 PyLongObject 1.2 整数的布局 1.3 小整数静态对象池 1.4 示例 2 大整数运算 2.1 整数运算概述 2.2 大整数运算处理过程 1.long_add()源码: 2.绝对值加法x_add() 3 其他 大整数转float溢出 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 问题:对于C语言,下面这个程序运行后的结果是什么?是1000000000000吗? #include <stdio

  • Python内建类型float源码学习

    目录 1 回顾float的基础知识 1.1 PyFloatObject 1.2 PyFloat_Type 1.3 对象的创建 1.4 对象的销毁 1.5 小结 2 空闲对象缓存池 2.1 浮点对象的空闲链表 2.2 空闲链表的使用 3 其他 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 1 回顾float的基础知识 1.1 PyFloatObject 1.2 PyFloat_Type C源码(仅列出部分字段): PyTypeObject P

  • Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Python本来就是高级解释性语言,运行的时候都是经过翻译后再在底层运行.如何打通Python和其他语言之间的类型定义障碍,Python的内建模块struct完全解决了所有问题. 知识介绍: 在struct模块中最最常用的三个: (1)struct.pack:用于将Python的值根据格式符,转换为字符串(因

  • 了解一下python内建模块collections

    在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典. 那实际应用中我们更多的还是要去操作这些结构里的数据.比如,在列表后面添加元素,那么就会用到append() 方法. 那除了这些本身的操作方法之外,还有一个Python内建模块--collections,也提供了不少使用的方法,今天来捋一下. 一.Counter 这是一个计数器,我们可以用来方便的统计出一些元素出现的次数,比如String.List.Tuples等等.

  • Python内建属性getattribute拦截器使用详解

    目录 引言 1.内建属性__getattribute__的用法 2.重写__getattribute__实现属性拦截功能 总结要点: 引言 因为python中所有类默认继承object类. 而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性. 可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多.而很多系统提供的内建属性实际开发中用户都需要重写后才会使用. 对于python来说,属性或者函数都可以被理解成一

  • Python内建数据结构详解

    一.列表(List) list 是一个可以在其中存储一系列项目的数据结构.list 的项目之间需用逗号分开,并用一对中括号括将所有的项目括起来,以表明这是一个 list .下例用以展示 list 的一些基本操作: # 定义一个 list 对象 class_list: class_list = ['Michael', 'Bob', 'Tracy'] # 获得一个 class_list 的长度 print 'class have', len(class_list), 'students' # 访问c

随机推荐