一 Python入门
链接: 他人详解
- Python 中单行注释使用 #,多行注释使用三个单引号(
'''
)或三个双引号("""
) - Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。
- 以下划线开头的标识符有特殊含义:
- 单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 导入
- 双下划线开头的标识符,如:__xx,表示私有成员;
- 双下划线开头和结尾的标识符,如:xx,表示 Python 中内置标识,如:init() 表示类的构造函数。
(一)输入输出
Python 输出使用 print(),内容加在括号中即可。如下所示:
print('Hello Python')
Python 提供了一个 input(),可以让用户输入字符串,并存放到一个变量里。如下所示:
name = input()
print('Hi',name)
(二)多行显示
Python 中一般以新行作为语句的结束标识,可以使用 \ 将一行语句分为多行显示。如下所示:
a = 128
b = 1024
c = 512
d = a + \
b - \
c
如果包含在 []、{}、() 括号中,则不需要使用 \。如下所示:
arr = {
a,
b,
c
}
(三)基本语句
1.条件语句
在进行逻辑判断时,我们需要用到条件语句,Python 提供了 if、elif、else 来进行逻辑判断。格式如下所示:
if 判断条件1:
执行语句1...
elif 判断条件2:
执行语句2...
elif 判断条件3:
执行语句3...
else:
执行语句4...
2.循环语句
2.1: for 循环
- for 循环可以遍历任何序列,比如:字符串。如下所示:
str = 'Python'
for s in str:
print(s)
输出结果:
P
y
t
h
o
n
2.2 while 循环
while 循环,满足条件时进行循环,不满足条件时退出循环。如下所示:
sum = 0
m = 10
while m > 0:
sum = sum + m
m = m - 1
print(sum)
输出结果:55
2.3 break、continue和pass
break 用在 for 循环和 while 循环语句中,用来终止整个循环。
continue 用在 for 循环和 while 循环语句中,用来终止本次循环。
pass 是空语句,它不做任何事情,一般用做占位语句,作用是保持程序结构的完整性。
if True:
pass
2.4 range()函数
range
函数返回一个range类型的整数序列,一般用在循环结构中
range(start, stop, step)
参数名称 说明 备注
start 计数起始位置 整数参数,可省略。省略时默认从0开始计数
stop 计数终点位置 不可省略的整数参数。计数迭代的序列中不包含stop
step 步长 可省略的整数参数,默认时步长为1
使用示例:
#仅保留stop参数
>>> test = range(10)
>>> test
range(0, 10)
>>> list(test)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#指定起始位置和终止位置
>>> test = range(3,10)
>>> test
range(3, 10)
>>> list(test)
[3, 4, 5, 6, 7, 8, 9]
#指定步长
>>> test = range(0, 10, 2)
>>> test
range(0, 10, 2)
>>> tuple(test)
(0, 2, 4, 6, 8)
使用注意:
- 所有参数都是整形,不能给出浮点数序列。
- step小于1没有任何意义
- 步长不能为0
- range()的返回值类型是range
2.5 enumerate()
enumerate()
参数为可遍历/可迭代的对象(如列表、字符串)enumerate()
多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate()
enumerate()
返回的是一个enumerate对象enumerate(lst,1)
还可以添加个索引值起点参数,若设成 1,则索引从 1 开始
s = [1, 2, 3, 4, 5]
e = enumerate(s)
for index, value in e:
print('%s, %s' % (index, value))
输出结果:
0, 1
1, 2
2, 3
3, 4
4, 5
#指定索引值起点参数
e = enumerate(s,1)
for index, value in e:
print('%s, %s' % (index, value))
输出结果:
1, 1
2, 2
3, 3
4, 4
5, 5
(四)数据类型
1.数值类型数据
有三种数值类型,分别是:整型(int)、浮点型(float)、复数(complex)
1.1:基本运算
运算 描述
x + y x 和 y 的和
x - y x 和 y 的差
x * y x 和 y 的乘积
x / y x 和 y 的商
x // y x 除以 y(地板除),取整除
x % y x 除以 y,取模(余数)
-x x 取反
+x x 不变
abs(x) x 的绝对值
int(x) 将 x 转换为整数
float(x) 将 x 转换为浮点数
complex(x, y) 一个带有实部 x 和虚部 y 的复数,y 默认为 0。
divmod(x, y) (x // y, x % y)
pow(x, y) x 的 y 次幂
x ** y x 的 y 次幂
1.2:数学函数
除了上面的基本运算外,我还可以借助数学模块 math 实现更多的运算。
首先要先引入数学模块 math。如下所示:
import math
引入之后就可以使用了,以 math 模块中求平方根函数 sqrt(x) 为例。使用方式如下所示:
import math
math.sqrt(1024)
math 模块中的函数。如下表所示:
函数 描述
abs(x) 返回 x 的绝对值
ceil(x) 返回 x 的上入整数,如:math.ceil(1.1) 返回 2
floor(x) 返回 x 的下舍整数,如:math.floor(1.1) 返回 1
exp(x) 返回 e 的 x 次幂
log(x) 返回以 e 为底 x 的对数
log10(x) 返回以 10 为底 x 的对数
pow(x, y) 返回 x 的 y 次幂
sqrt(x) 返回 x 的平方根
factorial(x) 返回 x 的阶乘
1.3:随机函数
random 模块对随机数的生成提供了支持。
首先还是要引入 random 模块。如下所示:
import random
下面简单介绍两个函数:
random(x)函数
随机生成一个 0 到 1 范围内的实数。使用如下所示:
import random
random.random()
uniform(x, y)函数
随机生成一个 x 到 y 范围内的实数。使用如下所示:
import random
random.uniform(1,10)
1.4:逻辑运算
and:与
计算方式:x and y
如果x的计算值为False,x and y返回False,否则它返回y的计算值
or:或
计算方式:x or y
如果x的计算值为True,x or y返回x的计算值,否则它返回y的计算值
not:非
2.字符串
2.1:转义符
常见的转义字符如下表所示:
转义字符 描述
\ 在行尾使用时,用作续行符
\b 退格(Backspace)
\000 空
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
2.2:运算符
常见的字符串运算符,如下表所示:
运算符 描述
+ 连接符
+ 重复输出
[] 通过索引获取字符串中字符
[ : ] 获取字符串中的一部分
in 字符串中是否包含指定字符
not in 字符串中是否不包含指定字符
r/R 字符串原样输出
使用示例如下所示:
s1 = 'Hello'
s2 = 'Python'
print('s1 + s2 -->', s1 + s2)
print('s1 * 2 -->', s1 * 2)
print('s1[0] -->', s1[0])
print('s1[0:2] -->',s1[0:2])
print('"H" in s1 -->','H' in s1)
print('"H" not in s1 -->','H' not in s1)
print('\\r -->', R'\r')
输出结果:
s1 + s2 --> HelloPython
s1 * 2 --> HelloHello
s1[0] --> H
s1[0:2] --> He
"H" in s1 --> True
"H" not in s1 --> False
\r --> \r
3.序列结构
3.1:索引
- 常见的序列结构包括字符串、列表、元组等
- Python中的序列是一块可存放多个值的连续内存空间,所有值按一定顺序排列,每个值所在位置都有一个编号,称其为索引,我们可以通过索引访问其对应值。
下面通过一个示例作进一步了解,以字符串为例,如下所示:
str = 'Python'
print('str[0] str[-6] =', str[0], str[-6])
print('str[5] str[-1] =', str[5], str[-1])
输出结果:
str[0] str[-6] = P P
str[5] str[-1] = n n
从结果来看,我们使用非负数索引与负数索引得到的结果一致。
3.2:切片
切片操作可以访问一定范围内的元素,语法如下所示:
sname[start : end : step]
- sname:表示序列的名称;
- start:开始索引位置(包括该位置),默认为 0;
- end:表示切片的结束索引位置(不包括该位置),默认为序列的长度;
- step:步长。
以字符串为例,如下所示:
str = 'Python'
print(str[:3])
print(str[3:])
print(str[:])
输出结果:
Pyt
hon
Python
3.3:相加
Python 支持类型相同的序列使用 + 作相加操作,该操作不会去除重复的元素。
3.4:相乘
Python 中,使用数字 n 乘以一个序列会生成新的序列,内容为原来序列被重复 n 次的结果。
3.5:元素是否在序列中
Python 使用 in 关键字检查某元素是否为序列的成员,语法如下:
val in seq
- val:要检查的元素;
- seq:指定的序列。
通过一个例子作进一步了解,以字符串为例,如下所示:
str = 'Python'
print('on'in str)
输出结果:
True
3.6:内置函数
函数 描述
len() 计算序列的长度
max() 找出序列中的最大元素
min() 找出序列中的最小元素
list() 将序列转换为列表
str() 将序列转换为字符串
sum() 计算元素的和
sorted() 对元素进行排序
enumerate() 将序列组合为一个索引序列,多用在 for 循环中
4.列表[ ]与元组( )
4.1:列表
- Python 中没有数组,而是加入了功能更强大的列表(list),列表可以存储任何类型的数据,同一个列表中的数据类型还可以不同
- 列表是序列结构,可以进行序列结构的基本操作:索引、切片、加、乘、检查成员。
- 列表可修改单个元素,元组不可修改单个元素
4.1.1 创建、访问、更新和删除
- 列表中所有元素都放在一个中括号 [] 中,相邻元素之间用逗号 , 分隔
- 通过索引访问列表中的值,还可以使用
:
截取范围内的元素 - 除了对列表中现有元素进行修改外,还可以使用 append() 向列表中添加新元素:
- 使用 del 删除列表中元素
l = [1024, 0.5, 'Python']
print('l[0] -->', l[0])
print('l[1:] -->', l[1:])
输出结果:
l[0] --> 1024
l[1:] --> [0.5, 'Python']
# 修改列表中第二个元素
l[1] = 5
# 向列表中添加新元素
l.append('Hello')
print('l[1] -->', l[1])
print('l -->', l)
输出结果:
l[1] --> 5
l --> [1024, 5, 'Python', 'Hello']
# 删除列表中第二个元素
del l[1]
print('l -->', l)
输出结果:
l --> [1024, 'Python']
4.1.2 常用方法
count():统计列表中某个元素出现的次数
index():查找某个元素在列表中首次出现的位置(即索引)
remove():移除列表中某个值的首次匹配项
sort():对列表中元素进行排序
copy():复制列表
l = ['d', 'b', 'a', 'f', 'd']
print("l.count('d') -->", l.count('d'))
输出结果:
l.count('d') --> 2
print("l.index('d') -->", l.index('d'))
输出结果:
l.count('d') --> 0
l.remove('d')
print("l -->", l)
输出结果:
l --> ['b', 'a', 'f', 'd']
l = ['d', 'b', 'a', 'f', 'd']
l.sort()
print('l -->', l)
输出结果:
l --> ['a', 'b', 'd', 'd', 'f']
l = ['d', 'b', 'a', 'f', 'd']
lc = l.copy()
print('lc -->', lc)
输出结果:
lc --> ['d', 'b', 'a', 'f', 'd']
4.2:元组
- 元组(tuple)与列表类似,但元组是不可变的,可简单将其看作是不可变的列表,元组常用于保存不可修改的内容。
4.2.1 创建、访问、修改、删除
- 元组中所有元素都放在一个小括号 () 中,相邻元素之间用逗号
,
分隔 - 与访问列表中元素类似
- 元组中元素不能被修改,我们要用重新赋值的方式操作
- 元组中的元素不能被删除,我们只能删除整个元组
t = (1024, 0.5, 'Python')
#访问
print('t[0] -->', t[0])
print('t[1:] -->', t[1:])
输出结果:
t[0] --> 1024
t[1:] --> (0.5, 'Python')
#重新赋值的方式修改
t = (1024, 0.5, 'Python', 'Hello')
print('t -->', t)
输出结果:
t --> (1024, 0.5, 'Python', 'Hello')
#元素不能被删除,只能删除整个元组
del t
print('t -->', t)
输出结果:
NameError: name 't' is not defined
4.2.2 常用方法
- len():计算元组中元素个数
- max() 和 min():返回元组中元素最大、最小值
- tuple():将列表转换为元组
l = ['d', 'b', 'a', 'f', 'd']
# tuple()
t = tuple(l)
print('t -->', t)
输出结果:
t --> ('d', 'b', 'a', 'f', 'd')
5.字典{key-value}与集合{key}
5.1:字典
- 字典(dict)是 Python 的数据结构,它的内容都是以键-值(key-value)的方式存在的。
- 集合中没有值(value),只有键(key),可理解为不能重复的列表
5.1.1 创建、访问、修改、清空
- 字典的内容在花括号 {} 内,键-值(key-value)之间用冒号
:
分隔,键值对之间用逗号,
分隔 - 字典中的值通过 key 进行访问
- 清空字典使用
clear
方法
#创建
d = {'name':'小明', 'age':'18'}
# 使用 dict 函数
# 方式一
l = [('name', '小明'), ('age', 18)]
d = dict(l)
# 方式二
d = dict(name='小明', age='18')
# 空字典
d = dict()
d = {}
#访问
>>> d['name']
'小明'
# 使用 get 方法
>>> d.get('name')
'小明'
#清空集合
>>> d.clear()
>>> d
{}
#获取字典的长度
>>> d = dict(name='小明', age='18')
>>> len(d)
2
5.2 集合
- 集合(set)与字典相同均存储 key,但也只存储 key,因 key 不可重复,所以 set 的中的值不可重复,也是无序的。
5.2.1 创建、添加、删除、清空
- 集合使用花括号 {} 或者 set() 函数创建,如果创建空集合只能使用 set() 函数
- 添加元素可以使用
add
或update
方法,如果元素已经存在,则不进行操作 - 删除元素使用
remove
方法 - 清空集合使用
clear
方法
#创建
s = {'a', 'b', 'c'}
# 使用 set 函数
s = set(['a', 'b', 'c'])
# 空集合
s = set()
#集合中重复的元素会被自动过滤掉
>>> s = {'a', 'a', 'b', 'c', 'c'}
>>> s
{'a', 'c', 'b'}
#添加
>>> s = {'a', 'b', 'c'}
>>> s.add('d')
>>> s
{'a', 'd', 'c', 'b'}
>>> s.update('e')
>>> s
{'a', 'b', 'e', 'd', 'c'}
# 添加已经存在的元素 a
>>> s.add('a')
>>> s
{'a', 'b', 'e', 'd', 'c'}
#删除
>>> s = {'a', 'b', 'c'}
>>> s.remove('c')
>>> s
{'a', 'b'}
#清空
>>> s = {'a', 'b', 'c'}
>>> s.clear()
>>> s
set()
(五)自定义函数
1. 声明定义函数
- Python 使用 def 关键字来声明函数
- 如果要定义一个无任何功能的空函数,函数体只写
pass
即可。 - 我们还可以使用
lambda
定义匿名函数
def 函数名(参数):
函数体
return 返回值
def 函数名():
pass
lambda 参数 : 表达式
2. 实例
# 空函数
def my_empty():
pass
# 无返回值
def my_print(name):
print('Hello', name)
# 有返回值
def my_sum(x, y):
s = x + y
print('s-->', s)
return s
# 不定长参数
def my_variable(*params):
for p in params:
print(p)
# 匿名函数
my_sub = lambda x, y: x - y
(六) 文件处理
1.创建文件
Python 使用 open()
函数创建或打开文件,语法格式如下所示:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明如下所示:
- file:表示将要打开的文件的路径,也可以是要被封装的整数类型文件描述符。
- mode:是一个可选字符串,用于指定打开文件的模式,默认值是 ‘r’(以文本模式打开并读取)。可选模式如下:
模式 描述
r 读取(默认)
w 写入,并先截断文件
x 排它性创建,如果文件已存在则失败
a 写入,如果文件存在则在末尾追加
b 二进制模式
t 文本模式(默认)
3. 更新磁盘文件(读取并写入)
- buffering:是一个可选的整数,用于设置缓冲策略。
- encoding:用于解码或编码文件的编码的名称。
- errors:是一个可选的字符串,用于指定如何处理编码和解码错误(不能在二进制模式下使用)。
- newline:区分换行符。
- closefd:如果 closefd 为 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层
- 文件描述符将保持打开状态;如果给出文件名,closefd 为 True (默认值),否则将引发错误。
- opener:可以通过传递可调用的 opener 来使用自定义开启器。
以 txt 格式文件为例,我们不手动创建文件,通过代码方式来创建,如下所示:
open('test.txt', mode='w',encoding='utf-8')
执行完上述代码,就为我们创建好了 test.txt 文件。
2.写入文件
上面我们创建的文件 test.txt 没有任何内容,我们向这个文件中写入一些信息,对于写操作,Python 文件对象提供了两个函数,如下所示:
函数 描述
write(str) 将字符串写入文件,返回写入字符长度
writelines(s) 向文件写入一个字符串列表
我们使用这两个函数向文件中写入一些信息,如下所示:
wf = open('test.txt', 'w', encoding='utf-8')
wf.write('Tom\n')
wf.writelines(['Hello\n', 'Python'])
# 关闭
wf.close()
上面我们使用了 close() 函数进行关闭操作,如果打开的文件忘记了关闭,可能会对程序造成一些隐患,为了避免这个问题的出现,可以使用 with as
语句,通过这种方式,程序执行完成后会自动关闭已经打开的文件。如下所示:
with open('test.txt', 'w', encoding='utf-8') as wf:
wf.write('Tom\n')
wf.writelines(['Hello\n', 'Python'])
3.读取文件
之前我们已经向文件中写入了一些内容,现在我们读取一下,对于文件的读操作,Python 文件对象提供了三个函数,如下所示:
函数 描述
read(size) 读取指定的字节数,参数可选,无参或参数为负时读取所有
readline() 读取一行
readlines() 读取所有行并返回列表
我们使用上面三个函数读取一下之前写入的内容,如下所示:
with open('test.txt', 'r', encoding='utf-8') as rf:
print('readline-->', rf.readline())
print('read-->', rf.read(6))
print('readlines-->', rf.readlines())
(七) 错误和异常处理
Python 程序捕捉异常使用 try/except 语句
#1、被除数为 0,未捕获异常
def getNum(n):
return 10 / n
print(getNum(0))
#输出结果:ZeroDivisionError: division by zero
#2、捕获异常
def getNum(n):
try:
return 10 / n
except IOError:
print('Error: IOError argument.')
except ZeroDivisionError:
print('Error: ZeroDivisionError argument.')
print(getNum(0))
输出结果:
Error: ZeroDivisionError argument.
None