精品课 - Python 基础
个人简历
王圣元 (FRM, CAIA)
新加坡某金融咨询公司总监
新加坡国立大学金融数学硕士
新加坡国立大学量化金融学士
《快乐机器学习》的作者
《Python - 金工, 机学, 可视化》(已完成)
《金融工程 - 从入门到入迷》(正在写)
1
为什么要上你的课?
市面上的课程推广文章通常会吹嘘一番 Python,再贩卖一波焦虑,让你买课,但我不会,我更喜欢无套路实打实的推广。
不过有人还是会问:
Python 基础知识就那么少
市面免费或低价的课那么多
为什么还要付费上你的课?
原因就在于我按下面四点讲课(看过我文章的朋友也应该知道我喜欢这样写文章):
体系化,故事化,可视化,抽象化
体系化(systematize)可以把握全局
故事化(dramatize)可以引人入迷
可视化(visualize)可以增强记忆
抽象化(generalize)可以认清本质
下节我就结合「学习 Python 基础知识」来详细而具体地介绍这四点。
2
上这门课能学到什么?
表面上看,上这 Python 课能学到的肯定是 Python,但是学到「体系化、故事化、可视化、抽象化任何知识的这种能力」会更加重要。
体系化
将零碎的知识点体系化真的很重要,我就把这门课的所有要点都放在一张思维脑图(是体系化知识的好工具)里了。
整个 Python 基础内容我把它结构化为六点:
编程概论
数据
流程
函数
对象和类
高级特征
从下面动图可看出每个点的更多细节。
按上面这种方式划分构建一个体系是有原因的:
编程概论:学习任何一种编程语言,我们都需要了解一些概论。类比计算机语言和人类语言,学习语言首先要了解其词汇和语法,再开始讲故事。
词汇包括保留字(keyword)和变量名(variable name)
语法包括缩进、冒号等等
故事可由三种方式来演绎,按顺序讲;按条件讲;重复讲
了解完概论就可以了解所有编程语言中最重要的一环,数据。
数据:数据的重要性不需要多讲,在 Python 中数据可分两大类:
元素型:整数、浮点、布尔、None
容器型:字符串、元组、列表、字典、集合
数据会被命名成变量,变量(词)之间会发现联系(句子),当你试着「用词造句讲故事」的时候,你实际创建了一个流程,而流程需要控制。
流程:类比三种演绎故事的形式,代码也可以按顺序写、按条件写(if)、重复写(while, for),这些都叫做流程控制,当然在运行不出错的时候。如果出错了需要异常处理(try, except)。因此流程控制可细分
按顺序:一句一句写
按条件:用 if 语句
按重复:
用 for 循环 - 当循环次数事先知道
用 while 循环 - 当循环次数事先不知道
要纠正:用 try, except, else, finally 语句
当你想重复使用一组语句时,你需要考虑函数。
函数:Python 定义函数有两种方式:
用 def 定义普通函数
用 lambda 定义匿名函数
Python 把函数当成「一等公民」,即可把函数当成变量使用,进而可以定义高阶函数(普通函数和匿名函数都属于低阶函数):
把函数当成输入参数
把函数当成输出结果
介绍完数据和函数后,我们可得出
如果只处理数据,将其存储在列表,字典或其他数据中
如果只处理行为,而没有存储数据,则使用函数更合适
如果同时要处理到数据和行为呢?考虑对象和类。
对象和类:对象是既具有数据又具有行为的实例,而类是对象的描述。变量和函数是零散的,而对象将它们集合起来,
在对象里也有变量,用来存储数据,这时变量又称字段(fields)
在对象里也有函数,用来操作数据,这时函数又称方法(methods)
字段和方法统称为类的属性(attributes)。
基于对象编程叫做「面向对象编程」,里面的知识点包括:实例变量、类变量、实例方法、类方法、静态方法、继承、多态、魔法方法、属性装饰器等。
高级特征:这是都是些锦上添花的东西,包括格式化字符串、正则表达式、解析表达式、生成器、迭代器和装饰器等等。
现在我已经把整套课的体系建出来了,当然每个知识点还有很多细节要去深挖。学习一个新事物时,我痴迷于去体系化其要点,去对比和类比其性质、这样知识点会越来越明晰。
体系化可以把握全局
故事化
故事总是比代码更能让人感兴趣,尤其以 Python 的难点「装饰器」为例,如果一上来就给装饰器的代码 @decorate_function,没有多少人能坚持学下去的。但是如果将它赋予故事呢?
故事开始
斯蒂文是个厨师,有一天开始研究汉堡 (burger) 的做法,第一次他只用鸡肉饼做汉堡。
def meat(food='--鸡肉饼--'):print(food)burger = meat
burger()
--鸡肉饼--
很明显汉堡都是肉,太荤了。加点蔬菜如何?
def vegetable(func):def wrapper():print(' ~西红柿~')func()print(' ~沙拉菜~')
burger = vegetable(meat)
burger()
~西红柿~
--鸡肉饼--~沙拉菜~
现在汉堡看起来不错,可是好像看缺少了什么?对,再加点面包就好了。
def bread(func):def wrapper():print('</------\>')func()print('<\------/>')return wrapperburger = bread(vegetable(meat))
burger()
</------\>~西红柿~
--鸡肉饼--~沙拉菜~
<\------/>
现在看上去真像汉堡,面包夹着蔬菜,蔬菜夹着肉。
故事结束
面包和蔬菜「装饰」着鸡肉饼,bread() 和 vegatable() 这两个函数起着「装饰器」的作用,它们没有改变 meat() 函数,只在它的基础上添砖加瓦,最后把鸡肉饼装饰成汉堡。
我相信即便你在还不太懂 Python 函数的情况,也能大概了解装饰器的作用了。
除了故事化,我在讲难点时喜欢把所有需要的知识点过一遍。比如装饰器涉及到函数的各种用法,我会在讲装饰器前,揉碎了讲下面几个知识点:
把函数赋值给变量
在函数里定义函数
在函数里返回函数
把函数传递给函数
这样你们学起来会很轻松,但对我而言就要下很大功夫,但是我愿意。
故事化可以引人入迷
可视化
一图胜千言,人是感官动物,从图表中接收的信息绝对比从文字快。
在学习高阶函数 map, filter, reduce 的时候,绝大教材都会直接上代码这样举例:
lst = [1, 2, 3, 4, 5]
map_iter = map( lambda x: x**2, lst )
list(map_iter)
[1, 4, 9, 16, 25]
f_iter = filter( lambda x: x%2==1, lst )
list(f_iter)
[1, 3, 5]
from functools import reduce
reduce( lambda x,y: x+y, lst )
15
虽然可以看懂,但是总觉得不直观。再看看我是如何来「可视化」这三个函数的。
我们看着 Emoji,很自然的就能读懂
将 cook 函数映射(map)到牛、土豆、鸡和玉米上,就能做出汉堡、薯条、鸡腿和爆米花。原来 map 函数是把它第一个参数(函数)作用到它第二个参数(容器型数据)上啊。
用 ismeat 函数来判断牛、土豆、鸡和玉米是不是肉,得出汉堡和鸡腿是肉,因此将它们过滤(filter)出来。原来 filter 函数是把它第一个参数(函数)作用到它第二个参数(容器型数据)上,然后过滤出返回为真的数据。
将 eat 函数压缩(reduce)牛、土豆、鸡和玉米成排泄物,因此 reduce 函数是用第一个参数(函数)作用到它第二个参数(容器型数据)上,得到一个元素型数据。
这样是不是秒懂 map, filter 和 reduce 了?
再举一个我最喜欢的例子,「可视化」列表解析式。
你可以把「带 if 的 for 循环」到「解析式」的过程想像成一个「复制-粘贴」的过程:
将「for 循环」的新列表复制到「解析式」里
将 append 里面的表达式 n 复制到新列表里
复制循环语句 for n in lst 到新列表里,不要最后的冒号
复制条件语句 if n%2 == 1 到新列表里,不要最后的冒号
通过这样的可视化过程,你发现列表解析式原来这么简单直观啊。
可视化可以增强记忆
抽象化
从具体问题能抽出本质是一种很重要的能力,人一旦会举一反三才算会学习。
以格式化字符串举例,一般有四种方法:
用 % 字符
用 $ 字符
用 format 函数
用 f-string
如果光看例子,那真是千奇百怪,但透过例子看本质,每种方法都有通用的语法格式,如下图总结。
记住那么多特例是不可能的,但记住这四种通式是可行的。
抽象化可以认清本质
3
怎么上这门课?
通过微信付费阅读形式,每篇文章就是一节课,包含视频、PDF 课件、和 Jupyter Notebook 代码。
课程复盘请点击这里
课程介绍请点击这里
基础版的 11 节的目录
编程概览
元素型数据
容器型数据
流程控制:条件-循环-异常处理
函数上:低阶函数
函数下:高阶函数
类和对象:封装-继承-多态-组合
字符串专场:格式化和正则化
解析表达式:简约也简单
生成器和迭代器:简约不简单
装饰器:高端不简单
精品课 - Python 基础相关推荐
- f是一个python内部变量类型,Python基础变量类型——List浅析
Python使用list 一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 ...
- python 等号报错_Python学习----Python基础
Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...
- Python学习笔记1 Python基础
第1章 Python基础 1.1 Python概述及版本介绍 1.Python是一种面向对象的解释型计算机程序设计语言(解释型语言源代码->解释器逐行解释每一句源代码) 2.优点:高级语言.可移 ...
- python基础---元组、字典、函数、文件、异常
文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...
- 快速掌握Python的捷径-Python基础前传(1)
文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事. 方丈高楼平地起,无 ...
- Python培训教程之Python基础知识点梳理
Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...
- python基础04
python基础04 python2在编译安装时,可以通过参数 -----enable----unicode=ucs2 或 -----enable--unicode=ucs4 分别用于指定使用2个字节 ...
- 刻意练习:Python基础 -- Task12. 模块
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
最新文章
- 项目管理心得——你为啥会觉得自己很忙?
- 影响数据库性能的因素
- 做方差分析需要正态性检验吗_检验工序要做PFMEA吗?检验如何做PFMEA?
- mysql表打包到程序中_C#/winform程序打包布署 如何把SQL 数据库 一起打包进去?
- android通过用户名密码访问服务器获取信息_MySQL ------ 管理用户对数据库的访问控制(GRANT 与 REVOKE)(二十九)...
- 简化工作——我的bat文件
- 信息学奥赛一本通 1258:【例9.2】数字金字塔
- 信息学奥赛C++语言:移数问题
- CentOS 7服务器上使用Nginx+phpMyAdmin
- IO口模拟SPI总线问题
- 软件测试(四)——正交实验法、功能图法、其他测试用例设计方法等
- 高通SDM439平台使能sensor hub的auto detect模式
- 解决Intel Edison 已连接Wifi但无法上网问题
- DTI脑网络构建 详细介绍处理过程以及PANDA的使用
- 3842脉宽调制芯片原理
- Flak 自定义URL转换器
- The supplied data appears to be in the Office 2007+ XML问题解决
- iPhone12、iPhone12 Pro、iPhone12 Max、iPhone12 Pro Max是双卡双待吗
- distinct (去重)
- 02 ,seaborn 调色板 : 指定颜色,颜色数量,连续颜色,线性渐变