文章目录
一.python介绍
1.下载Anaconda
- 在官网上下载安装包:https://www.anaconda.com/distribution/
- 安装Anaconda:Anaconda3-5.1.0-Windows-x86_64.exe
- 配置环境变量
- 配置代码提示
2.运行Python自带Demo
启动演示示例
- python –m turtledemo
使用方法
- 示例代码
- 执行效果
3.Python的工程结构
Python工程结构
- 模块(module)
- 一个Python文件就是一个模块
- .py source code
- .pyc compiled bytecode
- .pyo optimized bytecode
- 包(package)
- 包含多个Python文件
- init.py
导入已有模块
- import sys
- from os import path
4.Python开发工具
Python解释器
- 启动方法:python
IPython交互式shell
- 启动方法:ipython
Jupyter Notebook
- 基于Web的可支持实时代码的应用
- 启动方法:jupyter notebook:
输入命令的目录就是工作起始目录
5.Jupyter Notebook介绍
Jupyter Notebook是一个Web应用
- Python Kernel与Jupyter之间的关系
- Python Kernel用于执行Python代码
使用Jupyter Notebook的方法
- 创建Python Notebook文件:
*.ipynb
支持文本,代码,图片等格式 - 在Jupyter Notebook中编写代码
- 执行Python代码
开启代码提示
6.PyCharm集成开发环境
JetBrains公司开发的IDE
使用方式与IDEA相似
适合于工程类Python应用开发
下载安装PyCharm Community版
- 创建工程
- 设置解释器
二.python语法
1.Python语句块规范
缩进
- Python中要求强制缩进以区分层次和代码块
- 缩进可以使用2个空格、4个空格、1个tab键实现
- 推荐只使4个空格进行缩进:
因缩进方式不同会引起编译错误提示,需要手动修改统一缩进方式
- PyCharm默认设置不使用“TAB缩进符”,而是设置一个TAB=4个空格
2.Python的注释方法与常见内置函数
Python注释方法
- 单行注释:使用“#”进行注释
- 多行注释:使用三个单引号或三个双引号进行注释
常见内置函数
函数名 | 说明 |
---|---|
type() | 返回对象类型 |
dir() | 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表 |
input()/print() | 输入/打印输出 |
id() | 返回对象的内存地址 |
3.Python变量的特点
变量名的命名原则
- 以_或字母开头
- 变量名以_、数字、字母组成
- 变量名大小写敏感
- 不能使用Python保留的关键字
- 查看Python关键字的方法
import keyword
keword.kwlist
Python变量的特点
- 使用变量前不需要声明
- 变量的类型不固定
- Python变量是实际值的引用
id(var)判断两个变量是否引用了同一个值
4.数值类型
数值类型包括整型和浮点型
类型 | 表示 | 举例 |
---|---|---|
int(整数) | 十进制 | 123、1_234_789 |
int(整数) | 八进制 | 0o123、0o_1_234_567、0O_123 |
int(整数) | 十六进制 | 0x123、0x_1_234_567、0X_BAD_BEEF |
int(整数) | 二进制 | 0b10、0b_0011_1100、0B_11000011 |
float(浮点数) | - | 1.23、1_2_3.、.123、.1_2_3 |
float(浮点数) | 指数表示 | 1.23e4、1.2_3E-4、0E0、1e+1_1 |
数值类型操作符
操作符 | 说明 | 操作符 | 说明 |
---|---|---|---|
x + y | 加法 | abs(x) | 取绝对值 |
x - y | 减法 | int(x) | 转换成整数 |
x * y | 乘法 | float(x) | 转换成浮点数 |
x / y | 除法 | divmod(x, y) | 返回一个包含商和余数的元组 |
x // y | 除后取整 | pow(x, y) | 返回x的y次方 |
x % y | 除后取余 | x ** y | 返回x的y次方 |
-x | 负数 | round(x[, n]) | 方法返回浮点数x的四舍五入值 |
5.列表(list)
列表的特点
- 用来储存多个数据的数据结构
- 储存的数据是有序的,可使用位置索引
- 列表
长度和元素都是可变
的 - 可储存
不同类型
的数据
列表的使用方法
- 创建列表:
['one', 2, [3, 4], (5, 6)]
- 使用索引获取列表中的数据,支持从末尾访问-1开始:
x[0], x[2], x[-1], x[-3]
- 判断值是否存在于列表中:
in和not in
6.元组(tuple)
元组的特点
- 储存形式与列表相似
- 与列表不同的地方:元素不可修改,长度不可改变
- 常用于安全级别较高的场景应用
元组的使用方法
- 创建元组
- 使用索引获取元组中的数据:
x[0], x[2], x[-1], x[-3]
- 判断值是否存在于元组中:
in和not in
t1=(1, 2, 3, 4, 5)
t2='one', 2, [3, 4], (5, 6)
t3=tuple([1,2,3])
7.列表/元组操作
通过切片获得新的列表/元组
[start:end:step]
- start:起始索引,从0开始,-1表示结束
- end:结束索引
- step:步长,步长为正时,从左向右取值。步长为负时,反向取值
对列表x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]切片
切片 | 结果 | 切片 | 结果 |
---|---|---|---|
x[1:3] | [2, 3] | x[1:6:2] | |
x[-3:-1] | [8, 9] | x[-8: -1:3] | [3, 6, 9] |
x[ :4] | [1, 2, 3, 4] | x[6:1:-2] | [7, 5, 3] |
[6: ] | [7, 8, 9, 0] | x[-1:-8:-3] | [0, 7, 4] |
遍历列表/元组中的元素
for v in x:
print(v)
zip()函数
- 将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11]]
list(zip(*matrix)) # result: [(1, 5, 9), (2, 6, 10), (3, 7, 11)]
t = (1,2,3,4)
list(zip(t))
8.range类型
range类型
- 一段不可变的数字序列
- 经常被用作for里面来指定循环次数
创建range对象
- range(start, stop, step):start的默认值是0,step的默认值是1,左闭右开原则
range对象 | 数列 |
---|---|
range(4) | 0,1,2,3 |
range(1,4) | 1,2,3 |
range(1,4,2) | 1,3 |
range(4,1,-1) | 4,3,2 |
range操作方法
- range类型也支持切片:x=range(10)
切片 | 结果 | 切片 | 结果 |
---|---|---|---|
x[1:3] | range(1, 3) | x[1:6:2] | range(1 ,6, 2) |
x[-3:-1] | range(7, 9) | x[-8: -1:3] | range(2, 9, 3) |
x[ :4] | (0, 4) | x[6:1:-2] | range(6, 1, -2) |
x[6: ] | (6, 10) | x[-1:-8:-3] | range(9, 2, -3) |
- 使用for循环遍历range()
for v in range(10):
print(v)
列表、元组、range转换
- 列表转元组:
t = tuple(l)# l是列表
- 元组转列表:
l = list(t)# t是元组
- range转列表:
l = list(r)# r是range
- range转tuple:
t = tuple(r)# r是range
9.pack&unpack
pack
- 变量转换成序列:
t = 1,2,3 #t是(1,2,3)
unpack
- 序列转换成变量:
a,b,c=t #a=1,b=2,c=3
unpack中使用*
a, b, *c = 1,2,3,4,5 # a=1, b=2, c=[3, 4, 5]
a, *b, c = 1,2,3,4,5 # a=1, b=[2, 3, 4], c=5
*a, b, c = 1,2,3,4,5 # a=[1, 2, 3], b=4, c=5
*a, b, c, d, e, f = 1,2,3,4,5 # a=[], b=1, c=2, d=3, e=4, f=5
交换两个变量的值
- a, b = b, a
在for循环中unpack元组
l = [(1,2), (3,4), (5,6)]
result=0
for x, y in l:
result += x*y
print(result)
10.常见的序列操作
s = [1,2,3] t = [4,5,6] n = 2
操作符 | 说明 |
---|---|
s+t | 拼接:[1,2,3,4,5,6] |
s * n or n * s | 乘法:[1,2,3,1,2,3] |
len(s) | 计算序列的长度3 |
min(s) | 获得序列中的最小值:1 |
max(s) | 获得序列中的最大值:1 |
s.index(x[,start[, end]]) | 获得第1个x元素的索引 (索引值在start和end之间) |
s.count(x) | 序列x元素出现的次数 |
可变序列支持的操作
操作符 | 说明 |
---|---|
s[i] =x | 更新指定索引的值 |
s[i:j] = t | 使用序列t替换s中的i到j的值 |
del s[i:j] | 等同于s[i:j] = [] |
s[i:j:k] = t | 使用序列t中的值替换s[i:j:k]的值 |
del s[i:j:k] | 删除s[i:j:k]的值 |
s.append(x) | 将值x添加到序列的末尾 |
s.clear() | 清空序列,相当于del s[:] |
s.copy() | 创建一个s的浅拷贝 |
s.extend(t) | 使用序列t扩展序列s |
s.insert(i, x) | 在序列s的i索引处插入值x |
s.pop(i) | 返回序列s中索引为i的值,并将该值从序列中移除 |
s.remove(x) | 将序列中第一个值为x的元素移除 |
s.reverse() | 将序列s倒序排列 |
11.Set(集合)
储存形式与列表相似
- 集合中保存的数据具有唯一性,不可重复
- 集合中保存的数据是无序的
- 往集合中添加重复数据,集合将只保留一个
集合常被用来去重或者过滤
创建一个集合
- 空集合:
变量=set()
- 非空集合:
变量={元素1,元素2,…}
集合操作
- 判断值是否存在于集合中:
in和not in
集合的并集
- newSet = s1 | s2 | s3
- newSet = s1.union(s2, s3)
集合的交集
- newSet = s1 & s2 & s3
- newSet = s1.intersection(s2, s3)
集合的差集
- newSet = s1 - s2 - s3
- newSet = s1.difference(s2, s3)
判断是否是超集
- s1.issuperset(s2)
判断是否是子集
- s2.issubset(s1)
判断两个集合是否相交
- s1.isdisjoint(s2)
集合的遍历与列表的遍历方法相同
12.字典(Dict)
通过键值对(key-value)来储存数据
储存的数据是无序的,可使用键索引
键是必须唯一,但值可以不唯一
键的类型只能是字符串、数字或元组,值可以是任何
字典操作
- 创建字典
empty_dict = {
}
dict_1 = {
1:'one', 2:'two', 3:'three'}
dict_2 = dict(one=1, two=2, three=3)
字典操作
- 获取字典中的值
x = d[1] #1是Key,不是索引
x = d['three']
x = d.get(3, 'This value when key is not found')
- 判断值是否是字典的键:
in和not in
遍历字典
- 遍历字典的键
- 遍历字典的值
- 遍历字典的键值对
#遍历字典的键
for k in x: #x.keys()
print(k)
#遍历字典的值
for v in x.values():
print(v)
#遍历字典的键和值
for k,v in x.items():
print(k,v)
13.字符串
Python定义字符串的三种形式
- 单引号
- 双引号
- 三引号(允许字符串换行)
#单引号
str1 = 'allows embedded "double" quotes'
#双引号
str2 = "allows embedded 'single' quotes"
#三引号
str3= '''Three single quotes,
span multiple lines'''
str4="""Three double quotes,
span multiple lines"""
字符串操作
字符串操作 | 说明 | 举例 |
---|---|---|
string[n:m] | 字符串切片 | string=‘Hello World\n’ string[0] string[:-1] string[3:5] |
int() | 字符串转数值类型 | int(“123”) float(“123”) |
str() | 数值类型转字符串 | str(123) str(123.456) |
ord() | 字符转Unicode码 | ord(‘刘’) |
chr() | Unicode码转字符 | chr(21016) |
lower() | 转成小写字符串 | “WELCOME”.lower() |
upper() | 转成大写字符串 | “welcome”.upper() |
split() | 分割字符串 | words = “WELCOME TO PYTHON”.split() |
type(words)# list | ||
print(words)# [‘WELCOME’, ‘TO’, ‘PYTHON’] | ||
words = “WELCOME TO PYTHON”.split(‘O’) | ||
print(words)# [’WELC’, ‘ME T’, ’ PYTH’, ‘N’] | ||
words = “WELCOME TO PYTHON”.split(’ TO ') | ||
print(words)# [’WELCOME’, ‘PYTHON’] | ||
join() | 将序列中的元素以指定的字符连接生成一个新的字符串 | s = ‘++’ |
list=[‘1’, ‘2’, ‘3’] | ||
s.join(list)# result is ‘1++2++3’ | ||
s.join(‘why’)# result is ‘w++h++y’ | ||
strip() | 用于移除字符串头尾/头/尾指定的字符(默认为空格或换行符)或字符序列 | s = ’ “hi\ \n\tPython” ’ |
lstrip() | s.strip() # result is ‘“hi\ \n\tPython”’ | |
rstrip() | s.strip(’ "no’) # result is ‘hi\ \n\tPyth’ | |
in | 判断是否为子串 | ‘or’ in ‘toronto or orlando’ # True |
find() | 返回子串开始的索引值,找不到子串时返回-1 | s = ‘toronto or orlando’ |
s.find(‘or’) # return index 1 | ||
s.find(‘or’, 2, 8) # return -1, meaning not found | ||
index() | 返回子串开始的索引值,找不到子串时抛出异常 | s = ‘toronto or orlando’ |
s.index(‘or’) # return index 1 | ||
s.index(‘or’, 2, 8) # throw ValueError: substring not found | ||
count() | 统计字符串里某个字符出现的次数 | s = ‘toronto or orlando’ |
s.count(‘or’) # return 3 | ||
s.count(‘or’, 2) # return 2 | ||
s.count(‘or’, 2, 9) # return 0 | ||
replace() | 方法把字符串中的 旧字符串替换成新字符串 | s = ‘toronto or orlando’ |
s.replace(‘or’, ‘/x\’)# result: t/x\onto /x\ /x\lando | ||
s.replace(‘or’, ‘/x\’, 2)# result: t/x\onto /x\ orlando | ||
startswith() | 检查字符串是否是以指定子字符串开头 | s = ‘toronto or orlando’ |
s.startswith(‘or’) # return False | ||
s.startswith(‘or’, 1) # return True | ||
s.startswith((‘or’, ‘tor’)) # return True | ||
endswith() | 检查字符串是否是以指定子字符串结尾 | s = ‘toronto or orlando’ |
s.endswith(‘and’) # return False | ||
s.endswith(‘and’, 1, -1) # return True | ||
s.endswith((‘and’, ‘do’)) # return True | ||
maketrans() translate() | 字符串转换,maketrans() 设置转换模式,translate()执行转换操作 | s = ‘toronto or orlando’ |
# define a translation table: | ||
table=s.maketrans(‘on’, ‘.N’) # o change to . | ||
# n change to N | ||
# translate using above table | ||
s.translate(table) # result: ‘t.r.Nt. .r .rlaNd.’ |
14.None和布尔值
None
- 是一个特殊的常量,表示空值
Python中很多类型可以表示布尔值
TRUE | FALSE |
---|---|
不为0的数值 | 0, 0.0 |
非空字符串 | 空字符串 |
非空列表 | 空列表 |
非空字典 | 空字典 |
非空集合 | 空集合 |
布尔操作符
- or、and、not
比较运算符
操作符 | 解释 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
is | 判断两个标识符是不是引用自一个对象 |
is not | 判断两个标识符是不是引用自不同对象 |
15.流程控制语句
条件选择语句
if guess > secret :
print("too large")
elif guess < secret : # elif is optional
print("too small")
else : # else is optional
print("equals")
循环语句
while guessed != secret :
guessed = int(input("Guess a number: "))
else : # else is optional
print("Congratulation!")
for i in range(0, 8, 2) :
print(i)
else : # else is optional
print("Done!")
break
- break语句在循环中的作用是跳出当前循环语句
- 循环语句的else子句不会被执行
continue
- continue语句在循环中的作用是跳出本次循环
- 遇到了continue将跳过本次循环的剩余代码,直接开始下一次循环
pass
- 占位语句
三元表达式
- 效果等同于一个if…else语句
- result=值1 if x<y else 值2
- 三元表达式示例
- ‘even’ if x%2==0 else ‘odd’
- ‘A’ if x%2 == 0 else ‘B’ if x%5==0 else ‘C’
16.列表生成式
用列表生成式创建列表
列表生成式:可以生成list列表的表达式
列表生成式举例
需求描述 | 列表生成式 |
---|---|
0~9的平方 | [x**2 for x in range(10) ] |
2~99中的偶数 | [x for x in range(2,100) if x % 2 == 0] |
π的精度逐渐升高 | from math import pi |
(1~9位小数) | [str(round(pi, i)) for i in range(1, 10)] |
[[ 1, 0, 0, 1 ],[ 0, 1, 1, 0 ], [ 0, 1, 1, 0 ],[ 1, 0, 0, 1 ]] | [[1 if r == c or r+c == 3 else 0 for c in range(4)]for r in range(4)] |
字符串’what is this’中出现的字母(生成集合) | sentence = ‘what is this’ { c for c in sentence if c != ’ ’ } |
字符串’what is this’中含i单词(生成器表达式) | sentence = ‘what is this’ (w for w in sentence.split() if ‘i’ in w) |
字符串’what is this’中单词的辅音字母(生成字典) | sentence = ‘what is this’ { w:{c for c in w if c not in ‘aeiou’} for w in sentence.split() } |
字典生成式
- {k:v for k,v in input if xxxx }
#将所有的key值变为大写
d = dict(a=1,b=2)
print({
k.upper():v for k,v in d.items()})
#大小写key值合并, 统一以小写key值输出;
d = dict(a=2, b=1, c=2, B=9, A=5)
print({
k.lower():d.get(k.lower(),0)+d.get(k.upper(),0) for k in d})
集合生成式
- {v for v in input if xxxx}
#筛选字符串中的字母
{
x for x in 'abracadabra' if x not in 'abc'}