本文章将介绍:
1.一些常用的、有用的自省函数。
2.python常见类型的分类。
3.对5个简单类型分别进行介绍,其余类型将在后面展开。
一、常用的自省函数
(1)help()
返回python中相关的文档信息,包括内建函数等
(2)type()
返回当前对象的类型
(3)dir()
返回当前对象的所有属性
(4)callable()
判断当前对象是否可调用,英文--call呼叫,callable--可以呼叫的--可被调用的
(5)id()
返回对象的“唯一序号”。对于引用对象来说,返回的是被引用对象的id()。该序号是引用地址,与C++中的内存地址概念不同。(emmm...具体有哪些不同,为什么不同,差异在哪里还不太清楚,后面再填坑)
(6)hasattr()和getattr()
分别判断对象是否有某个属性及获得某个属性值。
(7)isinstance()
可以确认某个变量是否有某种类型。
二、python中常见类型的分类
相对于静态语言(如C++,java),python的数据类型功能更全面和强大。
python面向对象的原理与其他语言不同的地方在于:
(1)所有数值都封装到特定的对象中,不存在像C中那样的int这样的简单类型。(而是把它当做一个类,一个class)
(2)所有东西都是对象,包括代码本身也被封装到对象中。(还没理解)
常见类型如下:
分类 | 类型名称 | 描述 |
None | NoneType | 空对象 |
数值 | IntType | 整数 |
FloatType | 浮点数 | |
ComplexType | 复数 | |
布尔 | BoolType | 布尔类型 |
序列 | StringType | 字符串 |
UnicodeType | Unicode字符串 | |
ListType | 列表 | |
TupleType | 元组 | |
RangeType | range()函数返回的对象 | |
BufferType | buffer()函数返回的对象 | |
映射 | DictType | 字典 |
集合 | Set | 集合类型 |
可调用类型 | BuiltinFunctionType | 内建函数 |
BuiltinMethodType | 内建方法 | |
ClassTpye | 类 | |
FunctionType | 用户定义函数 | |
InstanceType | 类实例 | |
ModuleType | 模块 | |
类 | ClassType | 类定义 |
类实例 | InstanceType | 类实例 |
文件 | FileType | 文件对象 |
内部类型 | CodeType | 字节编译码 |
FrameType | 执行框架 | |
TracebackType | 异常的堆栈跟踪 | |
SliceType | 由扩展切片操作产生 | |
EllipsisType | 在扩展切片中使用 |
一上来就丢过来这么一大堆表格,是不是看得头昏眼花呢?哈哈哈。其实这些类型中“内部类型"主要是python解释器调用的时候使用,一般程序员很少使用,可以不用管它。其余的有部分重复,其实也不是很多啦,后面会一一介绍的。
三、简单类型
python简单类型包括5个:
(1)bool类型:用于逻辑运算和比较的类型
(2)int类型 :类似于C++的int类型
(3)float类型:用来表示小数的类型
(4)complex类型:用来表示复数的类型,有实数和虚数两个部分。(PS:这是其他语言没有的)
(5)None类型 :空类型,用来表示空或者无返回值。
1.布尔类型(bool)
布尔值仅可能为True或False。
布尔运算:
(1)小于,比如i<100;
(2)小于等于,比如i<=100;
(3)大于等于,比如i>=100;
(4)相等,比如 i == 100;
(5)不等于,比如i!= 100.
逻辑运算符还有
或:or 与:and 非:not,与C++中||,&,!相对应。
与C++有所区别,python中非零值对应于真,True;而0,0.0,0.00,空列表[],空字典{},空元组(),None,以及空字符串“”都对应于假,Flase。而把一个bool类型的True或Flase用int转换,却只会成为1或者0。
与C++类似,对于一个逻辑表达式,从左往右扫描,当当前结果足以确定最终结果时,不再执行后面的表达式。如:expr1 and expr2,若expr1为假则不再执行expr2了,直接返回expr1的值(而非返回0)。
2.整数类型(int)
支持加减乘除,幂,求模等各种运算,在python3.x中合并了int和long。
与C++一样,不同精度数值运算,结果会转换为精度最高的那个类型。精度上:
与C++的区别:
(1)幂运算用两个*表示,如2的3次方为2**3
(2)python中整数相除不会强制取整,而更符合人的思考如:print(1/3) 为0.333333333333333
(3)求模,python中不限制%符号两侧必须是int型,如1%3.0结果为1.0,1%0.25结果为0.0
(4)八进制:在数值前加上一个0和一个o
(5)优先级:幂>乘除==求模>>加减
3.浮点数类型(float)
大致与C++相同,需注意的是,只要是带圆点符号的数值都会被认为是浮点数类型。
即使是如:1. 这样也会被等同于1.0
4.复数类型
这是一个在其他语言很少见的一个类型,python常被用于科学计算,复数类是科学计算中很有用的一个部分。
形如:a+bj。用type()函数查看类型,print(type(2+3j)),结果是<class'complex'>复数类。j是-1的平方根,即j**j==-1。
5.None类型
这是一个python中特有的概念“空对象”。
什么是空对象呢?首先,pyhton的思想是万物皆对象,一切都是对象,那空对象就是说没有对象,没有一切,一切没有,什么都不存在。与空字符串“”的区别在于,空字符串虽然看上去没有字符串,但实际上还是一个字符串只不过长度为0罢了,相同点是都可以表示Flase;同样的,None与0不同,0是一个数值,只不过大小为0罢了。而None是python中的一个特殊的常量,它就是表示什么都没有,什么都不存在。函数中无返回结果即为None,相当于C++中的Null。
PS:(1)None是一个特殊的常量,类型是NoneType,可以把None赋值给别的,但不能创建一个其他NoneType类型的对象。
(2)None不能与None之外的量进行大小比较(会报错),None与None之间也只能用==,返回True。
(3)对None可以进行逻辑运算,None和其他量相and,返回None。(是and起的作用)
not None为True。
四、简单类型的运算
主要介绍python的位运算(二进制):
1.求补:按位取反再加一 ~
2.左移右移 <<,>>
3.按位异或 ^
4.按位求和 &
5.按位求或 |
五、常量类型
简单类型均为常量类型,也就是说这些类型对象一旦被创建,其值就不能修改。
与C++不同,C++中如下操作:
int a;
a = 1;
a = 2;
是说:声明一个整型变量啊,先给a赋值为1,再更改赋值为2,这里的a是一个变量,值可以更改。
Python中:
a = 1
a = 2
是说:有一个int类对象 1,先把a这个名字与该int类对象绑定,此时a就是这个int类对象的名字,相当于a指向了该int类对象1。
然后,有一个int类对象 2,再把a这个名字与该int类对象绑定,此时a又指向了这个int类对象2.但是要注意的是,原先的int类对象1作为简单类型对象,是一个常量类型对象,按道理来说是不能更改的,那么这里我们更改了吗?我们先引入一个函数--id()
他能返回当前对象的编号,这个编号就相当于C语言里的内存地址。
我们做如下操作:
a = 1
id(a)
a = 2
id(a)
我们会发现前一个id()返回值和后一个id()返回值不同,也就是说,与C++中不一样,C++中这样操作a的地址是不变的没变的是a的值,而python中改变了,其实就是说,是a的位置发生了变化,而非原先的1改变了,实际上原先的1一直保存在第一个id(a)返回的编号中,只是a更改了指向,指向了2。