写在前面
博主从大二下学期开始断断续续学习Python,至今刚好一年半的时间,学习方式主要是通过实体课堂(占比10%)、网课(30%)、博客等各类网上资源(50%)、同学交流切磋(10%)。练习方式主要依托于专业课程的各类作业,学校的科创项目,以及将现实中碰到的问题设法通过编程方式解决。如果你已涉及过任意一门编程语言,入门Python非常简单,需要的就是不断的使用与练习,遇到问题及时查阅。
推荐IDE(集成开发环境)
由于Python2.X版本即将停止更新,建议直接学习Python3.X版本。
- 初始涉猎:
- Python自带IDLE
- 下载安装Python并配置环境变量后(安装时勾选Add python.exe to Path),搜索IDLE并打开,新建XXX.py即可开始编写程序。但功能较弱,使用体验相对较差,可做入门使用。
- Python自带IDLE
- 渐入佳境
- Jupyter Notebook可直接使用Anaconda
- 适用于探索性的数据处理、分析,交互式运行模式,每个cell是一个运行单位,可以将程序拆为一个个部分运行,避免反复运行程序。强大的魔法命令与支持markdown语法,可以使之大有用处。文件保存为.ipynb的文件,也可以转化为.py;.pdf等多种格式。
- 联网状态
Shift+Tab
键可以自动查看当前代码帮助 Tab
键可以直接进行代码补全- 打括号类、引号类双边的内容,操作一边后即生成两边,且光标自动跳到中间
- Spyder可直接使用Anaconda
- 界面类似于MATLAB,适应脚本编辑式代码编写,同时也可以交互式运行
- 同样具备Jupyter的查询与补全优势
- Visual Studio Code
- 多种编程语言均可使用的平台,适用于多个脚本文件之间的切换与编辑
- Jupyter Notebook可直接使用Anaconda
推荐学习顺序
Python作为开源的语言,除了使用其基本语法之外,还需要熟悉一些主流模块的使用。作为一名交通专业的学生,就应用而言,推荐的学习顺序如下:
基础:
- Python基础语法
- 矩阵运算模块、数据处理模块——Numpy、Pandas
- 绘图展示模块matplotlib
- 时间处理模块time、datetime
提升:
如果你对机器学习感兴趣可以尝试:
- 机器学习库scikit-learn
- 深度学习、神经网络TensorFlow、PyTorch、Keras
如果你需要使用统计分析功能:
- 科学计算Scipy
如果你需要进行地理信息分析、处理:
其余模块及使用可以自行Google可以使用Google访问助手查看文档,总之,以解决实际问题为目的……
推荐学习方式
可以首先刷一下莫凡老师的网课,对各应用有一定认识。Python基础、Numpy、pandas、matplotlib、机器学习等内容都有所涉及,讲解内容通俗易掌握!
- 参阅Cheatsheet
各类Cheatsheet可以自行Google,打印后参阅,或者在学习的过程中自己整理。
- 根据问题进行搜素
国内CSDN、博客园等,国外Stack Overflow等,会有不少人与你有相同的疑问。你会逐渐明白报错的含义!
- 在实战中成长
事实证明下载一堆学习资料不如切实去解决碰到的问题,入门之后就尽快去实战,边做边学吧!
Part1 Python3基础语法入门
1.模块安装与导入
1.1模块安装
- Python自带的安装方式是
pip
安装,Anaconda自带的安装方式是conda
安装。 - 以Windows安装geopandas为例,打开‘cmd’即命令提示符,网络连接状态下输入
conda install geopandas
或pip install geopandas
进行安装。conda安装时使用conda install -c https://conda.anaconda.org/conda-forge geopandas
可以指定来源。 - Anaconda环境安装时已自带了常用模块,很多模块无需安装。conda安装较慢时可以自行搜索“anaconda清华镜像”进行配置,提高下载安装速度。
- 还有其他的pip与conda指令用于安装、更新、卸载等,可自行查阅。
1.2模块导入
Type1:import 模块名[as别名]
Type2:from 模块名 import 对象名[as 别名]或from 模块名 import *
1 | #Type1: |
2. 最最基本用法
2.1 Python规范与建议
- Python与其他语言不同,严格使用“缩进”Tab控制程序,在编写时应当注意缩进
#
用于单行注释,'''
与'''
组合内写入多行注释- 代码较长时可以采用续行符“
\
”换行继续写 - 善于运用
()
注明优先运算与相连接的关系,逻辑运算符&,|两边的条件一定需要用()分别括起来 - 最好在每个类、函数定义一段完整的功能代码后,添加一个
空行
,在运算符两侧
各增加一个空格
,逗号后面增加一个空格
,没有原因,习惯问题,不遵守也不会报错,部分符号与Python使用的符号冲突时,需要采用“+符号”的形式转义 - Python编写时无需提前申明对象类型,使用后自动生成
1 | #1.缩进,以函数定义为例 |
This sentence is so long that I want to change to next row.
24
4
Let's go, Erica
2.2 数据类型
type(x)可以查看类型
- 数值型:整数、浮点数、复数
- 字符串
- 数据存储工具:list链表,dictionary字典,tuple元组
- 布尔型
- 空值
- ……
1 | print(type(0)) |
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'bool'>
<class 'NoneType'>
2.3 数学运算
- ‘ + ‘ 加
- ‘ - ‘ 剪
- ‘ * ‘ 乘
- ‘ / ‘ 除
- ‘ // ‘ 整除
- ‘ % ‘ 取余
- ‘ ** ‘ 平方
- abs(x) 绝对值
- pow(x,y) x的y次方
- round(x) 四舍五入
1 | print(1 + 1) |
2
4
25
2.0
6
2
9
3
27.0
5
3. 数据存储工具
Python的数据存储主要有list,dictionary,tuple,str几种形式。这些都是Python的内置对象,也可以理解为存储数据的工具。
Python中不需要事先声明变量与类型,直接赋值就可以创建任意类型的对象,变量的值和类型都可以不断更改。Python的变量名称与C++中的要求类似,可以由字母或下划线开头,由字母、数字、下划线组成,且大小写不同,变量不同。
以下几种数据存储工具中:
- 元组定义后不可变,列表、字典、集合定义后可变
- 列表与元组是有序的,字典与集合是无序的
- 列表与元组的元素可以重复,字典中的索引不能重复,值可以重复;集合中的值不能重复
3.1list链表[]
- 链表list,使用中括号[]表示,list可以嵌套list,且list中的数据形式没有要求,可以是数字、字母、符号等内容。
- 索引从0开始向后排,如希望获取链表test的第一个值,则输入test[0]
- 可以采用切片的形式获取数据,切片时输入首尾数字,且为左闭右开,形式为listname[start:stop:step],不需要的部分可以省略。切片可以:获取部分元素、增加元素、修改元素、删除元素等
1 | test = [12, 15, 18, 'a', 'b', 'd']#创建list |
12
[12, 15, 18]
[15, 18, 'a', 'b', 'd']
[12, 15, 18, 'a']
[12, 18, 'b']
d
['d', 'b', 'a']
list常用方法:
- 添加类
- XX.append(x)——尾部追加一个元素
- XX.extend(L)——尾部追加一个或多个元素
- XX.insert(index,x)——指定位置插入元素
- 删除类
- XX.pop()——删除并返回指定位置的元素
- XX.remove(x)——删除列表中第一个与指定值相等的元素
- XX.clear()——清空元素
- 索引计数类
- XX.count(x)——计算某一个值x出现的次数
- XX.index(x)——计算元素x第一次出现的索引
- 排序类
- XX.sort()——排序
- XX.reverse()——元素翻转
- 内置函数类
- len(listname)——返回list长度
- max(listname)——最大值
- min(listname)——最小值
- sum(listname)——求和值
1 | test2 = [1, 3, 4, 7 ,10] |
[1, 3, 4, 7, 10, 11]
1 | test2.extend([22,33,44]) |
[1, 3, 4, 7, 10, 11, 22, 33, 44]
1 | test2.insert(0,100) |
[100, 1, 3, 4, 7, 10, 11, 22, 33, 44]
1 | test2.pop() |
[100, 1, 3, 4, 7, 10, 11, 22, 33]
1 | test2.remove(100) |
[1, 3, 4, 7, 10, 11, 22, 33]
1 | print(test2.count(10)) |
1
0
1 | test2.sort() |
1 | test2.reverse() |
1 | test2 |
[33, 22, 11, 10, 7, 4, 3, 1]
1 | print(len(test2)) |
8
33
1
91
3.2dictionary字典{}
- 可以同时包含“键”keys与“值”values的存储方式
- 运算速度较list快
- 直接输入键名或get或setdefault的方式获取值
- 对字典对象直接进行遍历或迭代时默认遍历键,若想遍历值,则使用XX.items()获取
- 增删改操作此处不再详细叙述
1 | dict1={'apple':6.0, 'banana':3.0, 'lemon':10.0} |
6.0
1 | dict1.get('apple') |
6.0
1 | dict1.setdefault('apple') |
6.0
1 | dict1.setdefault('peach',22.0)#检查是否有,没有的话插入 |
22.0
1 | dict1 |
{'apple': 6.0, 'banana': 3.0, 'lemon': 10.0, 'peach': 22.0}
3.3tuple元组()
- 创建后即不可更改
- 有序
- 比list运算速度快且轻量,若元组仅有一个元素则需要在末尾添加一个逗号
3.4set集合{}
- 元素非重复
- 元素无序
- 可以实现去除重复值的作用
3.5str字符串’ ‘
- 字符串可以使用+进行连接
1 | set([1,1,2,2,2,3]) |
{1, 2, 3}
1 | 'Wang' + 'Qianni' |
'WangQianni'
4.逻辑符号与逻辑结构
4.1关系符号与逻辑符号
大于, <小于, ==等于, =赋值, >=大于等于, <=小于等于
& and 交集
| or 并集
in 包含
1 | 3 > 5 |
False
1 | a = 10 |
YES!
4.2逻辑结构
4.2.1if判断
if 后内容为真,则执行;否则不执行
4.2.2if…else…判断
if 后内容为真,则执行if内容;否则执行else内容
4.2.3if…elif…else…判断
从第一个if顺序判断,直至符合条件并执行,否则执行else内容
1 | if 1 == True:#注意冒号 |
YES!
1 | name = 'Wang_Qianni' |
YES!
1 | x = 4 |
x > 1
finish
4.2.4while循环
当while后为真时,持续循环,否则跳出循环
1 | c = 0 |
0
1
2
3
4
4.2.5for循环
基本形式:
for item in sequence:
expressions
可以使用range(n)函数遍历0至(n-1)的n个值:
for item in range(n):
expressions
1 | list1=[1,2,3,6,7] |
1
2
3
6
7
1 | for i in range(5): |
0
1
2
3
4
5.def函数的定义与使用
一般形式定义:
- def顶格写,后面有冒号
- 命令部分需要缩进
- 如果需要函数返回内容,则写在return后
- 函数内的参数是局部参数,之后不可以直接使用函数内的参数
- 传入的参数可以在定义时指定默认值,如调用时希望修改,则可以直接在调用时传入新值
def 函数名(参数1, 参数2….):
命令
return XX
调用:
函数名(参数1, 参数2….)即可调用
1 | def testfunction(): |
1 | testfunction() |
First function
3
定义函数时,可以先写为如下形式并构建框架,再修改pass补全内容。
def XXX(para1, para2…):
pass
6.Python自带常用函数与功能
6.1zip (for循环中同时循环多个量)
1 | for i,j in zip(range(5),range(10,15)): |
[0, 10]
[1, 11]
[2, 12]
[3, 13]
[4, 14]
6.2enumerate (同时获取索引与数值)
1 | for i,j in enumerate(range(10,15)): |
[0, 10]
[1, 11]
[2, 12]
[3, 13]
[4, 14]
6.3try…except …(试错或视为一种逻辑结构)
1 | try: |
6.4 continue与break (结束循环)
continue结束当前次循环,进入下一次循环
break结束整个循环
continue与break的原理与C++中一致
6.5 map(绑定函数与参数得到结果)
1 | def add(x,y): |
[3]
6.6lambda(简单方法定义函数)
实现代码的简化
1 | add= lambda x,y:x+y |
x=4
y=5
9