引言
# H3 O8 ^% C5 t' K* x; k. B3 W- b( J3 G+ g ~! y
曾经自学过python,无论从工作、生活、收入都有所改变,可以说获益颇丰吧。
2 ?- }! Q* c4 MPython是一门快要出圈的编程语言,在今年的TIOBE年度语言评比中,Python再度夺冠,这已经是第四次。正因为流行,一部分人趋之若鹜,一部分人嗤之以鼻。" n" ]& `* t& i; k: p6 n
我觉得学任何技能无非出于实用需求,能带来效率的提升,或者能找到一份工作。
& A% I) y/ {/ O0 w( i9 X% M学习python也是如此,不要盲从,也不必排斥,对自己有用就去学。 C' ~( a" i, H3 o+ t+ j3 F) D
接下来,我会从七个方面系统谈下学习python过程中需要了解的那些事。
; z* X! E* V* r! y! w- u一、什么是Python?
; N1 ~% q8 }' H
6 O6 M/ @, u7 n0 \定位! [2 m( V: ^0 q2 c& }0 ?
我们知道Python既能像R、Matlab一样做数据科学、机器学习,又能像Java、Go一样开发网站、管理数据库,还能做CV、NLP等前沿技术,堪称编程界的瑞士军刀。这些既得益于Python本身的优秀特性,很大程度上还因为Python强大的开源社区(第三方库开发)。
9 h7 N% ?0 g$ f$ c9 P6 GPython是一门面向对象的解释性高级动态编程语言,这些术语会有些拗口,后面一一解释。它的设计哲学是“优雅”、“明确”、“简单”,崇尚做一件事情应该只有一种最好的方法。2 M' D$ a0 o3 `3 w' {: f: m
Python提供了高效的高级数据结构,还能简单有效地面向对象编程。其优雅的语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。1 B A( X( O! @, G+ {3 U
虽然Python运行代码不如Java等静态语言快,但它胜在简单易学,开发效率高,而且根据二八定律,大多数程序对速度要求不高。所以人生苦短,何不Python?3 O4 `* W4 {) m' e9 V
不只是开发效率,Python帮助程序员更关注问题的本质,而不用担心语言的细节,不需要担心内存泄漏、意外中断等。! O1 \/ r- ~/ B
所以说,Python的定位是面向所有人的全栈语言。
5 i- }- v9 A) G. f OPython的创始人为Guido van Rossum,一个荷兰人。
+ I; {* e* b8 L2 @/ }0 p4 {# F+ Z
2 i* [9 C/ k) `1 [- t# o
' a% k9 t A# ^
1989年圣诞节期间,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
4 s! B3 k$ e0 \& ?/ xGuido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程,于是Python应运而生。
; o+ \8 c: G2 c6 {1 S5 s# GPython原本是一个马戏团的名字,而Guido作为该马戏团的铁粉,把这门新语言命名为Python。
' Z2 V, i7 V, {: v最初Python完全由Guido个人维护,后来同事也来帮忙改进,再后来形成强大的开源社区,一举成为最受欢迎的编程语言之一。% D! C- J* A& O- s5 ~* j! j
Guido直到2020年才退休,在此之前他一直主导维护开发Python,被称为Python社区称为‘仁慈的独裁者’
: x9 }4 R7 i# {: ^" ^1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。& X4 ~* ], I' _2 d
Python 2.0于2000年10月16日发布,增加了实现完整的垃圾回收,并且支持Unicode。同时,整个开发过程更加透明,社区对开发进度的影响逐渐扩大。
- b) F+ b2 n5 f. X9 {& J- @4 C" {Python 3.0于2008年12月3日发布,此版不完全兼容之前的Python源代码。
@) e3 o% c/ |3 {& S+ e, m前面也讲到Python是一门崇尚“优雅”、“明确”、“简单”的编程语言,有专门的pythonic风格代码,这也是广大Python开发者日积月累的代码之道。: |8 R$ ^8 C) Q& @
如果你在IDE中输入`import python`,则会看到下面一首诗:
$ f b1 E O2 Z# D; w3 E8 h
A. I7 m: J5 S+ [: s
$ J$ B6 Z4 k8 \0 I4 R2 S美胜于丑,简胜于繁,这就是Python哲学。
' u9 |+ M8 A( k+ j# z2 D" F2 @: v除了简单易学之外,Python有以下5个主要特点:
, n7 E: \/ o6 s9 f7 ?; [面向对象:Python既支持面向过程,也支持面向对象,可开发大型程序。解释型动态语言:虽然速度慢,但可移植性好,能跨平台,而且很灵活。可扩展:可以通过c、c++等语言为python编写扩充模块。免费&开源:作为开源软件,不论私用还是商用,Python都是免费的。库资源丰富:Python开源社区很活跃,拥有各种神奇的第三方库。
& b0 R, D$ ]3 M: t2 @ 如果你还只认为Python是个脚本语言,那就out了。: c+ `4 a+ _' z0 x _! ^3 A; r5 H3 P
二、为什么要学习Python?
, z/ T9 s2 w- C+ z- D( S1 F8 Y
' m; P8 L4 r0 f* Z& `+ @, E用途
5 o. i4 p. h; B) ?5 p: d 学习Python目的不是为了了解这门语言,而是要利用Python来解决问题。/ U$ ?' X3 U/ Y2 ~
从问题出发是我一贯推崇的编程学习方法,记得一个朋友说过:脱离实践的学习,也是一种变相的玩物丧志。
( C! H+ V2 P8 ?" s7 A8 [+ Y有一部分人把学习当作一个目的,来安慰自己,这其实本末倒置了。
4 p7 o- _6 u* R" C" |& W9 N说了点题外话,下面聊聊Python的应用领域。
u# Q* }: U8 V( P. y无论你出于何种IT领域的需求,可能都能够通过Python找到解决方案,但不是每一种都适合用Python来做,所以了解Python的重点应用领域格外重要。
& D7 X, e- f7 s- S' X1 h自动化运维、数据科学、人工智能、web开发、网络爬虫
M6 D/ n' W3 R @% }) q以上几个是Python核心应用领域。
+ l! y7 m. Z- j) m" N1 @【自动化运维】
2 K8 }' p- z1 ~3 X自动化运维主要包括监控、部署变更、安全保障、故障处理、运营数据报表、系统管理、配置管理、集群管理及大数据应用等。
- }. V, Z2 C' w" ]5 w目前开源软件社区优秀的自动化运维软件,如Ansible、Airflow、Celery、Paramiko等框架都使用Python语言开发,甚至一些大型商用的自动化部署系统都有Python的应用。
: U0 W% j3 T. Z, O* ~% t 很多操作系统中,Python 是标准的系统组件,大多数 Linux 发行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在终端下直接运行 Python。- o9 Z+ e6 ^+ `8 [" k: u
有一些 Linux 发行版的安装器使用 Python 语言编写,例如 Ubuntu 的 Ubiquity 安装器、Red Hat Linux 和 Fedora 的 Anaconda 安装器等等。* Q! |! ^( M' B
因此,学好Python,不仅可以在多平台编写自动化运维程序,而且可以对开源的自动化运维工具进行二次开发。
U; Q5 ^1 G9 f& _, b【数据科学】
& f$ V4 h0 W- P ?/ p前段时间matlab被限制在中国使用,知乎上开始讨论什么工具可以替代matlab,python是被提及最多的编程语言。
0 T9 ]9 w5 A4 D4 H9 X2 Q且不说python能否替代matlab,就目前python在科学计算、模型构建、可视化上的能力就已经可以傲视编程界,其拥有像numpy、scipy、statemodels、pandas、matplotlib等众多现象级的数据科学库。
: T9 l# K) A# Q1 U7 v( E) {; M不管是github、kaggle、天池,还是企业高校里的数据项目,python几乎都已成为首选支持语言之一。
/ I* u, @" J, J% E( q另外在高端科技领域,同样有python的身影。自 1997 年,NASA 就大量使用 Python 进行各种复杂的科学运算。
5 Y+ B3 |! {5 S' j0 P4 l# \7 P【人工智能】
$ s% ~5 d, o- ], e6 z1 D说到AI,这应该是python的看家本领了,其应用生态可谓波澜壮阔、群星云集。
9 p3 q; A G9 M不仅有tensorflow、pytorch、caffe、keras等主流人工智能学习框架,还有Gensim、NLTK、OpenCV、Mahotas等专注于nlp、cv细分领域的经典开发工具。# ]( N- f' t3 S- D
/ ^. m, S0 i3 r6 l& C6 b" j
* S" N- C! q0 I2 U- @
场景" @: j0 {2 v' O1 W) C4 k
如果你经常逛github,会发现有很多AI开源应用,开发者们基于tensorflow创造出许多好玩的东西。
& ]$ Z0 p7 `% C( k! f% d面部识别-face_recognition ,几行代码就可以进行人脸识别
$ c3 c3 X( H4 j9 p) E* _# }6 |1 R9 l( H4 l
8 O z( G: n% a7 v: p; T# g# ]
4 J5 D7 h; s$ F4 P2 F6 F
图像文字识别-PaddleOCR ,可以识别图像里的文字,并转化为文本。3 ` U3 f3 L9 R5 ?- G% R( h
- ~( A1 g2 T& P* B! J2 P3 |
) M! M$ C* x$ {' s
1 j2 Y# j9 m) F4 C- S# { y( t, }. d
, Z0 {# s1 N* Z" R/ R2 h: D& d5 b自然语言处理-HanLP 5 l) y% p& y4 J. V! @
3 l8 d& R, m: B0 G0 F. {3 O
$ d/ D' v0 V, x4 g2 @2 t: `& T0 o! Z) u; H1 A+ `/ k8 W6 x V( m/ T" }
. A' U) ~. E6 D* J0 w" U0 n1 H4 P不一一举例了,Python第三方库实在太多,在各个领域都发挥着作用。" E0 F0 F0 d2 N, C' X+ h* w+ M
三、哪些人适合学习Python?- o& k1 M8 l& W" p5 o8 @' I+ @ h
2 e! u! \1 |6 w, N如果评比编程语言里谁最受大学生欢迎,Python当之无愧排第一。
* {& }9 v1 V1 E8 a9 a/ z, W. |经常有各个专业的童鞋来找我聊Python,其中很多是计算机、生物、医学、地信等工科专业,但也不乏汉语言、经济学、会计等文科专业,甚至还有风景园林这样的偏艺术专业。' B, V3 e( G' u' ~
可见Python的应用范围之广,受众之多,已经遍布文理工农医艺。: ~: H6 S9 E7 _- S) U/ I
用Python处理数据,跑模型是最多的选择,还有用到学科类的第三方库。- j0 `: Z+ @5 K$ V' i/ H+ q
下面列举一些各类学科的库:0 h: _& v( X8 i
生物-Biopython ,用来进行生物计算" H2 Q9 {/ H" s
天文-astropy ,提供天文学和天体物理学分析的核心功能: s, M3 Q( A |% z& X
统计-scipy、statemodels、statistics,各种统计分析模型和计算工具+ Y9 ?# R/ u( ]0 n# l
化学-cclib 、Open Babel 、RDKit,化学数据和模型分析
, H. O( H# p+ \" X" t- G动力学-PyDy ,用来为动力学运动建模工作流程提供帮助
9 Y$ t9 M; J) u9 W$ E5 i8 G9 U; n金融学-Pandas,最为强大的金融分析工具之一& c- O$ M& s4 f- [+ V1 i
详细讲下python在金融领域的应用。我们知道python是金融分析的核心语言,越来越多的金融机构试图利用ML和DL算法改善运营,以及它们的交易及投资表现。8 g1 N3 `3 e$ a" j, R
特别是在量化领域,应用非常广泛,从衍生品定价到量化交易,Python社区提供了大量解决问题的工具。诸如:
. r9 Z+ |$ n( m- E. T! Epandas- 提供了高性能的数据结构和数据分析工具5 D3 b. Y- a8 `' U" U
PyQL- Quantlib的Python接口
4 J; U9 d" {3 J8 f: H v. iQuantPy- 定量金融分析" O/ p0 o/ U6 F9 p
tushare- 获取中国股票,基金,债券和期货市场的历史数据
8 T3 K0 v5 z( U; @$ e( `Seaborn- 基于Matplotlib,方便快捷创建可视化图表 A7 u. `: B- Z' L! J4 U' N
......
. ]3 R! \: E( h8 Y, P. ?, j* Y5 x/ m$ Z) y' N# ^3 T
8 |5 P$ X; y: o$ ], r* i5 V另外,Python还适合作为教学工具,一方面因为它语法简洁,另一方面因为Jupyter Notebook的存在。) V! P Y6 y8 T5 b. t
Jupyter Notebook是一个基于网页的编程交互应用,它可以在浏览器打开,支持包括Python、R在内的多种语言编程。0 ^) `4 q5 H) ^5 p( L3 q( r* b5 F
简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。: z( I3 o& p4 y L# }
. V5 `* f; t4 q* Q$ d1 B+ `
2 d1 q+ E. W3 I; B! c U
Jupyter Notebook的用途包括:文本编辑、数据清理和转换、数值模拟、统计建模、数据可视化与机器学习等,它还支持Markdown、LaTeX等文本形式。
1 e$ u) _1 q- Z& Z' U" `4 A( C老师在教学过程中,可以很方便地使用Jupyter Notebook进行代码演示,图表播放。
, {' Q; [7 y. o L5 ~不少学生直接把Jupyter Notebook作为随身笔记本,跑代码、记笔记、写作业。2 L+ {& _) b6 k& F; v3 F
职场
- }2 e; `; Z' Y2 |1 F' x& s; k 说到职场,我们往往会高估企业员工的IT技能。, h1 t! R% B" ` i( i2 j& S
其实大部分人连excel都用不利索,不信你去调查下,身边的同事有多少会用透视表和vlookup等基本的函数。- @+ V3 z. e. C5 U8 l
所以能用编程的人就少之又少了,如果你从事数据类、运维类的工作,不妨学习下python,和其他语言相比,学习成本应该是最低的。3 I5 h; {" `7 m2 n8 \. m) k8 B8 H6 m
从成本来看:
- X' U7 ~8 P" O% Q& F经济上,python开源免费;% O" h. h3 ^! V, j% h) @/ q: k
时间上,python非常容易安装,能即编即运行,而且支持windows、os、linux等各平台;
( T1 B8 ]/ w t6 l+ T3 H+ V/ M# ~) e复杂度上,python代码几乎接近口语,逻辑清晰,结构明了
" o8 B7 s; p/ _5 ~$ C; h9 a比如说打印,只需要print即可& q4 Z/ k3 U" L+ ~% }: |$ k5 ]- X
print("world")循环,用for语句% _' f% Z+ q0 |9 H% l* q+ C
for i in [1,2,3]:
/ G6 ]3 y! F2 ? U print(i)函数,用def定义
7 e. M. W$ i1 z7 C8 g j; ?def plus(a,b):
5 b9 X) r4 k& f# `6 W- x6 y+ @! O result = a + b# \* r! W" ~' V
return result那么python对日常工作有什么帮助呢?我觉得主要有三点:
; p$ R$ n& a9 a5 g7 o2 T4 r; v1、自动化办公
0 U. _1 s T0 ?2 F可以批量处理各类文件,比如更改文件名、文件格式
* T2 W0 g* u7 B- h 朱卫军:一文搞懂Python文件读写. d) h' k5 S/ y
与excel、word、ppt等软件交互,写好脚本可以避免重复操作' _+ |9 i2 c+ \' }
用python进行办公自动化都需要学习什么知识呢?
7 p- d+ l5 N1 `: d4 K7 A请教下 Python 高手,如何用 Python 自动化操作 Excel?
8 f/ N$ g9 P2 z. {0 r( i, o自动化接发邮件
. b9 U1 Z! Q, b1 j 朱卫军:干货 | 解放双手,用Python实现自动发送邮件3 H% d4 m, y% c0 J# z0 z
2、处理数据' V- _* u" s1 q7 ?( C7 @$ g9 H
python因为是图灵完备的语言,且拥有大量工具库,常见的模型公式拿来即用,可以灵活方便地处理数据,能节省很多时间。
* q8 N' Q3 m- ^就拿地理空间分析来说,目前我们常用的是gis,但gis很贵、而且不好安装,学起来也费事。' S; y3 c; p3 F5 {- ^
python就提供了很多地信分析库,包括shapely、geopandas、cartopy等,这些都是免费试用,而且可定制化,能处理大批量空间数据。) [' p5 U9 U0 |5 ]0 N& j
3、爬虫
1 ]3 K+ L, u- d/ e( ~" B这是很多人学习python的原因,爬虫太有趣了。几十行代码就可以批量爬取文本和图片,在信息即是财富的今天,网络数据是一个巨大宝藏。2 D" X! ]. E' |
当然,爬虫有风险,我们需要在确保不触碰他人利益的前提下合法使用爬虫。
m8 A z4 U. V& j* E4 k+ k; J简单介绍下Python爬虫:' I9 I! K, z5 E0 ]
网络爬虫,其实叫作网络数据采集更容易理解。2 B9 A: @# R" R7 _
就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。
# t* o# q) K. a: p8 z归纳为四大步:
7 V+ U" v0 L F; c根据url获取HTML数据解析HTML,获取目标信息存储数据重复第一步
2 @. \2 A$ l, X2 n7 W 这会涉及到数据库、网络服务器、HTTP协议、HTML、数据科学、网络安全、图像处理等非常多的内容。但对于初学者而言,并不需要掌握这么多。
: T& I) a+ n/ e' Y# k- \, W在编写python爬虫程序时,只需要做以下两件事:' J8 @4 _' x8 y7 M K- m+ X1 m! F
发送GET请求,获取HTML解析HTML,获取数据* u; \! c) n) k0 @8 s1 R
这两件事,python都有相应的库帮你去做,你只需要知道如何去用它们就可以了。8 N: S* U1 ] H1 g
首先,发送HTML数据请求可以使用python内置库urllib,该库有一个urlopen函数,可以根据url获取HTML文件,这里尝试获取百度首页“https://www.baidu.com/”的HTML内容) w: R* T6 R7 r/ S
# 导入urllib库的urlopen函数
, y4 F2 v# p4 Efrom urllib.request import urlopen ! u* u7 E& h4 ]" o$ n8 w9 W9 W
# 发出请求,获取html1 J2 Z1 \1 }3 E1 f N @
html = urlopen("https://www.baidu.com/")
) ^0 R+ z5 u# Z- \# 获取的html内容是字节,将其转化为字符串2 f" B, M! y! X j, r' g
html_text = bytes.decode(html.read())# u9 m5 w$ N- J
# 打印html内容+ h3 l% D. a+ C. z4 O
print(html_text)获取了HTML之后,接下就要解析HTML了,因为你想要的文本、图片、视频都藏在HTML里,你需要通过某种手段提取需要的数据。
4 O$ t4 N) R8 k* R; [python同样提供了非常多且强大的库来帮助你解析HTML,这里以著名的python库BeautifulSoup为工具来解析上面已经获取的HTML。6 k# ]& y( n; x+ |
BeautifulSoup是第三方库,需要安装使用。在命令行用pip安装就可以了:0 L2 y/ n2 I% O7 t: L* K
pip install bs4然后用BeautifulSoup解析HTML文件。
, T6 {# s, i, K- p# 导入urlopen函数
- L' B0 n. t$ ?0 n' p( \* Nfrom urllib.request import urlopen' x* M9 ^7 T) \# i3 ?6 q9 A1 S
# 导入BeautifulSoup
6 w9 o( i% L& gfrom bs4 import BeautifulSoup as bf! @( Z+ t7 T: V) E7 j
# 请求获取HTML
' r; }9 Q- j. ?- p |1 d7 q0 v+ Uhtml = urlopen("https://www.baidu.com/") H1 z3 F- G7 J8 g2 K* g: F
# 用BeautifulSoup解析html+ x" Y2 p9 S% [
obj = bf(html.read(),'html.parser')
' t% ]0 K7 N( a% H, M% q# 从标签head、title里提取标题
# [. D! m' b3 s. Xtitle = obj.head.title$ z" J. B" ?0 u) \
# 打印标题! O1 L. x0 D+ V& r
print(title)这样就搞定了,成功提取出百度首页的标题。9 x2 f9 N* H4 B1 |( Y% }
四、如何学习Python?% q: [ B, I; [0 W; _5 X
2 K4 f: j; o4 F3 y' W; ~9 C1 @
Python一门面向对象的编程语言,基本语法并不复杂。
' I8 J. j5 P3 ~) C1 V2 F3 S; `: A其实大部分语言的语言特性都是相似的,无论Python、Java、Go、JS等等,只需要理解了语言特性,你就能快速入门任何一门编程。
2 \( c0 q X5 B" I1 |5 ^6 W/ R比如:变量、数据类型、函数、循环语句、条件语句、算术运算、面向对象、递归等等
5 ?- t+ U# a/ m) H( g# e+ `这些语言特性是编程语言的标配,就像人一样,虽然每个人是不同的个体,但共同的特征是都有手、足、五官、大脑、皮肤。
/ r. ]1 B D8 I. k/ u9 _* w学习编程语言,忌讳一开始就抓住某个知识点啃,有的编程书籍光是数据类型就洋洋洒洒写了几十页,等你看完早就身心疲惫,感慨Python真难学。管中窥豹不可取。: a0 ]& d) U# V1 q
输出是最好的输入,编程语言虽然注重逻辑,但更需要学习者不断地动手敲代码。9 T+ z0 P: o* r2 B+ J- `
从一开始,你要学会如何搭建python环境,选择什么样地开发环境(IDE)。这些都可以去网上查,慢一点的折腾两三天,快一点的一天不到就能搞定。总之,这是学习python的第一步,也是练习的开始。$ k$ x) L$ e0 r- B2 T+ Y+ c
对于官方文档的每一段代码,我建议都动手亲自敲一遍,比如你看到字符串这一节,在理解了字符串定义后,文档会给出示例代码和运行结果:
' m3 W8 o9 m" l5 O/ f+ `
3 j( [& s" R U6 I) C+ m
- f7 ?1 G- }; i2 u7 l/ q
照着示例代码,在你的编程环境中实践,千万不要复制黏贴,对自己的火眼精金过度自信并不是一件好事。
2 p; v' }! a5 U$ R- V: y( t) Y1 D这里会对Python语言特性有个简单的介绍。对想入门python的小白十分友好!4 M t7 d0 F& X: Q; ]9 c
变量
3 h, D0 D" V' c- O变量是存储在内存中的值,变量可以通过变量名来访问。+ I' x1 O- _4 P# x5 u
比如说,我想在内存中存2019这个值,并给它命名:year = 2019,那么我就可以访问year得到2019。5 D9 t9 O6 s, ~6 R! T1 f
变量是有数据类型的,有数字、字符串、列表等。" `& F5 ^) F2 R
Java里面当我们创建一个变量的时候需要申明它的类型,但Python不用,你想创建变量可以直接这样写:& M& {/ A9 j6 ?, a( X% m9 k
# 字符串变量- I) T( q; F) [2 f6 C* V
a = "hello!"
+ y3 B, d+ q% I+ ~* J: h; x# I# 数字变量
Z% Q5 @4 t$ `9 g+ y2 sb = 2019
, }1 @: f; {% s# 列表变量4 ~" S" Z' v! X
c = [1,2,3]可以通过变量名a、b、c分别访问hello!、2019、True
+ G7 r |/ e$ Y5 {2 y数据类型' u7 Q- o( h# p8 I# G" {
数据类型是编程语言中为了对数据进行描述的定义,机器不能识别数据,而不同数据间的相互运算,在机器内部的执行方式是不一样的。
5 h: L2 e8 B- ~$ g) `7 dPython里也有不同的数据类型,但就像前面说的,Python定义变量不需要申明数据类型,它可以自动识别。
: b) U3 x3 g$ m: t) DPython3 中有六个标准的数据类型:6 Z) C! W7 q; c( }. B
Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)9 d) ]- q2 C% N: @, S$ \
比如hello属于字符串类型,2019属于数字类型,[1,2,3]属于列表类型8 j" m( C% l* D& a4 K
数据运算方式, Q6 T$ a0 C L/ `. Z! x
我们已经知道了数据类型,数据运算方式就是编程语言里操作更改数据的方法。# i& |$ K% S* P% P
换句话说,编程语言需要对数据进行处理,这个处理是在一定的规则里操作的。
8 R0 e" i5 E4 Y7 M, Z, @, K在Python里面有以下几种运算方式,也称作运算符:
* q8 N T. J' B& P5 Y9 o0 S算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级
' F8 ^) g0 {: \. t C z 并不需要你一下子理解这些运算方式,但需要知道简单的概念。
" n4 F% h! v9 l; t: M7 ~# 算术运算$ s- V3 t+ d5 y6 H' A9 S
x = 1 + 2
8 {- F; {: |) V# 比较运算4 |4 z) J9 |; F* w3 ~: u
y = 4 > 9
4 d- j6 t0 o% D# v# 赋值运算
" o+ U3 T: x) ^$ m, Tz = 9条件语句; ]0 @% y& n4 b$ N0 S
条件语句是通过检查条件来更改程序行为,比如:如果今天不下雨,我就逛街
0 _, R" i8 X; C" B" K! P这种情况就需要来判断,有两种情况,1、下雨-不逛街 2、不下雨-逛街+ u! Z# \7 R; E
9 U! h5 F+ r4 K* @
/ g0 X6 C0 u* u% M9 Y% [( @1 ~Python里面使用if...else...语句来完成条件判断的操作,我们来用写代码操作一下:4 c* u! V& @" S( _0 ^9 h1 K
weather = "雨"
( o+ s; S( [ U' z b3 i/ ]if weather == "雨":$ a$ ^/ d7 M0 e" B; A& {& s
print('不逛街')% `9 p' r/ N# S, m3 G
else:, h1 B# Z, Q2 P8 c" L
print("逛街")通过条件判断,今天有雨,代码会输出:不逛街2 @3 R2 {+ ?- o0 P- r9 c
循环语句
5 r' e- x4 L# r循环语句是用来进行规律性的重复操作。就像医生门诊,需要一个个对病人进行诊断。
; \4 C k$ z6 }/ ]) T8 Q循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。
; D* y# ^% w* b) e' G& x# e$ ~- ~! N
( W3 c. d- x4 ~/ Q5 Y
在python里面有两种方式执行循环:for语句和while语句。
9 ?7 F1 j, |! U( Z; w* M& h拿for语句举个例子,for循环可以遍历序列,比如列表、字典、字符串。% S* @* E4 \5 s0 ~, T8 }
for i in [1,2,3]:- U- Q2 v& r( @9 W" `: u- X( `
print(i)依次输出:1,2,3
/ e# _$ `6 n* q' w) \2 P R& R函数! n2 h* |% ?4 ~: T8 I, M
函数本质上是一组功能代码块,只有在你调用的时候才会执行。 @" {- g5 c' a
你可以将参数作为输入传递给函数,然后经过函数体的加工,返回一个结果作为输出。
- t- H. z' p3 l7 q在Python中,函数用def关键字定义。* e0 x7 o, M$ \0 v" ?* e+ e- ^( S
4 k- |9 o+ E, f0 {' Y# y
7 c* ~; I7 k( P3 ?; }比如,我想写一个函数,来输出“hello world”
) T" M4 G7 J" x9 \; u* Odef helloWorld():" l" x2 ^6 E- s; n8 l4 M) u- a" H3 Y
x = "hello world"
$ J: \1 ^, m0 H* f return x" R' M# a" {5 A2 Y% c
面向对象) W+ q! j0 b& M6 v0 o7 ?$ Q3 B- \
现如今面向对象编程的使用非常广泛,很多新手觉得面向对象很难理解。) _1 P! S; B8 i$ w
面向对象对应的是面向过程,它们分别是什么呢?) ] C+ [7 I5 O D" _
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。7 p3 l# W. `$ d
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。; U' u; d5 M0 \) R
% o4 {# |3 P( \# a, |* b0 y* v1 ]
5 z/ |9 f' F5 _ ~
面向对象编程的基本元素是对象,其包含的数据成员称为属性,函数(例程、过程)称为方法。" B5 e0 Z7 o0 {: d6 @1 H
对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。
! z+ V. K* w1 @0 k( T" y类不但包含方法定义,而且还包含所有实例共享的数据。
+ a: f. c$ W# K+ Z简单来实现一个面向对象编程:
; k- z) @8 C! m& M) l2 Fclass Employee:; p) m% G) F, f1 h+ B; v+ X5 @: C
'所有员工的基类'8 \% _" `: M* R/ T3 k7 Y6 E# i0 \( F
empCount = 0# U$ \- [* c H( R- Q) Z, j
, Y/ t B; i& f
def __init__(self, name, salary):
9 d+ j* r. O; n$ }! _: b
7 Z9 Y0 d* S6 f# y @ self.name = name/ s7 K( U- |# x# F, _. Q
self.salary = salary j2 d( M# m# C8 J
Employee.empCount += 1
, D, u9 ?% w# d/ v' t; M, h) x
% J0 [8 B7 k, {' I def displayCount(self):
0 N; P# n5 P6 B5 M; e1 t# r print ("Total Employee %d" % Employee.empCount)1 O: `1 @8 X) h1 c
7 a% v" u( E2 h3 C- `. z7 s
def displayEmployee(self):
! f4 w0 b6 f; B. z' p& c, h print ("Name : ", self.name, ", Salary: ", self.salary)练习# Z4 v# L( r9 ^! A# V4 I
学习编程最主要的是练习,下面介绍适合新手的python小项目:8 E( L. N( ~. c! X
贪吃蛇小游戏' Q# Z7 W) ]$ T7 k
用100行python代码写个贪吃蛇小游戏,也不复杂但涵盖了大部分python语法。
. G, z+ G" _5 S; A- z2 @5 Q) n% K
2 j- v! X9 p t
; f7 B2 {; E& r
/ x6 m, \+ i3 @* e" { l9 S: B
项目地址:https://gitee.com/codetimer/Snake/blob/master/main.py1 I" N" r' V4 k" T# O" v' Z
可以尝试着先复制代码运行一遍,然后自己写。# S1 \2 L4 J1 O0 @
人脸识别+ t& |- \# p3 t% s
调用开源项目,只需要简单的几十行python代码,就可以实现人脸识别。7 W* Y+ A) d2 G: M0 l
3 z$ g0 v7 ~7 q5 x r, x2 [% Y
1 U( c6 I( W1 c/ M6 ~' s8 d& W. _1 \& {* w A7 ~1 E
9 E' V5 G3 A6 U项目地址:https://github.com/ageitgey/face_recognition
! H3 Z# A7 W: g1 ]& P中文分词&情感分析
) T, d# d( g$ D: i, ]这个也比较有意思,可以爬取电商评论数据,然后分词处理,并做情感分析,判断好评、差评。3 ?* W4 L2 z, D, I5 Y
jieba可以用来做分词处理
, q G2 ~9 b1 S$ D: @+ _https://github.com/fxsjy/jieba8 u+ {; X7 ]! z3 `4 m
; X1 }% R% h: l
6 U2 b; W0 G, U+ D$ |8 }+ g" C! ^4 Z
5 j! ?2 G9 F z0 x& @, O! \
snownlp可以用来做情感分析。7 F1 r( J9 {0 I. s; F6 A; u+ x
import snownlp" m/ t# @2 N4 C0 d
sentense = '''亲,第一天秒杀买,比第二天的正常价还高,* ]" c( g. n) N: V
说保价7天申请售后说退差价也比不退,你们还有信誉吗5 ^ c! q8 S9 d# t' G4 W% T
'''
1 ?) p' G( b$ X& j9 ]0 S$ xresult = snownlp.SnowNLP(sentense)2 O+ T, H& T$ y. l3 ~
a = result.words # list
9 J& y6 |) T7 D% db = result.sentiments # float
0 O3 B( q g& k1 fprint("%.2f" % b)https://github.com/isnowfy/snownlp
8 R# @* v2 r* {. u1 M车型识别# \. @/ f2 B: q; y2 R* M
这里使用python调用百度的车型识别模型,只要导入车辆图片可以自动识别车型。( o2 g0 p M2 }& N* H/ x
import requests
0 S2 Y) c7 u! S0 [import base641 A0 d9 m* O1 U3 h7 s$ V" a2 u
import matplotlib.pyplot as plt4 e- ? C: v6 X- @
import matplotlib.image as mpimg
) t6 p9 k. ^9 l1 |* I
% X. g- r7 {! N0 @ m* Q# 输入你的api_key和secret_key,获取地址https://console.bce.baidu.com/ai- X% i u5 f' }& ^* G
api_key = ''
$ I; L2 g9 p% Q2 A/ `1 l7 qsecret_key = '', w5 `4 U& I' }& ]" {* v
url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + str(api_key) + '&client_secret=' + str(secret_key)
7 l o$ J! {4 T, c& dres = requests.get(url).text
# m0 v# @3 B2 _$ [+ j: E! Na = eval(res)
8 _& `' S% w. p; h0 Haccess_token = a['access_token']' A% O! b( V) K3 e. Q; k
animal = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/car?access_token=' + str(access_token)
- W ]5 Q) O8 q0 I$ eheader = {
7 S9 T' X5 O5 v$ R- u 'Content-Type':'application/x-www-form-urlencoded'. ^! U+ y, F9 X; L8 N
}4 E9 J9 k6 Q6 \7 M T: X5 p
data = {}! n- C5 L' R, H& M5 c
with open('timg.jpg', 'rb') as f:
' d% f3 C0 x" G5 r$ K5 [ image = base64.b64encode(f.read())5 f$ g& }9 X) G1 w
data["image"] = str(image, 'utf-8')
, M' }. ]; R: p# Y; I res2 = requests.post(url=animal,data=data, headers=header).text4 H3 M! C' f, j j
print('颜色:',eval(res2)['color_result'])
5 N$ r) U/ r; w print('车型预测') m2 k# [' n+ M! j0 n1 |
for each in eval(res2)['result']:" z; a- c. u& q9 F
print(each['name'], '\t相似度:', each['score']): b1 d8 V) l0 R# H( _
plt.imshow(mpimg.imread(f))
3 E% W5 E0 o e: a B y3 pplt.show()
; y- B' W5 E, O. W7 D! l
! C" P" V& r8 \$ l其他还有很多可以实操的小例子,大家可以去github上找找7 _ I X% p2 z- H- U) x. s' [4 n
五、Python有哪些好的学习资源?- g9 |' I, X* k9 I9 P! e2 Y
, [& x1 V" C3 c8 E7 R
python的自学书籍非常多,涉及基础入门、web开发、机器学习、数据科学、自动化测试、量化交易等各个门类,新手很容易陷入到处是书却无书可看的局面。
# U" }. {1 L! b! _, }所以我们要明白自己学习python出于什么目的,处于哪个阶段,再选择合适的书看。+ r4 ?9 j3 Q- k0 n
Python入门书(适合初学者)
! S) H9 _3 l/ ?- G0 E《Python编程,从入门到实践》
! f' H) C$ Q( F9 V1 e( D. ^3 J& l+ K- \; s# a# C/ B# u: |
4 x9 ] f H0 B8 L这应该是世界上最畅销的Python编程书,没有之一。英文名叫作《Python crash course》,作者Eric Matthes是一名高中老师,正是有着丰富的教学经验才会写出这样深得人心的书。 h/ x7 W/ W$ o% ?
该书的特点是一半基础(语法知识),一半游戏(案例练习),所谓寓教于乐,通过案例练习的方式巩固基础知识。这里的练习和高中数学枯燥的课后练习可不一样,作者把代码放到一个个场景里,学习者在写个小游戏的过程中就把语法掌握了。
# I# Y% |0 R, h& ^ R' x看了本书的目录,基本把python的核心语法都讲到了,学完之后可以搞点小事情,比如数据分析、可视化编程、web开发等。& n. T# z+ d2 F& H
《Python学习手册》3 L9 h$ w: v' _0 f
8 A" R; n7 r) o0 N( ]* E
& T( E5 c# k# v- P$ F这是一本老少咸宜,高手与小白都可以看的一本书,英文名叫作《Learning Python》,作者Mark Lutz是一位Python培训讲师,也是Python社区的元老级贡献者。可想而知该书是一本百科全书式的python宝典。
4 t1 Z; @. O( F/ f2 b, S) n该书已经出到第五版,对语法的讲解非常详细,而且有丰富的插图和示例代码。详细有时候意味着啰嗦,很多人觉得作者过于琐碎,但其实不太明白作者的用心良苦,想要学好python还真得细细琢磨语法。
5 O; j7 B2 M+ s1 z# l% R2 |4 a当然语法书需要配合大量的练习,切忌盲目啃书,敲代码才会理解更深。
7 F6 b I- ^" f1 F- a+ @" H本书的主要内容包括:python百科小常识、python历史、命令行、IDE、python语法基础、python模块、大量的练习。2 s- F8 e8 K4 |! k$ _. W! M
如果你真心想做一位python开发,该书是不错的起点。
2 U# ], t# w' V《笨方法学Python》6 l3 ^$ f( T4 `) p2 L# H
4 d9 U; u: z# n3 z/ a8 l; s
& \ o/ g5 D! j这本书体现的是一种学习python的思维,不对,应该是学习任何一种编程语言的方法论。作者鼓励的是practice、practice、practice,这或许真的是学习编程的唯一捷径。
; V! o( T- ]9 {8 y4 C7 b9 z书里面一步步引导初学者从下载软件开始,到安装、配置,写出第一个hello world,最后实现一款有用的小软件或者有趣的小游戏,最终学会并喜欢上python。/ R) x" r& F$ f, d; C
我也是看这本书入门python的,捧着它敲了一个月的代码。/ B! A7 d/ M9 y4 W3 ~* o
给大家看看作者的自述,很有意思:9 w1 D) ^) B* y, b
9 Z- v a, p' a M* i
, J |$ A: Z" R" _
* Q9 q1 s T) X& O, p# dPython进阶书(适合有基础的)
, n2 }" ~1 e& y+ b8 A: U: B6 a《流畅的python》& N' e( ^7 p2 V0 N, s" r
7 r" A: ~" B. m3 ~ ?
5 Q1 @* s( e2 f9 z
豆瓣9.4分!这本书不是通俗意义上的python语法书,而是教你写出更简洁、更规范、更聪明的python代码。2 g7 j9 T3 ]8 n* b" r2 T
内容方面深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。作者Luciano Ramalho是一个几十年的骨灰级python程序员,既做开发,也教编程课。
7 U \9 h: S$ N, n5 K) p* O! ~* t& G7 \& y/ c6 u! ?- u
* D4 R! @% p B4 L# ^
% ?+ v: {1 p6 u( Q1 m# X$ J J. ~. e《Effective Python:编写高质量Python代码的59个有效方法》
1 R$ ^; ~3 S8 }" p8 s* v/ y2 W4 I E b9 |; w, A/ P9 e
. r. D: E: _; J) Q2 |$ K+ w
这本书讲的并不是Python基础编程,而是Python的规范和技巧,也就是pythonic。# K1 C& t5 T: m) t, @4 A
pythonic简单的翻译就是python风格。pythonic code,就是说写代码要带有浓厚的python规范和python风格。而Python的代码样式规范称之为PEP 8规范,往大了说,遵守PEP 8是成为一个优秀python程序员的必备条件。
8 v% l* l6 q2 t' j( ^书中有59个Python编程的技巧和捷径,并用真实代码示例进行了解释。当然阅读起来会有些门槛,适合那些有基础的童鞋。/ l1 h' H+ X5 `: s. M
1 _7 S, p* [. v* O+ K
2 S }8 c' R- G; ?, P2 h$ V9 ]3 u* H
, S. p; E8 W* l/ t7 `" X, r
《Python Cookbook》" ?" Y/ O7 v. m2 K/ b# k% @
) d, Y% U. \9 X% A5 u
: Y# l" Q8 m4 C6 W+ x
cookbook系列一向是精品,python这本也不例外,适合有基础的朋友看,里面讲了很多python编程的奇技淫巧,对资深开发者来说也是可以长读的。/ }3 D2 p- V r$ ] I
该书介绍了Python应用在各个领域中的很多使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字、日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试、调试以及异常,C语言扩展等。
# e; k" j8 {/ c5 u数据分析与挖掘
, O5 O! D' m5 b《利用Python进行数据分析(原书第2版)》+ Z/ z, `7 V( E3 X* q# q
& `# p; I4 X2 M5 u8 \
7 b G" _& M0 x6 H7 _" Q. ^/ j
本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。, S. G5 X9 V2 n
第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例,可以帮助你高效解决一系列数据分析问题。7 ^8 g6 ?1 u @# _2 m: B9 g1 i
第2版中的主要更新包括:$ R5 r7 @2 l( C2 p A$ X9 F" f
1、所有的代码,包括把Python的教程更新到了Python 3.6版本(第1版中使用的是Python 2.7)
& E4 n/ x: ]# T% H2、更新了Python第三方发布版Anaconda和其他所需Python包的安装指引
5 n: Y! j7 F7 P8 x0 I9 A3、更新pandas库到2017年的新版
, D$ [' H( r, {4、新增一章,关于更多高级pandas工具和一些使用提示, E3 y. p- P, W$ B4 o7 C
5、新增statsmodels和scikit-learn的简明使用介绍, n7 l% J8 I0 D% W, G+ _
《Python数据科学手册(图灵出品)》
5 A4 y6 N; |' v' G% i% L4 E. r' b. s: d5 Q7 z& j
9 c5 }( ^/ _+ W' V) V' G& Z" R! v- e
《Python数据科学手册》是对以数据深度需求为中心的科学、研究以及针对计算和统计方法的参考书。
/ ~) z% U) }$ ^7 q z本书共五章,每章介绍一到两个Python数据科学中的重点工具包。首先从IPython和Jupyter开始,它们提供了数据科学家需要的计算环境;
1 l/ ]3 M/ a% k第 2章讲解能提供ndarray对象的NumPy,它可以用Python高效地存储和操作大型数组;
3 y0 A) Q, ?9 b2 G8 E8 r; m第3章主要涉及提供DataFrame对象的Pandas,它可以用Python高效地存储和操作带标签的/列式数据;; O+ l5 A0 \/ Y
第4章的主角是Matplotlib,它为Python提供了许多数据可视化功能;第5章以Scikit-Learn为主,这个程序库为重要的机器学习算法提供了高效整洁的Python版实现。( n/ P% V% I2 Q7 T7 C
《Python数据科学手册》适合有编程背景,并打算将开源Python工具用作分析、操作、可视化以及学习数据的数据科学研究人员。
2 c/ |% c0 J& @- I: t% [- X g《Python数据分析与挖掘实战》& G! Y0 l0 w+ e. ]
; z0 _0 H5 \( f) a5 ]# _
" s6 n. C: e% [$ s: g" M
本书共15章,分两个部分:基础篇、实战篇。' e, \$ O4 \1 v6 @/ ]+ {& t
基础篇介绍了数据挖掘的基本原理,实战篇介绍了一个个真实案例,通过对案例深入浅出的剖析,使读者在不知不觉中通过案例实践获得数据挖掘项目经验,同时快速领悟看似难懂的数据挖掘理论。读者在阅读过程中,应充分利用随书配套的案例建模数据,借助相关的数据挖掘建模工具,通过上机实验,以快速理解相关知识与理论。 1 T O, Q& [% h! m" Q7 p" l
基础篇(第1~5章),第1章的主要内容是数据挖掘概述;第2章对本书所用到的数据挖掘建模工具Python语言进行了简明扼要的说明;第3章、第4章、第5章对数据挖掘的建模过程,包括数据探索、数据预处理及挖掘建模的常用算法与原理进行了介绍。
& m5 V9 O: N( Z3 u3 F实战篇(第6~15章),重点对数据挖掘技术在电力、航空、医疗、互联网、生产制造以及公共服务等行业的应用进行了分析。在案例结构组织上,本书是按照先介绍案例背景与挖掘目标,再阐述分析方法与过程,最后完成模型构建的顺序进行的,在建模过程的关键环节,穿插程序实现代码。最后通过上机实践,加深读者对数据挖掘技术在案例应用中的理解。
2 u9 l! S) w# T- v- APython爬虫0 a1 D3 u$ \, w7 ]% W
《Python网络爬虫权威指南 第2版(图灵出品)》# v( F- ^ m, |" E3 F
$ o7 c d5 ~- l$ Y# }& {
" R# P& U: n/ k- N) O U
本书采用简洁强大的Python 语言,介绍了网页抓取,并为抓取新式网络中的各种数据类型提供了全面的指导。
1 H. b3 T1 K4 ?' p( N+ U- ^第一部分重点介绍网页抓取的基本原理:如何用Python 从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。
0 K4 C% L4 N7 {$ X `& X第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。; N2 R3 \. y. d7 Q H
《Python 3网络爬虫开发实战(图灵出品)》
8 @+ K" ]/ k Q( J! ?; Y! `0 S
' |8 L; h' t: B4 W1 t本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,最后介绍了pyspider框架、Scrapy框架和分布式爬虫。
7 J8 ]; k) k) v8 \ u2 J3 k算法和机器学习+ a/ a- Z3 u8 r2 Q- M! [2 F9 r
《数据结构与算法:Python语言实现》
- {& t5 M2 S# |* K' Q& |
' Q* |5 D0 [) l+ g
+ q5 ~7 a0 i7 o" t- t8 ~本书采用Python语言介绍数据结构和算法,包括其设计、分析和实施。本书源代码简洁、明确,面向对象的观点贯穿始终,通过继承大限度地提高代码重用,同时彰显不同抽象数据类型和算法之间的异同。! d0 W Y( g" r9 p: {2 @! m
《机器学习实战(图灵出品)》
3 Z' q: G' n/ h' ^& y; E: }/ E# k
N% x+ K/ `/ k1 a# J' g
& v# D: S4 P2 K6 S' I% P8 e2 J$ D
《机器学习实战》主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaBoost集成方法、基于树的回归算法和分类回归树(CART)算法等。
! V5 L2 F* ]9 z4 Q: q' j% [第三部分则重点介绍无监督学习及其一些主要算法:k均值聚类算法、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。
- A3 P" b) Q* a+ ?, h C《机器学习实战》通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。 |