基本元素: 变量&数字
1. 变量&常量
==所有数据(布尔值、数字、字符串,甚至大型数据结构、函数、程序)都以对象形式存在==。对象就像一个装着数据的盒子,对象有不同类型,类型决定了可以对它进行的操作以及它装着的数据是允许被修改的变量还是不可被修改的常量。
变量名是对对象的引用而不是对象本身,可把名字想象成贴在盒子上的标签。a = 7
,7是要存储的数据;数据是用来表示状态的,不同的状态用不同类型的数据表示。
- ==Only==字母、数字或下划线的任意组合,且第一个字符不能是数字; 保留关键字不能声明为变量名
- 定义变量名不好的方式:使用中文、拼音;名字过长;词不达意
- ==推荐使用下划线==:age_of_oldboy;number_of_students;驼峰体:NumberOfStudents
- 约定变量名全部大写代表常量(在程序运行过程中不会改变的量):
AGE_OF_OLDBOY = 56
1.1 type(),id(),value
1.2 内存管理(引用计数(Reference Count)与垃圾回收机制)
- 引用计数 +1
x=1
,对象被创建并将其引用赋值给变量,1的引用计数为1
y=x
,对象的引用又赋值给其它变量,1的引用计数为2
list_test=['alex',x]
,对象成为容器对象中的一个元素,1的引用计数为3
int(x)
,对象作为参数被函数调用,1的引用计数为4 - 引用计数 -1
int(x)
,函数运行结束后,包括x在内的所有局部变量均会被销毁,引用计数减1
list_test.remove(x)
,容器中的元素被清除,或(容器本身被销毁del list_test
),引用计数减1
y=2
,1的引用计数减1
del x
,删除内存对象1的引用x,1的引用计数减为0,将成为python解释器回收的目标
Python内存回收交给一段独立的代码即垃圾回收器(包含引用计数器和循环垃圾收集器),引用计数在归零时并不会立即清除(可能有循环调用)。不必纠结循环引用收集,只需记住垃圾回收器会自动清理内存。
2. 数字
- int整数 age=10(age=int(10)); Python2中占32位,取值范围为- 231 - 231 -1;long长整型占64位。Python2.2起,如果整数发生溢出会自动将其转换为长整数,所以在长整数数据后面不加L也不会导致严重后果。Python3取消长整型概念,int型可存储任意大小整数。许多语言计算中的数字或结果需要的存储空间超过所提供的(32或64位)会造成整数溢出,而Python处理超大数不会产生任何错误。整数默认使用十进制,除非显式指定使用其他基数(base): 0b/0B 二进制; 0o/0O 八进制; 0x/0X 十六进制
- 浮点数 salary=3.1(salary=float(3.1)); 类似于C语言
double
类型,占64位,其中52位表示底,11位表示指数,剩下的一位表示符号,3.23和52.3E-4(E表示10的幂, 52.3∗10−4 )。
5 + 10 + 9 # 数字和运算符之间的空格不是强制的
print(1.0/2) # ==> 0.5,如果要得到小数部分,把其中一个数改成浮点数即可
print(divmod(14, 5)) # ==> (2, 4), divmod()函数得到商和余数,返回包含两个元素的元组
print(0b10, 0o10, 0x10) # Python 解释器会打印出对应的十进制整数
2.1 类型转换
print(int(True),float(True)) # ==> 1 1.0,布尔型转换为整数时代表 1&0; 浮点数时代表 1.0&0.0
print(int(98.6),float(98)) # ==> 98 98.0,浮点数转换为整数时,小数点后面的部分会被舍去
print(int('-23'),float('-1.5')) # ==> -23 -1.5,仅包含数字和正负号的字符串
print(float('98.6'),float('1.0e4')) # ==> 98.6 10000.0,float()可以接受包含小数点或指数的字符串
print(int('98.6'),int('1.0e4')) # int()无法接受包含小数点或指数的字符串
print(int('99 bottles of beer')) # 将与数字无关的类型转化为整数,会得到一个异常
2.2 其他数字类型
04. 有序可重复序列结构: 字符串&列表&元组
1. 有序可重复:
- 不可变(值变id就变, 可hash); 可变(值变id不变, 不可hash)
字符串
由字符组成的不可变序列; 无法修改原字符串,但可将其一部分复制到新字符串,来达到相同的修改效果。元组
由任意类型元素组成不可变序列,占用空间小; 可用作字典的键; 命名元组可作为对象的替代; 函数参数以元组形式传递。列表
由任意类型元素组成可变序列,可任意插入或删除其中的元素。
2. 通用操作
2.1 成员运算 in、not in;内置函数len();类型转换;拼接 +,复制 *
- 调用print()函数会自动使用str()将非字符串对象转换为字符串打印
- list()将其他数据类型转换成列表; tuple()将其他数据类型转换成元组
2.2 取值(正向/反向)
索引取值[指定偏移量小于起始位置或者大于末尾位置时,会产生异常];分片(slice)[起始偏移量start:终止偏移量end:可选步长step],顾头不顾尾
2.3 循环
2.4 index(),rindex()函数特定元素位置; count()函数特定元素出现次数
2.5 zip()
zip()函数可创建一个元组对的列表; 参数可以接受任何类型的序列,同时也可以有两个以上的参数
3. 字符串专用
3.1 基本操作:转义 \,\n(换行), \t(tab制表符),格式化输出
print('123\tabc45\n','123a\tbc45\n','123ab\tc45\n','abc\t45\n')
print('Today we honor our friend, the backslash: \\.')
3.2 字符串函数
调用字符串函数需要输入字符串名称,函数名及传入参数:string.function(arguments)
* strip,lstrip,rstrip; lower,upper,captalize,swapcase,title; startswith,endswith
- 分割 split() rsplit(); join()合并为字符串
join()函数的参数是字符串或者其他可迭代的包含字符串的序列,输出是一个字符串。join()的调用顺序要求首先指定粘合用的字符串,然后再指定需要合并的列表:string.join(list)
- 查找:find(),rfind(); 替换 replace()
replace()如果想确保被替换的子串是一个完整的词,或者某一个词的开头等等,需要借助正则表达式。
对齐填充:center,ljust,rjust,zfill
把字符串中的tab符号(‘\t’)转为空格: expandtabs
is系列: isdigit(最常用),isdecimal(十进制),isnumeric(是否只包含数字字符)
4. 列表专用
4.1 使用[offset]修改元素
4.2 extend()合并列表; insert()在指定位置插入元素; append()添加元素至尾部; del删除指定位置元素; remove()删除具有指定值的元素; pop()获取并删除指定位置的元素
del
是Python语句:将一个Python对象与它的名字分离。如果这个对象无其他名称引用,则其占用空间也被会清除。