- 惰性求值:不会立刻求值,而是等用到是在求值
- 库很丰富
- 运行效率很高
- #号进行注释
1 Python概述
1.1 常用内置对象
对象类型 | 类型名称 | 描述 |
---|---|---|
数字 | int、float、complet(复数) | 数字大小没有限制,内置支持复数及其运算 |
字符串 | str | 使用引号、双引号、三引号作为定界符,以字母r或R引导的表示原始字符串 |
字节串 | bytes | 以字母b引导、定界符一致 |
列表 | list | 所有元素放在方括号中,逗号分隔,其中元素可以是任意类型 |
字典 | dict | 所有元素放在大括号中,逗号分隔,元素形式为“键:值” |
元组 | tuple | 不可变,所有元素放在圆括号中,逗号分隔,如果元组中只有一个元素的话,后面的逗号不能省略 |
集合 | set | 所有元素放在大括号中,逗号分隔,元素不允许重复 |
此外还有布尔型、空类型、异常、文件、其他可迭代对象、编程单元等。
1.1.1 常量与变量
在Python中,不需要事先声明变量名及其类型,其赋值可创建任何类型的变量。
- 变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有哦特殊含义
- 变量名中不能有空格以及标点符号
- 不能使用关键字作为变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有Python关键字
- 变量名对英文字母大小写敏感
- 不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作为变量名
1.1.2 数字
-
Python支持任意大的数字
-
由于精度问题,对于实数运算可能有一定误差,应尽量避免在实数之间直接进行相等性测试,而应该测试两个实数是否足够接近。isclose
-
Python内置支持复数类型及其运算
1.1.3 字符串与字节串
- 只有字符串类型的常量和变量,单个字符可是字符串,使用单引号、双引号、三单引号、三双引号作为定界符,不同的定界符之间可以互相嵌套。
- Python 3.x全面支持中文,中文和英文字母都作为一个字符对待,甚至可以使用中文作为变量名
- 除了支持使用加号运算符连接字符串之外,还有提供了大量方法支持格式化、查找、替换、排版等操作
1.2 运算符、表达式
+、-、*、/、//(求整商)、%(取余)、**(幂运算)、or、and、not、in(成员测试)、is(对象同一性测试)、
1.2.1 算术运算符
- +:算术加,可用于列表、元组、字符串的连接,不支持不同类型对象间的相加或连接
- *:算术乘,可用于列表、元组、字符串与整数的乘法。表示序列元素的重复,生成新的序列对象
- /和//:算术除和算术求整商(向下取整)
- **:幂乘
1.2.2 关系运算符
- 操作数之间必须可比较大小
1.2.3 成员测试运算符
- 用于成员测试,测试一个对象是否为另一个对象的元素
1.2.4 集合运算符
- 集合的并集(|)、交集(&)、对称差集(^)、差集(-)
1.2.5 逻辑运算符
-
and、or、not连接条件表达式构成复杂条件表达式,并且and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值
-
运算符and和or并不一定会返回true或false,而是得到最后一个被计算的表达式的值,但not一定会返回true或false
-
Python不支持++和–运算
1.3 关键字简要说明
- Python关键字只允许用来表达特定的语义,不允许通过任何方式改变它们的含义,也不能用来做变量名、函数名或类名等标识符
1.4 常用内置函数用法
- 内置函数(BIF)是Python内置对象类型之一,不需要额外导入任何模块即可直接使用。
- 使用help()可以获得提示
1.4.1 类型转换与类型判断
- bin()、oct()、hex();要求必须是整数
- int();
- complex();
- ord():返回单个字符的Unicode码
- chr():返回Unicode码对应的字符
- str():将任意类型转换为字符串
- list()、tuple()、dict()、set():转换或创建列表、元组、字典、集合
1.4.2 最值、求和
-
max()、min()、sum()
-
max()和min()支持key参数和lambda表达式,用来指定比较大小的依据或规则
-
max(['2','111'],key=len)
-
1.4.3 基本输入输出
- input()和print()函数
- input()一律返回字符串对待,必要的时候可以转换类型int()、float()、eval()
- print(value1,value2,…,sep=’ ‘,end=’\n’,file=sys.stdout,flush=False)
- sep分隔符,默认空格
- end输出完了以什么结束
1.4.4 排序、逆序
- sorted()对列表、元组、字典、集合或其他可迭代对象进行排序并返回新列表
- reversed()对可迭代对象(生成器对象和具有惰性求值特性的zip、map、filter、enumerate等类似对象除外)进行翻转(首尾交换)并返回可迭代的reversed对象
1.4.5 枚举、迭代
-
enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组
-
list(enumerate('abc')) >>>[(0,'a'),(1,'b'),(2,'c')]
-
1.4.6 map()、reduce()、filter()
-
map()把一个函数func一次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果
-
标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初值。
-
#求1到9的和 from functools import reduce seq=list(range(1,10)) reduce(lambda x,y:x+y,seq)
-
-
filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。
-
seq=['foo','x41','?1','***'] def func(x): return x.isalnum() #测试是否为字母或数字 filter(func,seq) #返回filter对象 list(filter(func,seq)) #把filter对象转换为列表
-
1.4.7 range()
- range()有range(stop)、range(start,stop)和range(start,stop,step)三种用法,该函数具有惰性求值特点,其中包含左闭右开区间[start,end]内以step为步长的整数,start默认为0,step默认为1.
1.5 案例赏析
-
用户输入一个自然数,计算并输出其百位、十位、个位上的数字
-
x=input('请输入一个自然数:') print(*map(int,x)) #*号是解包的手法 >>>123 >>>1 2 3
-
-
已知三角形的两边长及其夹角,求第三边长
-
import math x=input('请输入两边长及其夹角(度):') #以空格分界,切割x.split() a,b,theta=map(float,x.split()) #角度转弧度 theta*math.pi/180 c=math.sqrt(a**2+b**2-2*a*b*math.cos(theta*math.pi/180)) print('c=',c)
-