既然是再次复习,那就得好好总结一些东西,以及对于一些抽象概念也要有一定的认识,所以我们就先学习最基础的对象以及一些基本用法及含义
python内置对象
对象是python基本概念之一,对象包含整数,实数,复数,字符串,列表,元组,字典,集合,还有zip, map, enumerate, filter等对象,函数与类也是对象
python内置对象
对象类型 | 类型名称 | 示例 |
数字 | int, float, complex | 1234,3.14,1.3e5 |
字符串 | str | ‘swfu’, “I’m student”, "‘python "’ |
字节串 | bytes | b’hello world’ |
列表 | list | [1,2,3], [‘a’, ‘b’, [‘c’,‘2’]] |
字典 | dict | {1: ‘food’, 2:‘taste’,3:‘import’} |
元组 | tuple | (2, -5, 6), (3,) |
集合 | set frozenset | {‘a’, ‘b’, ‘c’} |
布尔型 | bool | True, Flase |
空类型 | NoneType | None |
异常 | Exception ValueError TypeError | |
文件 | f = open(‘data.dat’, ‘rb’) | |
其它迭代对象 | 生成器对象,range对象,zip对象,enumerate对象 | |
编程对象 | 函数(def), 类(class), 模块(module) |
常量与变量
e.g.
x = 3
type(x) #内置函数type查看变量类型
type(x) == int #输出为True
isinstance(x, int)
#内置函数isinstance()测试变量是否为指定类型
#输出True
python中的变量并不直接存储值,而是存储了值得内存地址或引用,故变量类型随时可改变
x = 'Hello World!'
x = [1,2,3]
注意:
- 变量名必须以字母或下划线开头,但以下划线开头的变量在python中有特殊的含义
- 变量名不能有空格或标点符号
- 不能用关键字做变量名
- 不建议使用系统那个内置的模块名,类型名或函数名以及已导入模块名及其成员名作为变量名
- 变量名对英文字母大小写敏感
数字
数字类型有整数,实数和复数
python支持任意大的数字,具体可以大到什么程度仅受内存大小限制,
e.g.
9999**99 #幂乘运算符,等价于内置函数pow()
0.3+0.2 #实数相加
0.4 -0.1 #实数相减,结果稍微有偏差
x = 3+4j
y = 5+6j
x+y #支持复数的加减乘除及幂乘运算
abs(x) #计算复数的模
x.imag #虚部
x.real #实部
x.conjugate() #共轭复数
注意:
python3.6版本支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性
e.g.
1_000_000 #表示1000000
1_2_3_4 #表示1234
1_2+3_4j #表示12+34j
1_2.3_45 #表示12.345
分数
标准库fractions中的Fraction对象支持分数运算,还提供了用于计算最大公约数gcd()函数和高精度实数类Decimal
e.g.
from fractions import Fraction
x = Fraction(3,5) #创建分数对象
y = Fraction(3,7)
#输出x,得到结果Fraction(3,5)
x.numerator #查看分子
x.denominator #查看分母
x+y #输出结果Fraction(36,35)
#支持四则运算,自动通分
高精度实数
标准库fractions和decimal中提供的Decimal类实现了更高精度的运算
e.g.
from fractions import Decimal
1/9 #内置的实数类型
Decimal(1/9) #高精度实数
从python3.6开始,Decimal提供了一个新的方法as_integer_ratio(),可以把实数转换成两个整数,着两个整数的商正好等于该实数
e.g.
from decimal import Decimal
Decimal('-3.14').as_integer_ratio()
#输出为(-157, 50)
字符串
先介绍一些基本的创建和连接工作
e.g.
x = 'Hello World!'
x = "Python is a great language."
print(x)
x= 'good' 'morning' #仅适用于字符串常量
x = 'good' + 'morning'
x =x + 'morning' #变量之间连接可使用加号
x = x'morning' #报错
列表 元组 字典 集合
这几个均为序列类型,先来比较一下区别
比较项 | 列表 | 元组 | 字典 | 集合 |
类型名称 | list | tuple | dict | set |
定界符 | 方括号[] | 圆括号() | 大括号{} | 大括号{} |
是否可变 | 是 | 否 | 是 | 是 |
是否有序 | 是 | 是 | 否 | 否 |
是否支持下标 | 是(下标作为序号) | 是 | 是(键作为下标) | 否 |
元素分隔符 | 逗号 | 逗号 | 逗号 | 逗号 |
对元素形式要求 | 无 | 无 | 键:值 | 必须可哈希 |
对元素值要求 | 无 | 无 | 键必须可哈希 | 必须可哈希 |
元素是否可重复 | 是 | 是 | 键不可重复,值可重复 | 否 |
元素查找速度 | 非常慢 | 很慢 | 非常快 | 快 |
新增和删除元素速度 | 尾部操作快,其它位置慢 | 不允许 | 快 | 快 |
e.g.
x_list = [1,2,3] #创建对象
x_tuple = (1,2,3)
x_dict = {'a':97, 'b':98, 'c':99}
x_set = {1,2,3}
print(x_list[1]) #输出2
print(x_tuple[1]) #输出2
print(x_dict['a']) #输出97
运算符与表达式
对象由数据和行为两部分构成,而行为主要通过方法来实现,通过一些特殊方法重写,可实现运算符重载
圆括号是明确和改变表达式运算顺序的利器
python运算符
运算符 | 功能说明 |
+ | 算数加法,列表,元组,字符合并与连接,正号 |
- | 算术减法,集合差集,相反数 |
* | 算术乘法,序列重复 |
/ | 真除法 |
// | 求整商,但如果操作数中有实数的话,结果为实数形式的整数 |
% | 求余数,字符串格式化 |
** | 幂运算 |
<, <=, >, >=, ==, != | 值大小比较,集合的包含关系比较 |
or | 逻辑或 |
and | 逻辑与 |
not | 逻辑非 |
in | 成员测试 |
is | 对象同一性测试,即测试是否为同一对象或内存地址是否相同 |
|,^,&,<<,>>,~ | 位或,位异或,位与,左移位,右移位,位求反 |
& | ^ | 集合交集 并集 对称差集 |
@ | 矩阵相乘运算符 |
下面举一些具体例子说明一下
+
[1,2,3]+[4,5,6] #输出[1,2,3,4,5,6]
'abcd' + '1234' #输出‘abcd1234'
'A' + 1 #抛出异常,字符数字不可相加
True + 3
#输出4,python内部将True当作1处理
#同理,False当作0处理
‘*’
True * 3 #输出3
Flase * 3 #输出0
[1,2,3]*3 #输出[1,2,3,1,2,3,1,2,3]
(1,2,3)*3 #输出(1,2,3,1,2,3,1,2,3)
'abc'*3 #输出’abcabcabc'
/
3/2
#数学意义上的除法,输出1.5
15//4
#两个操作数均为整数,结果为整数,输出3
15.0//4
#如果操作数中有实数,结果为实数形式的整数值,输出3.0
-15//4
向下取整,输出-4
%
789%23
#余数,输出7
123.45%3.2
#余数,输出1.849999999
**
3**2
#3的2次方,等价于pow(3,2)
pow(3,2)
< >
1<3<5 #操作数比较大小
'hello' >'word' #比较字符串大小
'hello'>3 #报错,字符串,数字不能做比较
{1,2,3}<{1,2,3,4} #测试是否子集,是否包含
in 成员测试
3 in [1,2,3] #测试3是否在列表中
5 in range(1,10,1) #range生成指定范围数字的内置函数
'abc' in 'abcdefg' #子字符串测试
is 测试两个对象是否是同一个,则具有想用的内存地址
3 is 3 #输出True
x = [1,2,3]
y = [1,2,3]
x is y #输出Flase,若令x =y,则有输出True
x[0] is y[0] #输出True
位运算符
只能用于整数
e.g.
3<<2
#把3左移两位,输出12
3 & 7
#位与运算,输出3
3 | 8
位或运算,输出11
逻辑运算
3>5 and a>3 #注意没有定义变量a,输出false
a and 5>2 # 输出True
not 3 输出False
not 0 输出True,not计算结果只能是True或False
关键字简要说明
python关键字用来表达特定的语义,不允许任何方式改变它们的含义,下面列一些不常用的
关键字 | 含义 |
assert | 断言,用来确认某个条件必须满足,可用来帮助调试程序 |
except | 异常处理结构中,捕获特定类型的异常 |
finally | 异常处理结构中,用来表示无论发生什么异常都会执行的代码 |
global | 定义或声明全局变量 |
lamba | 用来定义lambada表达式,类似于函数 |
nonlocal | 声明nonlocal变量 |
pass | 空语句,执行时什么也不做,常用作占位符 |
with | 上下文管理,具有自动管理资源的功能 |
yield | 生成器中用来返回值 |
raise | 显式抛出异常 |