第二天
编程的基本概念
python程序的构成
1.Python是由模块组成。
2.模块由语句组成。
3.语句是Python程序的构造单元,用于创建对象、变量赋值等。
对象
- 对象的构成:标识、类型、值组成
1.标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。
2.类型用于表示对象存储的“数据”的类型。
3.值表示对象所存储的数据的信息。 - 对象的本质
一个内存块,拥有特定的值,支持特定类型的相关操作。
引用的本质
在Python中,变量也成为:对象的引用。
变量位于:棧内存
对象位于:堆内存
- Python是动态类型的语言
变量不需要显式声明类型。
- Python是强类型语言
每个对象都是数据类型,只支持该类型支持的操作。
标识符
- 基本用法
标识符:用于变量、函数、类、模块等的名称。
- 标识符的规则
1.区分大小写。
2.第一个字符必学是字母、下划线。其后的字符是:字母、数字、下划线。
3.不能使用关键字。
4.以下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。
赋值
1.变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下: 变量名 = 表达式(a = 123)
注意:变量在使用前必须先被初始化(先被赋值)
2.删除变量
可以通过 del 语句删除不在使用的变量。
如:a = 123;del a;
注意:如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。
1.链式赋值
链式赋值用于同一个对象赋值给多个变量
如:x=y=520 相当于:x=520;y=520
2.系列解包赋值
系列解包赋值给对应相同个数的变量(个数必须保持一致)
如a,b,c=1,2,3 相当于:a=1;b=2;c=3;
[操作]使用系列解包赋值实现变量交换
a,b=1,2;
a,b=b,a;
print(a,b)
而c语言的变量交换
int a,b,c;
a=1;
b=2;
c=a;
a=b;
b=c;
printf(a,b);
所以,Python更简洁。
3.常量
Python不支持常量的,及没有语法规则限制改变改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值做出改变。
内置数据类型与算数运算符
基本的内置函数
- 整型整数,2345,10,50
- 浮点型 小数,3.14 或者科学计数法 314e-2
- 布尔型 表示真假,仅包含:True、False
- 字符串型 由字符组成的序列。 “abc”,”sxt”,
数字与基本的算数运算符
小技巧:使用 divmod()函数同时得到商和余数
输入:divmod(13,3)
运行结果: (4, 1)
整数
1.Python 中,除 10 进制,还有其他三种进制:
- 0b 或 0B,二进制 0 1
- 0o 或 0O,八进制 0 1 2 3 4 5 6 7
- 0x 或 0X,十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f
2.使用 int()实现类型转换:
- 浮点数直接舍去小数部分。如:int(9.9)结果是:9
- 布尔值 True 转为 1,False 转为 0。 如:int(True)结果是 1
- 字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错。
3.自动转型: 整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0
注意:在Python2 中,int 是 32 位,可以存储从-2147483648 到 2147483647 的整数(约± 21 亿)。Long 类型是 64 位,可以存储:-263–263-1 之间的数值,但是在Python3中,int 可以存储任意大小的整数,long 被取消。
时间表示和多点坐标(操作)
- 时间的表示 计算机中时间的表示是从“1970 年 1 月 1 日 00:00:00”开始,以毫秒(1/1000 秒) 进行计算。我们也把
1970 年这个时刻成为“unix 时间点”。 这样,我们就把时间全部用数字来表示了。
python 中可以通过 time.time() 获得当前时刻,返回的值是以秒为单位,带微秒 (1/1000 毫秒)精度的浮点值。例如:1530167364.8566。
下面展示一些内联代码片
。
import turtle
import math #定义多个点的坐标
x1,y1 = 100,100
x2,y2 = 100,-100
x3,y3 = -100,-100
x4,y4 = -100,100 #绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4) #计算起始点和终点的距离
distance = math.sqrt((x1-x4)**2 + (y1-y4)**2)
turtle.write(distance)
运行结果:
布尔值和运算符
-
Python2 中没有布尔值,直接用数字 0 表示 False,用数字 1 表示 True。 Python3 中,把 True 和
False 定义成了关键字,但他们的本质还是 1 和 0,甚至可以和数 字相加。 -
比较运算符
-
-
逻辑运算符
-
同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。
-
注意:is与 == 的区别
is用于判断2个变量引用对象是不是同一个而 == 是比较引用变量引用对象的值是不是相等。 -
整数缓存问题
Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对 象。需要注意的是,这仅仅是在命令行中执行,而在 Pycharm 或者保存为文件执行,结果是不一样 的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。 -
基本运算符
-
复合赋值运算符
-
运算符优先级问题
如下优先级,从高到低。
实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。
(1) 乘除优先加减
(2)位运算和算术运算>比较运算符>赋值运算符>逻辑运算符
字符串
字符串的基本特点
字符串的本质是:字符序列
Python 不支持单字符类型,单字符也是作为一个字符串使用的。
注意字符串编码问题 :Python3 直接支持 Unicode,可以表示世界上任何书面语言的字符。Python3 的字符 默认就是 16 位 Unicode 编码,ASCII 码是 Unicode 编码的子集。 使用内置函数 ord()可以把字符转换成对应的 Unicode 码; 使用内置函数 chr()可以把十进制数字转换成对应的字符。
- 引号创建字符串
我们可以通过单引号或双引号创建字符串。例如:a=’abc’; b=”sxt”
使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字符。
连续三个单引号或三个双引号,可以帮助我们创建多行字符串。
字符串的常用方法
转义字符
拼接
可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ == >’aabb’。
(1) 如果+两边都是字符串,则拼接。
(2) 如果+两边都是数字,则加法运算。
(3) 如果+两边类型不同,则抛出异常。
可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’==>’aabb’
复制
使用*可以实现字符串复制。如:a = ‘Sxt’*3 运行结果:‘SxtSxtSxt’
不换行打印
我们前面调用 print 时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行 符。我们可以自己通过参数 end = “任意字符串”。
如:print(“sxt”,end=’ ‘)
print(“sxt”,end=’##’)
print(“sxt”)
运行结果:
sxt sxt##sxt
常用的查找方法
len(a) 字符串长度
a.startswith(‘c’) 是否以指定字符串开头
a.endswith(‘c’) 是否以指定字符串结尾
a.find(‘c’) 第一次出现指定字符串的位置
a.rfind(‘c’) 最后一次出现指定字符串的位置
a.count(‘c’) 指定字符串一共出现几次
a.isalnum() 是否所有字符全是字母或数字
大小写转换
a.capitalize()产生新的,首字母大写
a.title()产生新的,单词首字母大写
a.upper()产生新的,所有字符全大写
a.lower()产生新的,所有字符全小写
a.swapcase()产生新的,所有字母大小写转换
排版
center()、ljust()、rjust()这三个函数用于对字符串实现排版。
常用于字符串的函数
- 切片函数slice()
- 切割函数splice()
- 合并函数join()
- 格式化函数format()
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的 功能。 基本语法是通过 {} 和 : 来代替以前的 % 。 format 函数可以接受不限个参数,位置可以不按顺序。 - replace()实现字符串替换
字符串的驻留机制
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制
可变字符串
可变字符串
在Python中,字符串属于不可变的想要修改就只能创建一个新的字符串;但是,如果实在想要修改或频繁的修改这个字符串就可以使用io.StringIO对象或者array。