对象:
Python中一切皆对象。每个对象由:标识、类型、value组成
- 标识用于唯一标识对象,通常对应于对在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识
- 类型用于表示对象存储的“数据”的类型,类型可以显示对象的取值范围以及可执行的操作。可以使用typeof(obj)获得对象所属的类型。
- 值表示对象所存储的数据的信息。使用print(obj)可以直接打印出值。
对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。
引用
在python中,变量也称为:对象的引用。因为,、变量存储的就是对象的地址。
变量通过地址引用了“对象”。
变量位于:栈内存(压栈出栈)
对象位于:堆内存
关于栈和堆后面讲方法的时候细说。
Python是动态类型语言
变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。
Python是强解释类型语言
每个对象都有数据类型,只支持该类型支持的操作。
标识符
基本用法:
标识符基本用于变量,函数,类,模块等的名称。
规则:
- 区分大小写
- 字符必须由字母,数字,下划线组成,第一个字符不能为数字
- 不能使用关键字
- 以双下划线开头和结尾的名称通常有特殊的含义,比如:_init_是类的构造函数
【注意】可使用help()>>keywords查看关键字
也可以按f1查看帮助
变量和简单赋值语句
变量的声明和赋值
变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下:
变量名 = 表达式
最简单的表达式就是字面量,比如: a = 123,运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算结果的对象,然后将这个对象地址赋值给左边的变量。
【注意】变量使用前必须先被初始化(先被赋值)
删除变量和垃圾回收机制
可以通过del语句删除不再使用的变量:del 变量名
如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。
链式赋值
将一个对象赋值给多个变量:x = y = 123;相当于 x =123; y = 123;
系列解包赋值
a,b,c = 1,2,3 相当于 a = 1; b = 2; c = 3;
可以实现变量交换
a,b = 1,2
a,b = b,a
常量
python不支持常量,即没有语法规则限制改变一个常量的值,我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值做出改变---实际上是可以更改的
最基本的内置数据类型介绍
每个对象中都有数据类型,python中最基本的内置数据类型:
- 整型:整数
- 浮点型:如小数或者科学计数法
- 布尔型:表示真假,仅包含true和false
- 字符串型:由字符组成的序列----”abc”
关于基本的运算
需要特别说明的地方:
/表示的是浮点数除法---如:8/2=4.0
//表示的是整数除法-----如:7/2=3
**表示取幂----2**3 = 8
使用divmod(13,3)函数可以同时得到商和余数
0xff为什么折算成十进制是255呢?
Ff----1515---255---25/16=1...9 95/16=5...15 1515也就是ff 反过来怎么算呢
ff也就是1515 15+15*16=255
使用int()实现类型转换
- 浮点数直接舍去小数部分,如int(9.9) = 9
- 布尔值true直接转换为1
- 字符串符合整数格式(浮点数格式不行)则直接转换成对应的整数,否则报错如:int(“234abc”)则直接报错
自动转型
整数和浮点数混合运算的时候,表达式的结果自动转换成浮点数,比如:8+2.0=10.0
整数可以有多大
Python3中,可以存储任意大小的整数,long被取消
正因为如此,python3中可以做超大数的计算,而不会造成“整数溢出”,Python3适合做科学运算
浮点数
浮点数,称为:float
浮点数用a x b(上标)形式的科学计算法表示,比如:3.14表示成314E-2
这些数字在内存中也按照科学计数法存储
类型转换和四舍五入
1.类似于int()我们也可以使用float将其他类型转化为浮点数
2.整数和浮点数混合运算的时候,表达式的运算结果会自动被转换为浮点数
3.round()四舍五入值
时间的表示
1970这个时间点成为“unix时间点”,python中可以通过time.time()获得当前时刻,返回的值是以秒为单位,带微妙(1/1000毫秒)精度的浮点值。
布尔值
Python3中,把true和false定义成了关键字,但是他们的本质还是1和0,甚至可以和数字相加。
逻辑运算符
Or and not
X or y :
x为true则不计算y的值,直接返回true
X为false,则返回y
X and y:
x为true,则直接返回y值
y为false,则直接返回false
同一运算符
用于比较两个对象的存储单元,实际比较的是对象的地址
运算符
Is:判断两个标识符是不是引用同一个对象
Is not:是判断两个标识符是不是引用不同的对象
Is与 = =的区别:
Is用于判断两个变量引用对象是否为同一个,即比较对象的地址
==:用于判断引用变量引用对象的值是否相等,默认调用随想的_eq_()方法
整数缓存问题
Python仅仅对比较小的整数对象进行缓存,范围为[-5,256]缓存起来,并非是所有整数对象。需注意的是,这仅仅是在命令行中执行,而在pycharm或者保存为文件执行,结果十步一眼的,这是因为解释器做了一部分优化---范围是[-5,任意正整数]
字符串
字符串的基本特点
字符串的本事是:字符序列。Python的字符串是不可变的,我们无法对原字符串做任何修改,但是可以将原字符串的一部分复制到新创建的字符串,达到看起来修改的效果
Python不支持单字符类型,单字符类型也是作为一个字符串使用的
字符串的编码
Python3直接支持unicode,可以表示世界上任何书面语言的字符,python3的字符默认就是16位的unicode编码,asciii吗是unicode编码的子集。
使用内置ord()可以吧字符转换成对应的unicode码;使用内置函数chr()可以将十进制字符转换成对应的字符。
引号创建字符串
我们可以通过单引号或者双引号创建字符串。例如:a = ‘abc’
使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字符。
连续三个单引号或三个双引号,可以帮助我嫩创建多行字符串。
如:resume = ‘’’name = “gaoqi”
Conpany = “sxt”
Lover = “Tom”’’’
空字符串和len()函数
Python允许空字符串的存在,不包含任何字符且长度为0.
Len()函数用于计算字符串的长度
转义字符
注意:转义字符还是要写在冒号里面的
我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果。比如换行等
常见的转义字符有
转义字符 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
字符串的拼接
字符串的复制
使用“*”比如:’gaoqq’*3 == ‘gaoqqgaoqqgaoqq’
不换行打印
控制台上读取字符串
字符串的占位符:
关于format函数的使用。
通过前面的{}来控制输出格式,通过format中传递的参数向前面的{}传递参数
还可以通过字典设置参数或者通过列表设置参数
下面这种传对象的暂时不是很明白
列表
列表的方法:
Append()用于在列表中添加新的对象
Extend()函数是向列表中传递一个列表对象,将该列表中的每个元素都传递给原列表
多维列表
二维列表
一维列表可以帮我们存储一维的,线性的数据
二维列表可以帮我们存储二维表格的数据
如何表示一张二维列表呢?
姓名 | 年龄 | 薪资 | 城市 |
高小一 | 18 | 30000 | 北京 |
高小二 | 19 | 20000 | 上海 |
高小五 | 20 | 10000 | 深圳 |
用程序表示以及引用上面的表格:
在内存的结构中,只存了三个一维数组的第一个元素的地址
也就是a[0][0],a[1][0],a[2][0]
扩展:如何遍历二维数组中的所有数据