下载安装Anaconda
在官网上下载安装包
https://www.anaconda.com/distribution/
命令安装Anaconda
Anaconda3-5.1.0-Windows-x86_64.exe
Anaconda 集成了很多数据分析常用的库及软件,如 NumPy、Pandas、Matplotlib 和 JupyterNoteBook 等。Anaconda 在 Linux 和 Windows 上都可以安装
运行Python自带Demo
Turtle Demo 是 Python 自带的一个演示程序,无论是 Anaconda 安装还是使 用原生 Python 安装都会有这个程序。
Python的工程结构
Python工程结构
模块
一个Python文件就是一个模块
包:包含多个python文件
init.py
导入已有模块
import sys
from os import path
Python开发工具
Python解释器
- 启动方法:python
IPython交互式shell
- 启动方法:ipython
Jupyter NoteBook
- 基于Web的可支持实施代码的应用
- 启动方法:jupyter notebook
- 输入命令的目录就是工作1起始目录
Jupyter Notebook介绍
Jupyter Notebook是一个Web应用,是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于做即使的说明。
使用 Anaconda 安装 Python 自带 Jupyter NoteBook
1、创建文件
2、编写代码,并点击“Run”按钮执行程序
3、输出结果
PyCharm集成开发环境
JetBrains公司开发的IDE
使用方式与IDEA相似
PyCharm 是基于 IDEA 开发的 Python 集成开发环境,适用于工程类代码的开发 比如 Web 应用或爬虫应用。
Python语句块规范
缩进
Python中要求强制缩进以区分层次和代码块
缩进可以使用2个空格、4个空格、1个tab键实现
推荐只使4个空格进行缩进
- 因缩进方式不同会引起编译错误提示
- 需要手动修改统一缩进方式
PyCharm默认设置不使用“TAB缩进符”,而是设置一个TAB=4个空格
注释方式与常见内置函数
单行注释
- 使用“#”进行注释
多行注释
- 使用三个单引号或三个双引号进行注释
常见内置函数
函数名 | 说明 |
---|---|
type() | 返回对象类型 |
dir() | 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表 |
input()/print() | 输入/打印输出 |
id() | 返回对象的内存地址 |
数值类型
包括整型和浮点型
数值类型操作符
操作符 | 说明 | 操作符 | 说明 |
---|---|---|---|
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的四舍五入值 |
列表(list)
列表的特点
用来储存多个数据的数据结构
储存的数据是有序的,可使用位置索引
列表长度和元素都是可变的
可储存不同类型的数据
列表的使用方法
创建列表
- [‘one’,2,[3,4],(5,6)]
使用索引获取列表中的数据
- x[0],x[2],x[-1],x[-3]
判断值是否存在于列表中
- in和 not in
元组(tuple)
元组的特点
存储形式与列表相似
与列表不同的地方
元素不可修改
长度不可修改
常用于安全级别较高的场景应用
元组的使用方法
创建元组
- t1 = (1,2,3,4,5)
- t2 = ‘one’,2,[3,4],(5,6)
- t3 = tuple([1,2,3])
使用索引获取列表中的数据
- x[0],x[2],x[-1],x[-3]
判断值是否存在于列表中
- in 和 not in
列表/元组操作
通过切片获得新的列表/元组
[start🔚step]
start:起始索引,从0开始,-1表示结束
end:结束索引
step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值。
对列表x = [1,2,3,4,5,6,7,8,9,0]切片
切片 | 结果 | 切片 | 结果 |
---|---|---|---|
x[1:3] | [2,3] | x[1:6:2] | [2,4,6] |
x[-3:-1] | [8,9] | x[-8👎3] | [3,6,9] |
x[:4] | [1,2,3,4] | x[6:1:2] | [7,5,2] |
x[6:] | [7,8,9,0] | x[-1:-8:-3] | [0,7,4] |
遍历列表/元组中的元素
for v in x:
print(x)
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))
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类型也支持切片
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👎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是range
range转tuple
t = tuple® # r是range
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)
常见的序列操作
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) | 获得序列中得最大值:3 |
s.index( x, [, i [, j ] ] ) | 获得第一个x元素得索引(索引值在i 和 j 之间) |
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倒序排列 |
Set(集合)
储存形式与列表相似
集合中保存的数据具有唯一性,不可重复
集合中保存的数据是无序的
往集合中添加重复数据,集合将只保留一个
集合常被用来去重或者过滤
创建一个集合
空集合:变量 = set()
非空集合:变量 = {元素1,元素2,…}
集合操作
判断值是否存在于集合中
集合并集:
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)
集合得遍历与列表得遍历方法相同
字典(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)
字符串
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"""
字符串操作
None和布尔值
None
是一个特殊的常量,表示空值
Python中很多类型可以表示布尔值
布尔操作符
or、and、not
比较运算符
流程控制语句
条件选择语句
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'
列表生成式
用列表生成式创建列表
列表生成式
可以生成list列表的表达式
字典、集合生成式
字典生成式
{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'}