python自主学习——python变量和数据类型
python使用对象(object)模型储存数据,因此所构造的任何数据类型都以对象的形式存在。python内置的4种最基本的数据类型,包括:
- 布尔型(用来表示真假,仅包含True和False两种取值)
- 整性(整数)
- 浮点型(小数)
- 字符串型(字符序列)
对象和变量
python中的一切都是对象。对象具有三个特征:
- 身份:每个对象唯一身份标识,可以使用内建函数id()查看,id()所得的值就是改对象的内存地址
- 类型:决定了该对象可以保持什么值,使用内建函数type(obj_name)可以查看。注意:该函数返回的是类型对象,而不是字符串对象。对象类型决定了可以对他进行怎样的操作,还决定了其包装的值是否被允许修改。对象的类型无法改变,所以python是强类型的
- 值:对象表示的数据项
对象值的比较
- 操作符:<,>等等
###对象身份的比较
foo1 = foo2 = 4.3
这条语句的实质是:一个值为4.3的·数字对象被创建,foo1和foo2这两个变量名字共同指向了此对象(变量仅仅是一个名字,是对对象的引用而不是对象本身)即foo1和foo2是同一个对象的两个引用:即foo1和foo2是同一个对象的两个引用
foo1 = 4.3
foo2 = foo1
第一句话使得值为4.3的数字对象被创建,然后其引用被赋值给foo1,第二句话使得foo2借助foo1同样指向了值为4.3的对象,这里和上一个例子实质是相同的
foo2 = 1.3 + 3
值为1.3
的数字对象和值为3
的数字对象被创建,相加后,得到一个新的值为4.3
的对象 (此对象与上面代码中的值4.3
对象不是同一个!),然后foo2
指向了这个新对象。
当两个值相同的,身份不同(变量名相同)被创建,可以用 id() 返回的对象的地址来判断两个对象是否指向同一个地址
foo1 = foo2 = 4.3
id(foo1) == id(foo2) #返回值为True
bar1 = 4.3
bar2 = 4.3
id(bar1) == id(bar2) #返回值为False
当然也可以用is 和 is not操作符来判别身份的最佳方式:
foo1 = foo2 = 4.3
foo1 is foo2 # 返回True
foo1 is not foo2 # 返回False
*小整型量通常会在程序代码中频繁使用,为了提升效率,Python会对**-5~256*的整型对象进行缓存,即不会重复创建。
但是我们可以明显的发现当出现258 is 258 时,返回值还是true 任何一个对象都有一个内部的计数器,记录着其引用的数量, 当引用为0时,该对象就会被系统给收回,这就是Python进行自主内存管理的基本原理之一。
a = 4
b = 4
a is b
# true
257 is 257 #True
c = 1000
d = 1000
c is d
# false
我们可以利用type()返回对象类型:
type(4) #int
type(4.0) #float
type('abc') #str
# type()返回的不是字符串而是类型对象
type('abc').__name__ #返回‘str’,__name__是返回对象的属性
type(type('abc')) #返回type,python的内建函数
可以用isinstance()来检查一个对象是否是某类型使用的对象
isinstance(num, (int, float, complex)):
判断前边的num是否是(int, float, complex)中的一种;complex为复数
变量名(标志符):
命名规范:
- 只能包含小写字符、大写字母、数字、下划线(_)
- 大小写敏感
- 不允许以数字开头
- 以下划线开头的名字由特殊的含义
- 不能使用python保留关键字
数字
数字可以直接访问,是不可更改且不可分割的原子类型。不可更改数字值的实质是新对象的创建。python本身支持整数和浮点数,其整数类型可以储存任意大小的整数(所能表达的数字范围和计算机的虚拟内存大小有关),这使得python十分适合大数的计算
布尔型
True和false
布尔运行算符:not、and、or(优先级由低到高)
复数
语法:real + imag j
用conjugate()可以获得其共轭复数
a_complex = 3.5 + 2.9j
a_complex.conjugate() # 返回(3.5-2.9j)
删除对象
del an_int
删除对象时只是删除了对象的引用,而不是删除了对象本身(相当于使对象内部计数器的值减少1),这时an_int不引用任何对象。对象本身的删除是由python内部的内存管理功能进行的
除法
- 使用
/
执行浮点除法
如果运算对象是两个整数,使用/
仍会得到浮点型结果 - 使用
//
执行整除
1 / 2 # 0.5
1.0 / 2 # 0.5
1.0 // 2 # 0.0
9 / 5 # 1.8
9 // 5 # 1
基数
除了十进制外,python还支持以下三种类型的数字:
0b
或0B
表示二进制(以2为底)0o
或0O
表示八进制(以8为底)0x
或0X
表示十六进制(以16为底)
将整数转成相应进制的字符串
value = 65
bin(value) #'0b1000001'
oct(value) #'0o101'
hex(value) #'0x41'
类型转换
两个不同类型的数字对象进行运算时,python就要对其中一个进行强制类型转换,继而进行运算,这个道理和C语言中的自动转化是相似的**。基本规则:整型转化为浮点型,非复数转化为复数。总而言之:简单类型向复杂类型转换,不精确类型向更精确类型转换**
功能函数
-
abs():返回绝对值,如果参数是整型,返回整型,如果是浮点型,返回浮点类型,同样也可以用于复数绝对值的计算,即返回实部和虚部平方和的二次方根
a=2+2j abs(a) #2.8,根号8
-
divmod():此函数将除法和求余结合起来,返回一个包含商和余数的元组:
divmod(10, 3) # 返回(3, 1) divmod(2.5, 10) # 返回(0.0, 2.5)
-
pow()
此函数功能和
**
一样,实现幂运算 -
round(number,[ndigits])
返回number舍入到小数点后第几位。如果ndigits被省略或为None,则返回最接近输入值的整数round(4.499) # 返回4 round(4.499, 1) # 返回4.5 round(4.5) # 返回4 等距离倾向于返回偶数