专栏首页王的机器精品课 - 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 wrapper
    
burger = 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

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

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

本文分享自微信公众号 - 王的机器(MeanMachine1031),作者:王圣元

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 精品课 - Python 数据分析

    有个人可能会问 NumPy-Pandas-SciPy 不都是免费资源吗,为什么还要花钱来上课?没错,我也是参考了大量书籍、优质博客和付费课程中汲取众多精华,才打...

    用户5753894
  • 机器学习专家系列精品课程零基础到精通(全套)

    百度搜索“一起自学吧”做大数据专家,不做第一,只做唯一。

    人工智能的秘密
  • 年薪20万Python工程师进阶(2):Python 资源 + 经典练手项目

    Python 越来越火爆,最近自己也在学习。整理下一些 Python 资料,和练手的项目。希望对你学习 Python 有所帮助。

    Python之道
  • Python 这么热,如何追赶 Python 的热潮?

    在小编看来,基本上可以不负责任地认为,Python 可以做任何事情。无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发、桌面程序开发还是科学计算、...

    一墨编程学习
  • 开源 | 深度有趣 - 人工智能实战项目合集

    理论部分 已经有很多神级大佬的工作,例如吴恩达老师的深度学习微专业课,所以不在这块花重复力气。

    张宏伦
  • 2 个月如何从小白到 Python 高手,牛津大学博士带你飞!

    Python 可以做任何事情。无论是从入门级选手到专业级数据挖掘、科学计算、图像处理、人工智能,Python 都可以胜任。或许是因为这种万能属性,周围好更多的小...

    小莹莹
  • 【学习】Python大数据学习路线图

    大家好,附图,为python大数据学习的一个提纲,相关的书本,会慢慢补充进来。 碍于版权问题,有些书本,请大家到网上去购买正版。 ? 1、Python学...

    小莹莹
  • 一大波编程视频资料赠送(亲自整理)

    编程软文
  • Python数据分析与挖掘学习路线图

    语言的学习,真正掌握语言的方式,是交流与实践,所以,这三本书,是由浅入深的步骤。大家在学习过程中,可以到群里面去进行交流沟通。

    IT派
  • 原创 | 吐血推荐,B站最强学习资源汇总(数据科学,机器学习,python)

    经过这几个月的居家隔离,想必大多数同学都开始习惯通过线上的方式开展学习了,在线教育领域也因此迎来了一波爆发,竞争异常激烈,既有知名平台如MOOC、学堂在线、网易...

    数据派THU
  • 手持 Python 利剑,一路向前

    学习 Python 课程究竟有什么用?Python 课程学员假牙运用课程所学,在工作中设置自动化检验脚本,为团队排除 bug 规避风险。「最难受的时候再坚持一下...

    企鹅号小编
  • Python-GUI编程-PyQt5

    所以, GUI编程 不管是在实际开发工作中 还是在个人工具的开发中 都是必备之良品, 极为重要!

    py3study
  • 【转】全国高校 Python 数据分析与实训课程高级研修班通知

    依据《教育部高等学校教学指导委员会章程》规定,教育部高等学校教学指导委员会的任务之一是:组织师资培训,沟通信息,交流教学建设和教学改革经验,宣传推广优秀教学成果...

    SIGAI学习与实践平台
  • 前端,Java,产品经理,微信小程序,Python等资源合集大放送

    王小婷
  • 腾讯青少年科技学院:助力青少年不一样的“战疫”假期

    ? 2020年的寒假,对于全国各地的中小学生来说注定是个不平凡的假期。 在这个特殊的寒假,腾讯青少年科技学院秉持着用科技助力K12教育的初心,在腾讯公司科技向...

    鹅老师
  • 如何以Python为工具走入数据科学之门

    本次分享第【1】部分:什么是数据科学。 本次分享第【2】部分:如何从小白成长为数据科学家。 分享主题:Data Science学习分享会 分享时间:2016年4...

    叶锦鲤
  • Python语言基础50课

    目前,课程已更新到21课,通读下来,其中更详细的展开 Python 常用数据结构、分支循环、面向对象编程及函数相关的基础及应用,值得一看。配套视频链接后台回复 ...

    生信菜鸟团
  • 喜大普奔!我们python纯零基础教程更新了!

    到今天,这份面向零基础的入门教程,仅在微信内就已经有超过十万人次阅读,比很多出版书籍的销量还要高。

    Crossin先生
  • 首发:适合初学者入门人工智能的路线及资料下载

    我曾经写了一篇初学者入门的文章:《机器学习简易入门-附推荐学习资料》,这篇文章给初学者指明了学习的方向,受到广大初学者好评。

    kbsc13

扫码关注云+社区

领取腾讯云代金券