个人简历

王圣元 (FRM, CAIA)

新加坡某金融咨询公司总监

新加坡国立大学金融数学硕士

新加坡国立大学量化金融学士

快乐机器学习》的作者

Python - 金工, 机学, 可视化》(已完成)

金融工程 - 从入门到入迷》(正在写)

1

为什么要上你的课?

市面上的课程推广文章通常会吹嘘一番 Python,再贩卖一波焦虑,让你买课,但我不会,我更喜欢无套路实打实的推广。

不过有人还是会问:

  1. Python 基础知识就那么少

  2. 市面免费或低价的课那么多

为什么还要付费上你的课?

原因就在于我按下面四点讲课(看过我文章的朋友也应该知道我喜欢这样写文章):

体系化,故事化,可视化,抽象化

  • 体系化(systematize)可以把握全局

  • 故事化(dramatize)可以引人入迷

  • 可视化(visualize)可以增强记忆

  • 抽象化(generalize)可以认清本质

下节我就结合「学习 Python 基础知识」来详细而具体地介绍这四点。

2

上这门课能学到什么?

表面上看,上这 Python 课能学到的肯定是 Python,但是学到「体系化、故事化、可视化、抽象化任何知识的这种能力」会更加重要。

体系化

将零碎的知识点体系化真的很重要,我就把这门课的所有要点都放在一张思维脑图(是体系化知识的好工具)里了。

整个 Python 基础内容我把它结构化为六点:

  1. 编程概论

  2. 数据

  3. 流程

  4. 函数

  5. 对象和类

  6. 高级特征

从下面动图可看出每个点的更多细节。

按上面这种方式划分构建一个体系是有原因的:

编程概论:学习任何一种编程语言,我们都需要了解一些概论。类比计算机语言和人类语言,学习语言首先要了解其词汇语法,再开始讲故事

  • 词汇包括保留字(keyword)和变量名(variable name)

  • 语法包括缩进、冒号等等

  • 故事可由三种方式来演绎,按顺序讲;按条件讲;重复讲

了解完概论就可以了解所有编程语言中最重要的一环,数据


数据:数据的重要性不需要多讲,在 Python 中数据可分两大类:

  • 元素型:整数、浮点、布尔、None

  • 容器型:字符串、元组、列表、字典、集合

数据会被命名成变量,变量(词)之间会发现联系(句子),当你试着「用词造句讲故事」的时候,你实际创建了一个流程,而流程需要控制。


流程类比三种演绎故事的形式,代码也可以按顺序写、按条件写(if)、重复写(while, for),这些都叫做流程控制,当然在运行不出错的时候。如果出错了需要异常处理(try, except)。因此流程控制可细分

  • 按顺序:一句一句写

  • 按条件:用 if 语句

  • 按重复

    • 用 for 循环 - 当循环次数事先知道

    • 用 while 循环 - 当循环次数事先不知道

  • 要纠正:用 try, except, else, finally 语句

当你想重复使用一组语句时,你需要考虑函数


函数:Python 定义函数有两种方式:

  1. 用 def 定义普通函数

  2. 用 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 函数的情况,也能大概了解装饰器的作用了。

除了故事化,我在讲难点时喜欢把所有需要的知识点过一遍。比如装饰器涉及到函数的各种用法,我会在讲装饰器前,揉碎了讲下面几个知识点:

  1. 把函数赋值给变量

  2. 在函数里定义函数

  3. 在函数里返回函数

  4. 把函数传递给函数

这样你们学起来会很轻松,但对我而言就要下很大功夫,但是我愿意。

故事化可以引人入迷

可视化

一图胜千言,人是感官动物,从图表中接收的信息绝对比从文字快。

在学习高阶函数 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 循环」到「解析式」的过程想像成一个「复制-粘贴」的过程:

  1. 将「for 循环」的新列表复制到「解析式」里

  2. 将 append 里面的表达式 n 复制到新列表

  3. 复制循环语句 for n in lst 到新列表里,不要最后的冒号

  4. 复制条件语句 if n%2 == 1 到新列表里,不要最后的冒号

通过这样的可视化过程,你发现列表解析式原来这么简单直观啊。

可视化可以增强记忆

抽象化

从具体问题能抽出本质是一种很重要的能力,人一旦会举一反三才算会学习。

以格式化字符串举例,一般有四种方法:

  1. 用 % 字符

  2. 用 $ 字符

  3. 用 format 函数

  4. 用 f-string

如果光看例子,那真是千奇百怪,但透过例子看本质,每种方法都有通用的语法格式,如下图总结。

记住那么多特例是不可能的,但记住这四种通式是可行的。

抽象化可以认清本质

3

怎么上这门课?

通过微信付费阅读形式,每篇文章就是一节课,包含视频、PDF 课件、和 Jupyter Notebook 代码。

课程复盘请点击这里

课程介绍请点击这里

基础版的 11 节的目录

  1. 编程概览

  2. 元素型数据

  3. 容器型数据

  4. 流程控制:条件-循环-异常处理

  5. 函数上:低阶函数

  6. 函数下:高阶函数

  7. 类和对象:封装-继承-多态-组合

  8. 字符串专场:格式化和正则化

  9. 解析表达式:简约也简单

  10. 生成器和迭代器:简约不简单

  11. 装饰器:高端不简单

精品课 - Python 基础相关推荐

  1. f是一个python内部变量类型,Python基础变量类型——List浅析

    Python使用list 一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 ...

  2. python 等号报错_Python学习----Python基础

    Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...

  3. python基础——继承与派生、组合

    python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...

  4. Python学习笔记1 Python基础

    第1章 Python基础 1.1 Python概述及版本介绍 1.Python是一种面向对象的解释型计算机程序设计语言(解释型语言源代码->解释器逐行解释每一句源代码) 2.优点:高级语言.可移 ...

  5. python基础---元组、字典、函数、文件、异常

    文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...

  6. 快速掌握Python的捷径-Python基础前传(1)

    文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事.  方丈高楼平地起,无 ...

  7. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  8. python基础04

    python基础04 python2在编译安装时,可以通过参数 -----enable----unicode=ucs2 或 -----enable--unicode=ucs4 分别用于指定使用2个字节 ...

  9. 刻意练习:Python基础 -- Task12. 模块

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

最新文章

  1. 项目管理心得——你为啥会觉得自己很忙?
  2. 影响数据库性能的因素
  3. 做方差分析需要正态性检验吗_检验工序要做PFMEA吗?检验如何做PFMEA?
  4. mysql表打包到程序中_C#/winform程序打包布署 如何把SQL 数据库 一起打包进去?
  5. android通过用户名密码访问服务器获取信息_MySQL ------ 管理用户对数据库的访问控制(GRANT 与 REVOKE)(二十九)...
  6. 简化工作——我的bat文件
  7. 信息学奥赛一本通 1258:【例9.2】数字金字塔
  8. 信息学奥赛C++语言:移数问题
  9. CentOS 7服务器上使用Nginx+phpMyAdmin
  10. IO口模拟SPI总线问题
  11. 软件测试(四)——正交实验法、功能图法、其他测试用例设计方法等
  12. 高通SDM439平台使能sensor hub的auto detect模式
  13. 解决Intel Edison 已连接Wifi但无法上网问题
  14. DTI脑网络构建 详细介绍处理过程以及PANDA的使用
  15. 3842脉宽调制芯片原理
  16. Flak 自定义URL转换器
  17. The supplied data appears to be in the Office 2007+ XML问题解决
  18. iPhone12、iPhone12 Pro、iPhone12 Max、iPhone12 Pro Max是双卡双待吗
  19. distinct (去重)
  20. 02 ,seaborn 调色板 : 指定颜色,颜色数量,连续颜色,线性渐变

热门文章

  1. 计算机科学职业位置,计算机专业的职业生涯规划范文
  2. 高级计算机职称论文自述,教师评职称自述
  3. 数据库多维度order by 排序分析
  4. PHP实现简易的MVC框架
  5. Beatbox brilliance—TED Record
  6. 对比分析OSG与Cesium中模型LOD的异同
  7. 畅购商城canal依赖(超级简单,不会你来kan我!!)
  8. 1163: [Baltic2008]Mafia
  9. [换根] Accumulation Degree
  10. 墨水屏(电子纸)刷新模式