这一章主要讲Python的对象类型。
如下:
对象,Object,是Python中最基本的概念。
变量 = 某种类型的对象
使用 “=” 进行赋值
创建一个对象的例子:
输入x=7
然后再输入x,查看x
这就是对变量x进行赋值,设置值为7。
当我们再输入x=8.1后,
再输入x,查看,得到8.1,说明,x的赋值,已经从整数7,改成了浮点数8.1
Python的集中常用数据类型,如下:
变量名一般由英文字母,下划线或数字构成。
Python3则增加了中文日文等非英语语言作为变量名。
输入:yingyubianliang = "Hahahaha"
输入:yingyubianliang查询得到:
输入:中文变量 = "哈哈哈哈"
在Python中,int表示整数。长度一般为32位。
数值范围-2^31~2^31,超范围时,书上说数值后面会加L,但我在Spyder上没显示:
我直接计算2的100次方,然后输出x的数据类型为int,再打印x的数值。
没有出现书上说的L标识。不过这个知识点,无所谓。
注意:浮点数为二进制储存,表达的是近似值。
需要精确计算时,使用十进制数类型。Decimal。金融工作中常用。
浮点数和十进制数的差别在于:浮点数牺牲精度,但是计算效率高。
语句为真时,True
语句为假时,False
1>2,明显不成立,输出为False
2>1,明显成立,输出为True
在Python中,布尔类型是整数类型的子类。
所以,Ture可以用1表示,False可以用0表示。
这个我自己在工作中几乎没什么用过。
复数的数学形式为a+bi,其中a和b是实数,i是虚数。
Python用comples(x,y)来创建复数。X表示实部取值,y表示虚部取值。
可以看出,在Python中,虚数单位用j表示。
复数还可以直接写表达式。
String是由字符Character组成的序列Sequence。
字符串String,是一个有序的集合Sequence,这个集合中包含了字符Character
给变量Job赋值为字符串“Quant”
显示Job的类型时,输出为str,即String缩写。
因为字符串是字符的有序排列的集合。因此可以作一些集合的操作。
将Job理解为集合,按索引来显示对应序号的字符。
Python中没有Character这种字符类型。
字符Charater在Python相当于仅有一个字符的字符串。
列表List相当于容器。可以存放任何类型的对象。
列表也有序列功能,因此可以通过索引值来操作。
列表使用方括号[ ]来创建。
索引值以0开始表示列表中的第一个对象,以n-1表示列表中第n个对象。
超出n-1的时候,出现Off-by-One报错。
可以看到,L1这个列表List中存放了3个对象,最大索引值应该为2.
当我们将索引值写成3时,出现报错:list index out of range 即列表索引值超出范围。
列表里面还可以放列表
L2 = [10,"Price", ["Open", "High", "Low", "Close"]]
type(L2)
type(L2[2])
type(L2[1])
L2是个列表,
L2的第3个元素,即索引值为2的元素,为列表
L2的第2个元素,即索引值为1的元素,为字符串
一种序列类型的数据。
可以存储任何类型的数据,
元组一旦创建,内部数据无法增、删、改。
元组通过圆括号()来创建。
注意,圆括号常用来改变运算的顺序。
在创建只包含一个对象的元组时,为了避免冲突和歧义,规定在这个唯一对象后面加逗号。
没有逗号的t1,被认定为字符串str
加了逗号之后,t2被认定为元组tuple
T3,标准的字符串类型。
T4,两个字符串,中间有一个逗号,显示结果为元组。
T5,一个字符串,但是在结尾部分加一个逗号,显示为元组。
在语义明确下,创建元组可以不用圆括号。这种 语言很不严谨啊,好垃圾。
我们先确定t4是个元组。
T4的第二个元素,即索引值为1的值为‘zu’
当我们给t4的第二个元素重新赋值时,系统报错。
确认元组一旦建立,无法更改。
这种特性,可以用于不再需要修改的数据,将其设为元组,防止误写,提高代码安全性。
字典dict是一种映射Mapping的数据结构。
不同于序列,字典没有顺序,所以也不存在位置偏移量的索引。
字典的存储方式是 键:值 ,即 Key:Value的 映射关系(对照表)。
创建字典使用花括号{ }
读取字典的值时,使用方括号,填入键Key,得到Value值。
1、使用花括号创建字典,包含2个key:value pair
2、确认d1的类型为字典
3、使用Key,来提取Value。
容器的一种。
无顺序,不可变,不重复。
使用花括号创建,或将元素以列表的形式,传入内置函数set()中。
1、使用花括号创建集合
2、使用将列表传入set()的方式创建集合。
以x=7为例
1、Python解释器先判断等号右边的7是否存在。
若不存在,则根据7的类型(整数)分配内存,并在内存中创建数字7.
若存在,则直接把x(如果x已经存在的话)指向7
2、判断等号左边的x是否存在。
若不存在,创建出x,把x指向7
若存在,则直接把x指向7
可见,x和y所指向的内存地址一致。
Z和x的内存地址依然一致。
我们给z重新赋值之后,z的内存地址发生了变化。而x所指向的内存地址依然没变。
当我们重新给x赋值为9后,我们看到,x的内存地址也发能了变化
原理:
等号左边的x是变量。
等号右边的9是对象。
对于Python而言,整数,属于不可变对象(Immutable)
当整数对象在内存中建立后,其值将不能改变。
但是当我们修改变量的值时,变量将会调整内存指向新的值。
我们新创建一个x1的变量,使x1=7.
我们知道y=7.
这时,x1和y所指向的内存地址,是一样的。
这种赋值方法,优点在于减少重复值对于内存空间的占用。
缺点是执行效率降低。
字符串同样属于不可变对象。
字符串中的字符,同样不可变。
列表,是可变对象。
列表L1内容查看
新建变量L4,使其=L1
修改变量L4的第3个元素。
因为列表是可变对象,L4修改列表元素时,列表所指向的内存地址不变。
而L1和L4所指向的内存地址相同,
因此,当修改L4的列表元素时,L1也会同时进行改变。
(1,3,5,7)
使用圆括号创建的,是元组tuple类型。
‘pi’
使用引号创建,后面没有跟逗号,为str字符串类型
5>6
对比,结果是布尔类型Boolean,返回值为False
{"High":7.45, "Low":7.30}
花括号创建,中间用逗号隔开,每个元素中间有冒号来表示键值对,是字典dict类型
(3+4j) *(4+3j)
复数这东西太多年没用了,就记得实部和虚部相乘。
3/4=0.75
True*3 = 3
0.003 - 0.0022222
返回一个近似值,因为是浮点数计算。
创建a列表。
使b=a
打印b,得到【1,2,3】
判断a和b是否为同一个对象(内存地址是否相同),结论为相同。
修改b的第一个元素,使其值=3
打印a,列表为可变对象,a变为【3,2,3】
再判断a和b是否为同一个对象,列表为可变对象,所以修改对象内的元素,并不改变列表这个对象在内存中的位置。当b的数值修改时,列表的内存地址不变,因此,内存地址相同,返回True
6、什么臭老九题目,不就是创建键值对 key:Value pair嘛。没意义,不做。