百科问答小站 logo
百科问答小站 font logo



如何系统地自学 Python? 第1页

     

user avatar   liang-zi-wei-48 网友的相关建议: 
      

最近,GitHub上一个关于Python的工程完工了。

一个名为“暮晨”的贡献者,把一个非常有趣的Python项目,翻译成了中文版。

这个项目是《What the f*ck Python!》,专门介绍 Python 里面那些奇奇怪怪的语言坑。

关于项目

项目的主体构成部分就是示例,一共分为5个部分,分别是:

Strain your brain!/大脑运动!

Appearances are deceptive!/外表是靠不住的!

Watch out for the landmines!/小心地雷!

The Hidden treasures!/隐藏的宝藏!

Miscellaneous/杂项

以上,总计51个示例。

每一个示例的结构都是一样的,以“Mutating the immutable!/强人所难”为例:

首先,会给出代码:

       some_tuple = ("A", "tuple", "with", "values") another_tuple = ([1, 2], [3, 4], [5, 6])     

然后,给出Output( Python version):

       >>> some_tuple[2] = "change this" TypeError: 'tuple' object does not support item assignment >>> another_tuple[2].append(1000) # 这里不出现错误 >>> another_tuple ([1, 2], [3, 4], [5, 6, 1000]) >>> another_tuple[2] += [99, 999] TypeError: 'tuple' object does not support item assignment >>> another_tuple ([1, 2], [3, 4], [5, 6, 1000, 99, 999])     

然后,对意外输出的结果进行简短的描述,在这个示例中,就是:

我还以为元组是不可变的呢…

接下来,就会对示例进行说明,简要叙述发生了什么以及为什么会发生。如有必要, 也会举例说明。

在这个示例中是这样的:

不可变序列 不可变序列的对象一旦创建就不能再改变。(如果对象包含对其他对象的引用,则这些其他对象可能是可变的并且可能会被修改; 但是,由不可变对象直接引用的对象集合不能更改。)
  • += 操作符在原地修改了列表. 元素赋值操作并不工作, 但是当异常抛出时, 元素已经在原地被修改了。

有些地方,贡献者还会给出译注,比如整个示例中就是:

对于不可变对象, 这里指tuple, +=并不是原子操作, 而是extend和=两个动作, 这里=操作虽然会抛出异常, 但 extend 操作已经修改成功了。

其他还有50个示例,等你来看~

怎么使用?

当然,要学习一下怎么使用这个资源。项目贡献者在用法部分表示,最好依次阅读下面的示例。

然后,在阅读每一个示例的时候,这样做:

仔细阅读设置例子最开始的代码。
阅读输出结果。
确认结果是否如你所料。
确认你是否知道这背后的原理。
如果不知道, 深呼吸然后阅读说明 (如果你还是看不明白, 别沉默!可以提问题)。
如果知道, 给自己点奖励, 然后去看下一个示例。

此外,还可以在命令行阅读 WTFpython,有 pypi 包 和 npm 包(支持代码高亮),不过都是英文版的。

关于作者

这个项目的原作者,是一个名为Satwik Kansal的印度小哥。

GitHub上的介绍称,在深度学习和去中心化应用方面是一个“老司机”。

目前,英文版资源,标星已经8.3k了。

传送门

中文版:
github.com/leisurelicht

英文原版:
github.com/satwikkansal


- 完 -
最后,了解更多前沿科技,请关注我们的知乎号:


user avatar   qi-di-yun-49 网友的相关建议: 
      

在别的地方看到大神总结,供参考。

热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目。我们进行了翻译,在此一并送上。

这份清单中包括了各不相同的 20 个主题,以及一些资深程序员分享使用 Python 的经验,值得收藏。Mybridge AI 的排名结合了内部机器评估的内容质量和各种人为因素,包括阅读次数和阅读时长等。


对于 Python 的初学者,我们推荐以下这些课程:

REST API:使用 Python,Flask,Flask-RESTful 和 Flask-SQLAlchemy 构建专业的 REST API [12,602 个推荐,4.6 / 5 星]

链接:udemy.com/rest-api-flas

算法交易:用于财务分析和算法交易的 Python,主要学习包括 numpy,pandas,matplotlib,quantopian,finance [8,077 个推荐,4.6 / 5 星]

链接:udemy.com/python-for-fi

年度开源 Python 项目 [平均 4,078 星]

链接:medium.mybridge.co/30-a

机器学习年度最佳文章

链接:medium.mybridge.co/lear

Python 算法

1.回顾 Python 交互式编码中所要面对的挑战(算法和数据结构)

本文对算法编码和数据结构中的问题提出了简单易懂又切实可行的方案。

作者:Donne Martin;[github-11811 星]链接:github.com/donnemartin/

2. Python 中算法和数据结构的最小样本

如何让 Python 中的数据结构和算法最小、最干净?

作者:keon;[github-10271 星]链接:github.com/keon/algorit

3.最重要的 Python 算法--Pygorithm

Pygorithm 是一个纯 Python 风格编写的模块,通过导入所需的算法,获得相应的代码、时间复杂性等。这是一个开始学习 Python 编程的好方法,能够帮助初学者学习并实现 Python 中所有算法。

作者:Satwik Kansal;[github-3156 星]链接:pygorithm.readthedocs.io

Python 综合指南

4. 一个有趣又鲜为人知的 Python 代码片段集合—wtfPython

作者:Satwikkansal;[github-4,933 星]链接:github.com/satwikkansal

Python 的脚本结构

5.一个关于如何从 Python 脚本到打包项目的标准化指南

作者:Courtesy of Vicki链接:veekaybee.github.io/201

Python 中的列表

6.Python 列表生成器的教程

在这份教程中,你将能够学习到如何在 Python 中有效地使用列表生成器来创建列表,替换(嵌套) for 循环以及使用 map(), filter(), reduce() 函数等。

文章首先简单回顾了 Python 中列表的基本概念,并与 Python 中其他的数据结构进行比较。接着讲解了列表生成器的学习。文章还讲解了 Python 列表背后的数学知识,创建列表生成器的方法,以及如何在 for 循环或 lambda 隐函数中重写它们。

作者:Karlijn Willems链接:datacamp.com/community/

Python 中的类

7.如何使用 Dunder (Magic、Special) 方法来丰富你的 Python 类

Dunker 是 Python 中的一种特殊方法,通过双下划线开始和结束的形式存在,例如 __init__ 来丰富类的预定义方法。

作者:Dan Bader链接:dbader.org/blog/python-

Python 中的网页抓取

8.如何使用 Python 中的 Scrapy、SQL 和 Matplotlib 等库进行网页抓取,并获取网页数据分析

你可以通过这篇文章学习到网页爬取知识,并用于实践中。

作者:ScrapingAuthority链接:scrapingauthority.com/p

9.高级的网页抓取教程:绕过“403 禁止”,验证码等问题

作者:Evan Sangaline链接:sangaline.com/post/adva

10.掌握 Python 的网页抓取技巧来获取你所需要的数据

作者:Lauren Glass 和 Hackernoon链接:hackernoon.com/masterin

Python 中的自动化操作

11.如何使用 Twilio、Python 和 Google 自动化婚礼的进程

作者:Thomas Curtis链接:twilio.com/blog/2017/04

12.如何用 Python 在 Medium 上找到有趣的人

作者:Radu Raicea 和 freeCodeCamp。链接:medium.freecodecamp.org

Python 中的 Bot

13.制作 Reddit+Facebook 的信息箱

作者:Yasoob Khalid链接:pythontips.com/2017/04/

15.我在 Instagram 上用 Python 写的开源机器人(让我拥有了 2500 个粉丝,所花的服务器成本只有 5 美元)

作者:TimG链接:medium.freecodecamp.org

Python 中的电子表格

15.权威指南:Python 的 Excel 教程

通过这个教程,你可以了解如何使用 Python 读取和导入 Excel 文件,如何将数据写入这些电子表格。

作者:Karlijn Willems链接:datacamp.com/community/

16.Python 和 Googgle 电子表格

作者:Brent Schooley链接:youtube.com/watch?

Python 中的金融应用

17.Python 中的金融:算法交易

这是一份 Python 与金融应用的教程,在此你能学习到算法交易的基本知识及相关内容。

作者:Karlijn Willems链接:datacamp.com/community/

18.Python 中的金融教程—股票价格及相关数据介绍

作者:Harrison Kinsley链接:youtube.com/watch?

19.用 Python 分析加密货币市场

比特币市场是如何表现?加密货币价值突然出现高峰和低谷的原因是什么?不同 altcoins 市场是不可分割的或基本独立的? 我们如何预测接下来会发生什么?

这篇文章将简单地介绍如何使用 Python 来分析加密货币。文章通过一个简单的 Python 脚本来检索,分析和可视化不同加密货币上的数据。在这个过程中,文章还将揭示这些波动剧烈的市场行为以及一个有趣的演变趋势。

作者:Patrick Triest链接:blog.patricktriest.com/

Python 中的区块链

20.学习并构建一个区块链

毫无疑问,区块链这项新颖的技术是计算的奇迹。区块链技术的出现引发了新的全数字货币,如比特币和莱特币,而这些货币并非由中央当局发行或管理。区块链也以 Ethereum 这样的技术形式革命化了分布式计算,并引入了智能合约等有趣的概念。

这篇文章将会帮助你学习并理解区块链的工作原理。通过这篇教程,你将学习到一个功能强大的区块链,并掌握它们的工作流程。

作者:Daniel van Flymen 和 Hackernoon链接:hackernoon.com/learn-bl

21.如何构建一个最小的区块链

本文将用少于 50 行的代码(Python2)来创建一个最简单、最小的区块链。

作者:Gerald Nash链接:medium.com/crypto-curre

Python 中的视频合成

22.用 Python 构建一个视频合成器

视频合成器是利用音频输入来创建视觉信号的设备,自上世纪 60 年代以来,已有很长的历史。

这篇文章将用 Python 编写一个基本的视频合成器,并使用 aubio 进行 Onset 目标检测。

作者:Kirk Kaiser链接:makeartwithpython.com/b

Python 的性能

23.用 Python 处理每秒 100 万个请求

用 Python 每秒能够达到 100 万个请求吗?为了节省服务器价格,最近很多公司正在从 Python 向其他编程语言中迁移。但实际并不需要。

Python 社区最近在性能提升方面做了很多工作。CPython 3.6 通过新的字典提高了整体解释器的性能。由于引入了更快的调用约定和字典查找缓存,CPython 3.7 将会更快。

对于数字处理任务,你可以使用 PyPy 进行代码编译。你还可以运行 NumPy 的测试套件,该测试套件现在已经改进了 Python 与 C 语言扩展的整体兼容性。在随后的更新版本中,PyPy 预计将与 Python 3.5 兼容。

作者:Paweł Piotr Przeradowski。链接:medium.freecodecamp.org

24.Python 很慢,但我不在乎”

这篇文章将介绍一些关于 Python 中 asyncio 的内容,并讨论有关 Python 速度的问题。

作者:Nick Humrich链接:hackernoon.com/yes-pyth

25.Python 中的缓存:如何缓存函数的结果

文章将介绍一种快捷的方法来加速 Python 记忆代码。你将看到何时以及如何运用 Python 记忆代码。记忆代码优化你的程序,在某些情况下会加速你的代码运行。

链接:dbader.org/blog/python-

Python 中的 Django 框架

26.七步骤带你完整地学习 Django

Django 是用 Python 编写的一个 Web 框架。这篇文章是介绍 Django 基础知识的系列教程,共分为七个部分,将分别从安装,准备开发环境,模型,视图,模板,URL 到更高级的主题(如迁移,测试和部署)出发,详细探讨所有的基本概念。

作者:Vitor Freitas链接:simpleisbetterthancomplex.com

27.使用 Django 构建 REST API 的测试驱动方法:第一部分

这篇文章将介绍如何利用 Django 来构建一个 REST API 的测试驱动,并详细介绍了每个步骤。

作者:Jee Githinji Gikera 和 Scotch Development链接:scotch.io/tutorials/bui

Python 中的 Flake

28.OI’List 规则

这篇博文中我们将介绍 Flake8(pyflakes,pycodestyle 和 mccabe)中的每个规则及相对应的示例。

链接:lintlyci.github.io/Flak

29.使用 Python 和 Flask 开发 RESTful API

本文包括以下几部分:

  • 为什么用 Python?
  • 什么是 Flask?
  • 引导 Flask 应用程序
  • 用 Flask 创建一个 RESTful 端点
  • 用 Python 类映射模型
  • 用 Marshmallow 进行序列化和反序列化对象
  • Dockerizing Flask 应用程序
  • 用 Auth0 保护 Python API
作者:Bruno Krebs链接:auth0.com/blog/developi

Python 中的 Numpy

30.从 Python 到 Numpy

本文通过一种新颖的方式,向量化地集中讲解了如何从 Python 迁移到 Numpy 的学习。另外,本文还包括一些很少提到的使用技巧。

链接:labri.fr/perso/nrougier

31.探索 Python 每种工具包的行长度

本文探索了 Python 的流行包,如 NumPy,SciPy,Pandas,Scikit-Learn,Matplotlib,AstroPy 等。

作者:Jake VanderPlas链接:jakevdp.github.io/blog/

Python 中的 NashPy

32.NashPy 教程—建立并找到一种简单的游戏平衡

博弈论是用来研究理性主体之间的战略互动:当双方试图采用对各自最有益的方式来完成某件事情时,对双方互动行为的研究。这篇文章将采用 Python 中的 NashPy 来研究这种双方博弈的互动行为。

链接:nashpy.readthedocs.io/e

Python 中的马尔可夫过程

33.用 Python 模拟 Chutes 和 Ladders

这篇文章将通过 Chutes 和 Ladders 游戏的例子,建立模型并阐述马尔可夫过程的原理。整个分析过程附有 Python 源码,感兴趣的读者可以尝试一下。

作者:Jake VanderPlas链接:jakevdp.github.io/blog/

Python 中的数据分析

34.用 Python 分析美国联邦政治行为

科学、政治、个人意见和社会政策的交集可能呈现相当复杂的情况。思想和学科的交汇点通常充斥着有争议的观点和基于信仰但缺乏经验证据的议程。这时,数据科学在这方面就显得特别重要,因为它提供了一种以实际事实为基础的考察世界的方法,能够深入了解我们今天所面临的一些最重要的问题。

这篇文章我们将用 Python 来分析美国联邦政府的一些政治行为,深入了解政治背后所隐藏的故事。

作者:Patrick Triest链接:blog.patricktriest.com/

35.用 Python 分析 1000+ 的希腊葡萄酒

作者:Florents Tselai链接:tselai.com/greek-wines-

36.如何用 Python 生成 FiveThirtyEight 图

这篇文章将用 Python 的 matplotlib 和 pandas,来学习并查看 FiveThirtyEight(FTE)可视化的核心部分,并教会你使用 Python 来为自己的数据进行可视化。

作者:Josh Devlin链接:dataquest.io/blog/makin

37.使用 Apache Spark 和 Python 为 8000 万 Amazon 产品进行评价打分

作者编写了一个简单的 Python 脚本,将亚马逊产品评论数据集中的每类评分数据进行整合,并对这些 Amazon 产品评论数据进行分析打分,以发现用户的喜好。

作者:Max Woolf链接:minimaxir.com/2017/01/a

38.使用 Python 进行地理空间分析

作者:Matthew Rocklin链接:matthewrocklin.com/blog

39.星球:从太空中了解亚马逊,来自 Kaggle 头奖获奖者的采访

文章采访了 Kaggle 的“星球:从太空中了解亚马逊”竞赛的获奖者,内容包括他如何使用 11 个微调的卷积神经网络,标签关联的结构模型,以及如何避免过拟合现象等。

作者:Edwin Chen链接:blog.kaggle.com/2017/10

Python 入门

40.从零开始学习 Python

Python 的创建者 Guido van Rossum 曾说过,“Python 是一个高级编程语言,其核心设计理念是让代码具有高度的可读性和简单的语法,程序员可以用几行代码表达自己的想法。”

作者:TK链接:medium.freecodecamp.org

41.重要的 Python 练习清单

这篇文章列出了一些重要的练习项目,包括 Python 语言本身和标准库的练习。文章中还有 Python 中不同主题模块的知识。

作者:Ynon Perek链接:ynonperek.com/2017/09/2

42.API 的设计原则:先思考再编码

API 是定义应用程序接口的通用术语,换句话说,就是用户(人或机器)与程序的交互接口。在 Web 开发世界中,API 通常是一个网站,其中包含一系列端点,用于响应客户端请求和结构化文本数据。这篇文章将告诉你为什么以及如何设计一个正确的 API,如何将自己的思想植入到 API 的设计中来构建属于你自己的 API。

作者:Jonatas Baldin链接:ckl.io/blog/api-design-

43.Python 机器学习指南

本文将通过清晰地解释和有效的练习,来帮助你深度理解相关的机器学习算法。

作者:Conor Dewey链接:medium.freecodecamp.org

44.如何学习 Python 编程:6 位经验丰富的 Python 开发者分享了他们的观点

对于当下热门的 Python 语言,有太多的教程、书籍、视频和博客文章资源,然而如此多的冗余资料,你该如何选择最佳的方式开始你的 Python 学习之旅呢?这篇文章列出了 6 位 Python 专家分享的学习经验,相信这对于迷茫中的你来说,将受益匪浅。

链接:coolpythoncodes.com/bes

45.如何用 Python 实现强大的数据分析

Python 是数据分析的最佳编程语言,这得益于它自带的依赖库。依赖库能够存储,操纵数据,并从数据中获得核心信息,因而在数据科学领域被广泛使用并展现出强大的功能。本文介绍了 Python 在数据科学领域的应用历史以及最新发展。

作者:Jake VanderPlas链接:youtube.com/watch?


user avatar   mi-lu-8-81-9 网友的相关建议: 
      

0709更:

上周旁听了一个大学学长组织的线上Python交流会,里边不乏充斥着各位行业大牛,讲的内容确实精彩,可能对于Python经验5年+的人来说,是受益匪浅,欢迎程度极高,恨不得跳出屏幕来表示赞同,毕竟很多提到的问题,我在工作中也很常见,但是作为资历一般的程序员,有一些理解起来还是有些困难,评论区里同时也还有另外一种声音:

听不懂啊,还可以再细讲一些吗?
刚毕业,刚开始学Python,可以说说入门的吗?
走了走了,零基础满脸懵……
太难了,放弃Python了


我很能理解“另一种声音”,我当初也是自学Python,刚开始的时候,我连循环结构和分支结构都搞不明白谁是谁,去找有经验的人问,结果问了几回人家就烦了,所以,学习这种事,还是得靠自己。

根据我自己的经验来说,想从零开始学Python,以后也确实想找相关的工作,基本是下边这三种方式:

  • 继续上学。报个这方面的专业,学上两三年,老师就在身边,有啥不懂的问题,直接办公室走一趟,毕业的时候去找工作不成大问题;
  • 看书自学。这块可以看看我之前推荐的GitHub【Python百天之路】-骆昊,对细节把握很到位!
  • 在网上找视频课自学。你可以利用碎片时间去学,时间上会更节省,我为了苦学Python大概买了十多门课吧。

读研读博这件事时间成本比较高,我对自己没有完全的自信,所以我思考再三,还是决定踏入社会浪潮了。(但是对于学习能力强,本科也比较优秀的学生,非常建议继续读研读博,未来踏入社会起薪会非常高,我现在身边就有两个博士大神,我只能膜拜了。。。)

进入社会之后,我基本就是买书和看视频自学,这回给你们来个全方位安利:

一、网站推荐

1、Python

Python初学者的法宝,如果你想下载Python,最好还是在这个网址去下,不要想着用一些不明来源的安装包。在这里,你不仅可以下载各种版本的Python源代码和安装程序,更有各种文献资料、Python交流社区,还会告诉你Python的最新行情,不得不感叹,这功能太强大!

2、菜鸟教程

站内的知识点很全面,无论你想学习哪种领域,都可以轻松在这里找到合适的资料。

3、Codecademy

这个学习网站很大的优势就是在浏览器上直接编写代码,轻松解决了初学者程序环境安装的困扰。

4、Coursera

如果你英文比较好,交流没有问题的话,比较推荐这个网站。这是一个课程学习网站,内容涵盖编程各个领域,目前已经和200+所大学合作课程,还可以在线读学士、硕士学位。

5、CSDN

如果说你的英文是难题,给你推荐CSDN,是国内老牌程序员社区,里边有各领域博文、资料、课程,基本很多专业问题都可以在这里查。

二、书籍推荐

1、《笨办法学Python》

如果是初学Python的话,没有什么编程基础,还是比较适合从这本开始学的。整体是以习题的方式开始引导初学者学习编程。

2、《Python Cookbook》

这本书既有知识点的详细讲解,又有更多高阶用法的延伸,对于已经有一定基础但是掌握不牢的同学来说,无疑是值得拥有的好书。

3、《流畅的Python》

这本书对于Python的高级用法探究很深入,涵盖了数据结构、对象、并行与并发、元编程等多个方向。

三、课程推荐

其实,除了学习网站和书籍,我还在网易云课堂、51、慕课、CSDN学院买了不下10套关于Python入门的课,在得到也买了时间管理课。

我自己的话,因为我是想进行系统学习,也想节省一些学习时间,加上我也比较懒,非得有人督促着才能坚持不懈,所以我选了CSDN的Python训练营。


最近正在学习Python的进阶领域-AI,这回同样参与了一个训练营,深刻感受到监督使人进步!不为别的,也是希望自己以后的工作范围更广,也能跟上时代的脚步。

也许有人会问:“你干嘛把自己逼得那么紧,安安稳稳的不就很好了吗?”

作为一个人,如果长期处于一个舒适安逸的环境,慢慢就会被这种安逸笼罩,变得懒惰,原本拥有的能力也会逐步减弱,当有一天危险来临,所在的舒适圈被打破,连生存下去都是个难题!

所以,为了好好活下去,要不跳出舒适圈,要不就扩大你的舒适圈。

跳出舒适圈,意味着你要彻底离开现在的区域,也许是换个城市、换个工作、甚至换个行业,让自己重新拥有危机感,让新环境逼着你去成长;扩大舒适圈,就是让自己能生存的舒适范围更大,主动学习、提升你的能力。

我选择的是从零开始全方向提升,因为我想着,既然要痛苦,就直接痛苦这一次。上边就是我学过的系统课,内容很全,不过价格也相对更贵。

如果有的同学目前是打算一步一步慢慢来,或者之前已经有一些基础,只是想突破单个方向,下边这几门课程我也在刚接触Python的时候买来学的,价格更便宜,内容却丝毫不打折扣,是比较值得学习的!


1、基础知识

如果是毫无基础可言,甚至不知道如何下载Python, 比较推荐齐伟老师的《8小时Python零基础轻松入门》或者是董付国的《Python可以这样学》。细节全面,适合小白入门。

2、爬虫

这回是偏基础点的,之前也分享过两门,都可以进行参考。


3、数据分析

我买过两类数据分析课,零基础入门和多方位学习,现在直接发出来,也是为了方便不同需求的同学。


4、机器学习

说起人工智能讲的好的老师,必说唐宇迪(感觉真的霸榜各个学习平台)。

他是计算机的博士,好像还参与了挺多国家级项目,我听过几次他的课和直播,老师的讲课风格很幽默,经常会举例子,让你更清晰的搞懂知识点,我觉得自己是在学习中享受。

(基础知识配实战,这样学习起来相对也更容易)

今天先说到这里,下回我会跟大家细说这回学AI心酸与快乐,满心干货!

我的目标是进阿里,祝我幸运进阶!


更新:

有很多朋友私信问我Python学习有没有什么好的资料,我给大家找了几门不错的免费课,想学的可以看看。

《Python入门教程》

《Python初级入门精讲》

《Python爬虫开发》

《Python实战编程》

《1小时掌握Python爬虫+高效学习法则》


————————————————————————————————



更新:说明几个事

1.很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基础以及学习进度都不一样,没有必要纠结于一百天这个时间,甭管你是用三个月还是用一年来学习这些东西,最后学到了不就是收获吗?何必纠结于这一百天,觉得这一百天学习不完我就放弃了呢?(另,项目后面没有更新完,大家可以按照这个框架去学习,没有更新完的大家可以自行找资料。)


2.还有小伙伴说这是广告,那请这位项目创作者看见这条“广告”给我打钱。真的很没劲,这个项目多少人知道,在github上也非常火,火有火的道理,对于一些学习者来说的确很有参考价值。谁打广告不找个几万分的大V,来找我这个小弟弟?

更搞笑的还有说我是成都某机构培训老师?本人坐标北京谢谢,也不是什么老师,只是一名普普通通的程序员。自认为我的水平还担不起什么老师。


下面是原文:

Github上位名叫骆昊 (jackfrued) 的资深程序员,为大家规划了一条从“从新手到大师”的百天之路!我觉得这个模式你可以参考一下。

现在已经有5w+星了!

给初学者的几个建议:

  • Make English as your working language.
  • Practice makes perfect.
  • All experience comes from mistakes.
  • Don't be one of the leeches.
  • Either stand out or kicked out.



先附上github地址:


下面是这个一百天计划里面的学习框架,我在这里放上来。

Day01~15 - Python语言基础

Day01 - 初识Python

Python简介 - Python的历史 / Python的优缺点 / Python的应用领域

搭建编程环境 - Windows环境 / Linux环境 / MacOS环境

从终端运行Python程序 - Hello, world / print函数 / 运行程序

使用IDLE - 交互式环境(REPL) / 编写多行代码 / 运行程序 / 退出IDLE

注释 - 注释的作用 / 单行注释 / 多行注释

Day02 - 语言元素

程序和进制 - 指令和程序 / 冯诺依曼机 / 二进制和十进制 / 八进制和十六进制

变量和类型 - 变量的命名 / 变量的使用 / input函数 / 检查变量类型 / 类型转换

数字和字符串 - 整数 / 浮点数 / 复数 / 字符串 / 字符串基本操作 / 字符编码

运算符 - 数学运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 身份运算符 / 运算符的优先级

应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年

Day03 - 分支结构

分支结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图

if语句 - 简单的if / if-else结构 / if-elif-else结构 / 嵌套的if

应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数求值 / 输入三条边的长度如果能构成三角形就计算周长和面积

Day04 - 循环结构

循环结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图

while循环 - 基本结构 / break语句 / continue语句

for循环 - 基本结构 / range类型 / 循环中的分支结构 / 嵌套的循环 / 提前结束程序

应用案例 - 1~100求和 / 判断素数 / 猜数字游戏 / 打印九九表 / 打印三角形图案 / 猴子吃桃 / 百钱百鸡

Day05 - 构造程序逻辑

基础练习 - 水仙花数 / 完美数 / 五人分鱼 / Fibonacci数列 / 回文素数

综合练习 - Craps赌博游戏

Day06 - 函数和模块的使用

函数的作用 - 代码的坏味道 / 用函数封装功能模块

定义函数 - def语句 / 函数名 / 参数列表 / return语句 / 调用自定义函数

调用函数 - Python内置函数 / 导入模块和函数

函数的参数 - 默认参数 / 可变参数 / 关键字参数 / 命名关键字参数

函数的返回值 - 没有返回值 / 返回单个值 / 返回多个值

作用域问题 - 局部作用域 / 嵌套作用域 / 全局作用域 / 内置作用域 / 和作用域相关的关键字

用模块管理函数 - 模块的概念 / 用自定义模块管理函数 / 命名冲突的时候会怎样(同一个模块和不同的模块)

Day07 - 字符串和常用数据结构

字符串的使用 - 计算长度 / 下标运算 / 切片 / 常用方法

列表基本用法 - 定义列表 / 用下表访问元素 / 下标越界 / 添加元素 / 删除元素 / 修改元素 / 切片 / 循环遍历

列表常用操作 - 连接 / 复制(复制元素和复制数组) / 长度 / 排序 / 倒转 / 查找

生成列表 - 使用range创建数字列表 / 生成表达式 / 生成器

元组的使用 - 定义元组 / 使用元组中的值 / 修改元组变量 / 元组和列表转换

集合基本用法 - 集合和列表的区别 / 创建集合 / 添加元素 / 删除元素 / 清空

集合常用操作 - 交集 / 并集 / 差集 / 对称差 / 子集 / 超集

字典的基本用法 - 字典的特点 / 创建字典 / 添加元素 / 删除元素 / 取值 / 清空

字典常用操作 - keys()方法 / values()方法 / items()方法 / setdefault()方法

基础练习 - 跑马灯效果 / 列表找最大元素 / 统计考试成绩的平均分 / Fibonacci数列 / 杨辉三角

综合案例 - 双色球选号 / 井字棋

Day08 - 面向对象编程基础

类和对象 - 什么是类 / 什么是对象 / 面向对象其他相关概念

定义类 - 基本结构 / 属性和方法 / 构造器 / 析构器 / __str__方法

使用对象 - 创建对象 / 给对象发消息

面向对象的四大支柱 - 抽象 / 封装 / 继承 / 多态

基础练习 - 定义学生类 / 定义时钟类 / 定义图形类 / 定义汽车类

Day09 - 面向对象进阶

属性 - 类属性 / 实例属性 / 属性访问器 / 属性修改器 / 属性删除器 / 使用__slots__

类中的方法 - 实例方法 / 类方法 / 静态方法

运算符重载 - __add__ / __sub__ / __or__ /__getitem__ / __setitem__ / __len__ / __repr__ / __gt__ / __lt__ / __le__ / __ge__ / __eq__ / __ne__ / __contains__

类(的对象)之间的关系 - 关联 / 继承 / 依赖

继承和多态 - 什么是继承 / 继承的语法 / 调用父类方法 / 方法重写 / 类型判定 / 多重继承 / 菱形继承(钻石继承)和C3算法

综合案例 - 工资结算系统 / 图书自动折扣系统 / 自定义分数类

Day10 - 图形用户界面和游戏开发

使用tkinter开发GUI

使用pygame三方库开发游戏应用

“大球吃小球”游戏

Day11 - 文件和异常
  • 读文件 - 读取整个文件 / 逐行读取 / 文件路径
  • 写文件 - 覆盖写入 / 追加写入 / 文本文件 / 二进制文件
  • 异常处理 - 异常机制的重要性 / try-except代码块 / else代码块 / finally代码块 / 内置异常类型 / 异常栈 / raise语句
  • 数据持久化 - CSV文件概述 / csv模块的应用 / JSON数据格式 / json模块的应用
Day12 - 字符串和正则表达式
  • 字符串高级操作 - 转义字符 / 原始字符串 / 多行字符串 / in和 not in运算符 / is开头的方法 / join和split方法 / strip相关方法 / pyperclip模块 / 不变字符串和可变字符串 / StringIO的使用
  • 正则表达式入门 - 正则表达式的作用 / 元字符 / 转义 / 量词 / 分组 / 零宽断言 /贪婪匹配与惰性匹配懒惰 / 使用re模块实现正则表达式操作(匹配、搜索、替换、捕获)
  • 使用正则表达式 - re模块 / compile函数 / group和groups方法 / match方法 / search方法 / findall和finditer方法 / sub和subn方法 / split方法
  • 应用案例 - 使用正则表达式验证输入的字符串
Day13 - 进程和线程
  • 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
  • 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
  • 使用线程 - thread模块 / threading模块 / Thread类 / Lock类 / Condition类 / 线程池
Day14 - 网络编程入门和网络应用开发
  • 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念
  • 网络应用模式 - “客户端-服务器”模式 / “浏览器-服务器”模式
  • 基于HTTP协议访问网络资源 - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据
  • Python网络编程 - 套接字的概念 / socket模块 / socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块
  • 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块
  • 短信服务 - 调用短信服务网关
Day15 - 图像和文档处理
  • 用Pillow处理图片 - 图片读写 / 图片合成 / 几何变换 / 色彩转换 / 滤镜效果
  • 读写Word文档 - 文本内容的处理 / 段落 / 页眉和页脚 / 样式的处理
  • 读写Excel文件 - xlrd模块 / xlwt模块
  • 生成PDF文件 - pypdf2模块 / reportlab模块

Day16~Day20 - Python语言进阶

  • 常用数据结构
  • 函数的高级用法 - “一等公民” / 高阶函数 / Lambda函数 / 作用域和闭包 / 装饰器
  • 面向对象高级知识 - “三大支柱” / 类与类之间的关系 / 垃圾回收 / 魔术属性和方法 / 混入 / 元类 / 面向对象设计原则 / GoF设计模式
  • 迭代器和生成器 - 相关魔术方法 / 创建生成器的两种方式 /
  • 并发和异步编程 - 多线程 / 多进程 / 异步IO / async和await

Day21~30 - Web前端入门

  • 用HTML标签承载页面内容
  • 用CSS渲染页面
  • 用JavaScript处理交互式行为
  • jQuery入门和提高
  • Vue.js入门
  • Element的使用
  • Bootstrap的使用

Day31~35 - 玩转Linux操作系统

  • 操作系统发展史和Linux概述
  • Linux基础命令
  • Linux中的实用程序
  • Linux的文件系统
  • Vim编辑器的应用
  • 环境变量和Shell编程
  • 软件的安装和服务的配置
  • 网络访问和管理
  • 其他相关内容

Day36~40 - 数据库基础和进阶

  • 关系型数据库MySQL
    • 关系型数据库概述
    • MySQL的安装和使用
    • SQL的使用
      • DDL - 数据定义语言 - create / drop / alter
      • DML - 数据操作语言 - insert / delete / update / select
      • DCL - 数据控制语言 - grant / revoke


    • 相关知识
      • 范式理论 - 设计二维表的指导思想
      • 数据完整性
      • 数据一致性


    • 在Python中操作MySQL



Day41~55 - 实战Django

Day41 - 快速上手
  • Web应用工作原理和HTTP协议
  • Django框架概述
  • 5分钟快速上手
  • 使用视图模板
Day42 - 深入模型
  • 关系型数据库配置
  • 管理后台的使用
  • 使用ORM完成对模型的CRUD操作
  • Django模型最佳实践
  • 模型定义参考
Day43 - 静态资源和Ajax请求
  • 加载静态资源
  • 用Ajax请求获取数据
Day44 - 表单的应用
  • 表单和表单控件
  • 跨站请求伪造和CSRF令牌
  • Form和ModelForm
  • 表单验证
Day45 - Cookie和Session
  • 实现用户跟踪
  • cookie和session的关系
  • Django框架对session的支持
  • 视图函数中的cookie读写操作
Day46 - 报表和日志
  • 通过HttpResponse修改响应头
  • 使用StreamingHttpResponse处理大文件
  • 使用xlwt生成Excel报表
  • 使用reportlab生成PDF报表
  • 使用ECharts生成前端图表
  • 配置日志和Django-Debug-Toolbar
Day47 - 中间件的应用
  • 什么是中间件
  • Django框架内置的中间件
  • 自定义中间件及其应用场景
Day48 - 前后端分离开发入门
  • 返回JSON格式的数据
  • 用Vue.js渲染页面
Day49 - RESTful架构和DRF入门
Day50 - RESTful架构和DRF进阶
Day51 - 使用缓存
  • 网站优化第一定律
  • 在Django项目中使用Redis提供缓存服务
  • 在视图函数中读写缓存
  • 使用装饰器实现页面缓存
  • 为数据接口提供缓存服务
Day52 - 文件上传和富文本编辑
  • 文件上传表单控件和图片文件预览
  • 服务器端如何处理上传的文件
  • 富文本编辑器概述
  • wangEditor的使用
Day53 - 短信和邮件
  • 常用短信网关平台介绍
  • 使用螺丝帽发送短信
  • Django框架对邮件服务的支持
Day54 - 异步任务和定时任务
  • 网站优化第二定律
  • 配置消息队列服务
  • 在项目中使用celery实现任务异步化
  • 在项目中使用celery实现定时任务
Day55 - 单元测试和项目上线
  • Python中的单元测试
  • Django框架对单元测试的支持
  • 使用版本控制系统
  • 配置和使用uWSGI
  • 动静分离和Nginx配置
  • 配置HTTPS

Day56~60 - 实战Flask

Day56 - Flask入门
Day57 - 模板的使用
Day58 - 表单的处理
Day59 - 数据库操作
Day60 - 项目实战

Day61~65 - 实战Tornado

Day61 - 预备知识
  • 并发编程
  • I/O模式和事件驱动
Day62 - Tornado入门
  • Tornado概述
  • 5分钟上手Tornado
  • 路由解析
  • 请求处理器
Day63 - 异步化
  • aiomysql和aioredis的使用
Day64 - WebSocket的应用
  • WebSocket简介
  • WebSocket服务器端编程
  • WebSocket客户端编程
  • 项目:Web聊天室
Day65 - 项目实战
  • 前后端分离开发和接口文档的撰写
  • 使用Vue.js实现前端渲染
  • 使用ECharts实现报表功能
  • 使用WebSocket实现推送服务

Day66~75 - 爬虫开发

Day66 - 网络爬虫和相关工具
  • 网络爬虫的概念及其应用领域
  • 网络爬虫的合法性探讨
  • 开发网络爬虫的相关工具
  • 一个爬虫程序的构成
Day67 - 数据采集和解析
  • 数据采集的标准和三方库
  • 页面解析的三种方式:正则表达式解析 / XPath解析 / CSS选择器解析
Day68 - 存储数据
  • 如何存储海量数据
  • 实现数据的缓存
Day69 - 并发下载
  • 多线程和多进程
  • 异步I/O和协程
  • async和await关键字的使用
  • 三方库aiohttp的应用
Day70 - 解析动态内容
  • JavaScript逆向工程
  • 使用Selenium获取动态内容
Day71 - 表单交互和验证码处理
  • 自动提交表单
  • Cookie池的应用
  • 验证码处理
Day72 - Scrapy入门
  • Scrapy爬虫框架概述
  • 安装和使用Scrapy
Day73 - Scrapy高级应用
  • Spider的用法
  • 中间件的应用:下载中间件 / 蜘蛛中间件
  • Scrapy对接Selenium抓取动态内容
  • Scrapy部署到Docker
Day74 - Scrapy分布式实现
  • 分布式爬虫的原理
  • Scrapy分布式实现
  • 使用Scrapyd实现分布式部署
Day75 - 爬虫项目实战
  • 爬取招聘网站数据
  • 爬取房地产行业数据
  • 爬取二手车交易平台数据

Day76~90 - 数据处理和机器学习

Day76 - 机器学习基础
Day77 - Pandas的应用
Day78 - NumPy和SciPy的应用
Day79 - Matplotlib和数据可视化
Day80 - k最近邻(KNN)分类
Day81 - 决策树
Day82 - 贝叶斯分类
Day83 - 支持向量机(SVM)
Day84 - K-均值聚类
Day85 - 回归分析
Day86 - 大数据分析入门
Day87 - 大数据分析进阶
Day88 - Tensorflow入门
Day89 - Tensorflow实战
Day90 - 推荐系统

Day91~100 - 团队项目开发

第91天:团队项目开发准备
  1. 软件过程模型
  • 经典过程模型(瀑布模型)
    • 可行性分析(研究做还是不做),输出《可行性分析报告》。
    • 需求分析(研究做什么),输出《需求规格说明书》和产品界面原型图。
    • 概要设计和详细设计,输出概念模型图、物理模型图、类图、时序图等。
    • 编码 / 测试。
    • 上线 / 维护。


    • 敏捷开发(Scrum)- 产品所有者、Scrum Master、研发人员 - Sprint
      • 产品的Backlog(用户故事、产品原型)。
      • 计划会议(评估和预算)。
      • 日常开发(站立会议、番茄工作法、结对编程、测试先行、代码重构……)。
      • 修复bug(问题描述、重现步骤、测试人员、被指派人)。
      • 评审会议(Showcase)。
      • 回顾会议(当前周期做得好和不好的地方)。

补充:敏捷软件开发宣言

      • 个体和互动 高于 流程和工具
      • 工作的软件 高于 详尽的文档
      • 客户合作 高于 合同谈判
      • 响应变化 高于 遵循计划



角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)。
准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队。
敏捷团队通常人数为8-10人。
工作量估算:将开发任务量化,包括原型、Logo设计、UI设计、前端开发等,尽量把每个工作分解到最小任务量,最小任务量标准为工作时间不能超过两天,然后估算总体项目时间。把每个任务都贴在白板上面,白板上分三部分:to do(待完成)、in progress(进行中)和done(已完成)。


  1. 项目团队组建
  • 团队的构成和角色
    说明:谢谢付祥英女士绘制了下面这张精美的公司组织架构图。


    • 编程规范和代码审查(flake8、pylint)


    • Python中的一些“惯例”(请参考《Python惯例-如何编写Pythonic的代码》
    • 影响代码可读性的原因:
      • 代码注释太少或者没有注释
      • 代码破坏了语言的最佳实践
      • 反模式编程(意大利面代码、复制-黏贴编程、自负编程、……)



  1. 团队开发工具介绍

请参考《团队项目开发》

项目选题和理解业务

  1. 选题范围设定
  • CMS(用户端):新闻聚合网站、问答/分享社区、影评/书评网站等。
  • MIS(用户端+管理端):KMS、KPI考核系统、HRS、CRM系统、供应链系统、仓储管理系统等。
  • App后台(管理端+数据接口):二手交易类、报刊杂志类、小众电商类、新闻资讯类、旅游类、社交类、阅读类等。
  • 其他类型:自身行业背景和工作经验、业务容易理解和把控。


  1. 需求理解、模块划分和任务分配
  • 需求理解:头脑风暴和竞品分析。
  • 模块划分:画思维导图(XMind),每个模块是一个枝节点,每个具体的功能是一个叶节点(用动词表述),需要确保每个叶节点无法再生出新节点,确定每个叶子节点的重要性、优先级和工作量。
  • 任务分配:由项目负责人根据上面的指标为每个团队成员分配任务。


  1. 制定项目进度表(每日更新)

第92天:Docker的使用

第93天:数据库设计和OOAD

概念模型和正向工程

  1. UML(统一建模语言)的类图


  1. 通过模型创建表(正向工程)
    python manage.py makemigrations app python manage.py migrate

物理模型和反向工程

  1. PowerDesigner

2.通过数据表创建模型(反向工程)
python manage.py inspectdb > app/models.py

第94天:网络API接口设计
第95天:使用Django开发项目

项目开发中的公共问题

  1. 数据库的配置(多数据库、主从复制、数据库路由)
  2. 缓存的配置(分区缓存、键设置、超时设置、主从复制、故障恢复(哨兵))
  3. 日志的配置
  4. 分析和调试(Django-Debug-ToolBar)
  5. 好用的Python模块(日期计算、图像处理、数据加密、三方API)

REST API设计

  1. RESTful架构


  1. API接口文档的撰写


  1. django-REST-framework的应用

项目中的重点难点剖析

  1. 使用缓存缓解数据库压力 - Redis
  2. 使用消息队列做解耦合和削峰 - Celery + RabbitMQ

第96天:软件测试和自动化测试

单元测试

  1. 测试的种类
  2. 编写单元测试(unittest、pytest、nose2、tox、ddt、……)
  3. 测试覆盖率(coverage)

项目部署

  1. 部署前的准备工作
  • 关键设置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 缓存 / 数据库)
  • HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
  • 日志相关配置


  1. Linux常用命令回顾
  2. Linux常用服务的安装和配置
  3. uWSGI/Gunicorn和Nginx的使用
  • Gunicorn和uWSGI的比较
    • 对于不需要大量定制化的简单应用程序,Gunicorn是一个不错的选择,uWSGI的学习曲线比Gunicorn要陡峭得多,Gunicorn的默认参数就已经能够适应大多数应用程序。
    • uWSGI支持异构部署。
    • 由于Nginx本身支持uWSGI,在线上一般都将Nginx和uWSGI捆绑在一起部署,而且uWSGI属于功能齐全且高度定制的WSGI中间件。
    • 在性能上,Gunicorn和uWSGI其实表现相当。



  1. 虚拟化技术(Docker)

性能测试

  1. AB的使用
  2. SQLslap的使用
  3. sysbench的使用

自动化测试

  1. 使用Shell和Python进行自动化测试
  2. 使用Selenium实现自动化测试
  • Selenium IDE
  • Selenium WebDriver
  • Selenium Remote Control


  1. 测试工具Robot Framework介绍
第97天:电商网站技术要点剖析
第98天:项目部署上线和性能调优
  1. MySQL数据库调优
  2. Web服务器性能优化

3.代码性能调优

  • 多线程
  • 异步化

4.静态资源访问优化

    • 云存储
    • CDN
第99天:面试中的公共问题
第100天:英语面试


作者:骆昊 (jackfrued)

来源:github

github地址:github.com/jackfrued/Py


公号:聊聊Python,感兴趣的可以来找我玩,一起来聊聊Python这点事~

希望能帮到你

user avatar   volthesitan 网友的相关建议: 
      

是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?


幸运的是,Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。

Python 的设计哲学之一就是简单易学,体现在两个方面:

  1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。
  2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。


废话不多说,学会一门语言的捷径只有一个: Getting Started


¶ 起步阶段
任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识。

硬知识
“硬知识”指的是编程语言的语法、算法和数据结构、编程范式等,例如:变量和类型、循环语句、分支、函数、类。这部分知识也是具有普适性的,看上去是掌握了一种语法,实际是建立了一种思维。例如:让一个 Java 程序员去学习 Python,他可以很快的将 Java 中的学到的面向对象的知识 map 到 Python 中来,因此能够快速掌握 Python 中面向对象的特性。

如果你是刚开始学习编程的新手,一本可靠的语法书是非常重要的。它看上去可能非常枯燥乏味,但对于建立稳固的编程思维是必不可少。

下面列出了一些适合初学者入门的教学材料:

廖XF的 Python 教程 Python 中文教程的翘楚,专为刚刚步入程序世界的小白打造。
笨方法学 Python 这本书在讲解 Python 的语法成分时,还附带大量可实践的例子,非常适合快速起步。
The Hitchhiker’s Guide to Python! 这本指南着重于 Python 的最佳实践,不管你是 Python 专家还是新手,都能获得极大的帮助。

Python 的哲学:

用一种方法,最好是只有一种方法来做一件事。

学习也是一样,虽然推荐了多种学习资料,但实际学习的时候,最好只选择其中的一个,坚持看完。

必要的时候,可能需要阅读讲解数据结构和算法的书,这些知识对于理解和使用 Python 中的对象模型有着很大的帮助。

另外,一直都有朋友反应学编程很枯燥,书看不进去,容易半途而废的情况,其实在一开始起步的阶段,也可以借助一些有意思的App来帮忙学习和记忆,比如评论区有朋友推荐过「夜曲编程」,里面可以通过收集【代码卡】和【概念卡】学习编程。

首先【代码卡】是教你怎么去写程序的,比书本上的要赏心悦目得多。(如下图)

其次,【概念卡】是帮助你理解一些编程概念的,边学习边通过收集卡片的方式通关,会让人感觉学编程没有那么枯燥,有适度的成就感,因此很适合小白在起步的时候使用(如下图)。

感兴趣的,也可以去夜曲编程的公众号了解一下,而且回复「免费教程』就能薅羊毛,免费试学一下比较扎实的体验课程。虽然说是免费的,但是课程本身的结构、还有内容都是很严谨与扎实的,可以说毫不敷衍。

软知识
“软知识”则是特定语言环境下的语法技巧、类库的使用、IDE的选择等等。这一部分,即使完全不了解不会使用,也不会妨碍你去编程,只不过写出的程序,看上去显得“傻”了些。

对这些知识的学习,取决于你尝试解决的问题的领域和深度。对初学者而言,起步阶段极易走火,或者在选择 Python 版本时徘徊不决,一会儿看 2.7 一会儿又转到 3.0,或者徜徉在类库的大海中无法自拔,Scrapy,Numpy,Django 什么都要试试,或者参与编辑器圣战、大括号缩进探究、操作系统辩论赛等无意义活动,或者整天跪舔语法糖,老想着怎么一行代码把所有的事情做完,或者去构想圣洁的性能安全通用性健壮性全部满分的解决方案。

很多“大牛”都会告诫初学者,用这个用那个,少走弯路,这样反而把初学者推向了真正的弯路。
还不如告诉初学者,学习本来就是个需要你去走弯路出 Bug,只能脚踏实地,没有奇迹只有狗屎的过程。

选择一个方向先走下去,哪怕脏丑差,走不动了再看看有没有更好的解决途径。

自己走了弯路,你才知道这么做的好处,才能理解为什么人们可以手写状态机去匹配却偏要发明正则表达式,为什么面向过程可以解决却偏要面向对象,为什么我可以操纵每一根指针却偏要自动管理内存,为什么我可以嵌套回调却偏要用 Promise...

更重要的是,你会明白,高层次的解决方法都是对低层次的封装,并不是任何情况下都是最有效最合适的。

技术涌进就像波浪一样,那些陈旧的封存已久的技术,消退了迟早还会涌回的。就像现在移动端应用、手游和 HTML5 的火热,某些方面不正在重演过去 PC 的那些历史么?

因此,不要担心自己走错路误了终身,坚持并保持进步才是正道。

起步阶段的核心任务是掌握硬知识,软知识做适当了解,有了稳固的根,粗壮的枝干,才能长出浓密的叶子,结出甜美的果实。


¶ 发展阶段
完成了基础知识的学习,必定会感到一阵空虚,怀疑这些语法知识是不是真的有用。

没错,你的怀疑是非常正确的。要让 Python 发挥出它的价值,当然不能停留在语法层面。
发展阶段的核心任务,就是“跳出 Python,拥抱世界”。

在你面前会有多个分支:科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,这些都不是仅仅知道 Python 语法就能解决的问题。

拿爬虫举例,如果你对计算机网络,HTTP 协议,HTML,文本编码,JSON 一无所知,你能做好这部分的工作么?而你在起步阶段的基础知识也同样重要,如果你连循环递归怎么写都还要查文档,连 BFS 都不知道怎么实现,这就像工匠做石凳每次起锤都要思考锤子怎么使用一样,非常低效。

在这个阶段,不可避免要接触大量类库,阅读大量书籍的。

类库方面
「Awesome Python 项目」:vinta/awesome-python · GitHub
这里列出了你在尝试解决各种实际问题时,Python 社区已有的工具型类库,如下图所示:

vinta/awesome-python

你可以按照实际需求,寻找你需要的类库。

至于相关类库如何使用,必须掌握的技能便是阅读文档。由于开源社区大多数文档都是英文写成的,所以,英语不好的同学,需要恶补下。

书籍方面
这里我只列出一些我觉得比较有一些帮助的书籍,详细的请看豆瓣的书评:

科学和数据分析:
❖「集体智慧编程」:集体智慧编程 (豆瓣)
❖「数学之美」:数学之美 (豆瓣)
❖「统计学习方法」:统计学习方法 (豆瓣)
❖「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)
❖「数据科学实战」:数据科学实战 (豆瓣)
❖「数据检索导论」:信息检索导论 (豆瓣)

爬虫:
❖「HTTP 权威指南」:HTTP权威指南 (豆瓣)

Web 网站:
❖「HTML & CSS 设计与构建网站」:HTML & CSS设计与构建网站 (豆瓣)

...

列到这里已经不需要继续了。

聪明的你一定会发现上面的大部分书籍,并不是讲 Python 的书,而更多的是专业知识。

事实上,这里所谓“跳出 Python,拥抱世界”,其实是发现 Python 和专业知识相结合,能够解决很多实际问题。这个阶段能走到什么程度,更多的取决于自己的专业知识。


¶ 深入阶段
这个阶段的你,对 Python 几乎了如指掌,那么你一定知道 Python 是用 C 语言实现的。

可是 Python 对象的“动态特征”是怎么用相对底层,连自动内存管理都没有的C语言实现的呢?这时候就不能停留在表面了,勇敢的拆开 Python 的黑盒子,深入到语言的内部,去看它的历史,读它的源码,才能真正理解它的设计思路。

这里推荐一本书:
「Python 源码剖析」:Python源码剖析 (豆瓣)
这本书把 Python 源码中最核心的部分,给出了详细的阐释,不过阅读此书需要对 C 语言内存模型和指针有着很好的理解。

另外,Python 本身是一门杂糅多种范式的动态语言,也就是说,相对于 C 的过程式、 Haskell 等的函数式、Java 基于类的面向对象而言,它都不够纯粹。换而言之,编程语言的“道学”,在 Python 中只能有限的体悟。学习某种编程范式时,从那些面向这种范式更加纯粹的语言出发,才能有更深刻的理解,也能了解到 Python 语言的根源。

这里推荐一门公开课
「编程范式」:斯坦福大学公开课:编程范式
讲师高屋建瓴,从各种编程范式的代表语言出发,给出了每种编程范式最核心的思想。

值得一提的是,这门课程对C语言有非常深入的讲解,例如C语言的范型和内存管理。这些知识,对阅读 Python 源码也有大有帮助。

Python 的许多最佳实践都隐藏在那些众所周知的框架和类库中,例如 Django、Tornado 等等。在它们的源代码中淘金,也是个不错的选择。


¶ 最后的话
每个人学编程的道路都是不一样的,其实大都殊途同归,没有迷路的人只有不能坚持的人!

希望想学 Python 想学编程的同学,不要犹豫了,看完这篇文章,

Just Getting Started !!!


user avatar   wang-shu-yi-11 网友的相关建议: 
      

如果你一直想学Python,但是不知道如何入手,那就别犹豫了。这篇文章就是为你写的。



疑问


随着数据科学概念的普及,Python这门并不算新的语言火得一塌糊涂。

因为写了几篇用Python做数据分析的文章,经常有读者和学生在留言区问我,想学习Python,该如何入手?

我经常需要根据他们的不同情况,提出对应的建议。这样针对性虽强,但效率不高。这个问题,我还是写出来,让更多的人一同看到吧。

有几位出版社的编辑,给我发私信,鼓励我赶紧写一本Python教材出来。

我暂时还没有写Python基础教程的计划。因为在我看来,现有的学习资源已经足够好了。

有现成的资源和路径,为什么许多人依然在为学Python犯愁呢?

因为学习有个效率问题。

Python语法清晰明快,简单易学。这是Python如此普及的重要原因。但是,选择合适的Python学习方式,需要跟你自身的特性相结合。

人群划分的标准是什么?不是你是否计算机相关专业,也不是你是否已经工作,而是一个重要的指标——你的自律能力。

你可能觉得我说的话没有信息含量。自律能力强,学得更好,地球人谁不知道?

可是,自律不够强的人,难道就注定什么也不能学了?

当然不是。

每个人的性格都有不同的特点,没有绝对的高下之分。不信你听听刘宝瑞先生的相声《日遭三险》,就明白了。



自律能力也是这样。只要你能清楚认识自己,就能以更高效的方法来学习新知识和技能。

下面我们分类探讨一下,不同自律能力的人,该如何学Python,才能更高效。


路径I


咱们先从自律能力最差的人说起。

这样的同学,往往是三分钟热度。偶然受到了刺激,发奋要学习Python,以便投入数据科学的事业中。

他会立即跑到图书馆或者书店抱回来一本《X天从入门到精通Python》的书开始啃。结果X天还没到,就顺利跑完了从入门到放弃的全过程。

你没能坚持下来,自己肯定是有责任的。但是最大的问题,在于过度高估自己的自律能力。

这样的同学,我推荐你到Coursera平台上,按部就班学习一门非常好的MOOC——“Programming for Everybody”。



推荐这门课,是因为课程质量真是太好了。

首先是教材好。这本教材的来源是有故事的。

先是 Allen B. Downey 写了一本开放书籍 “Think Python: How to Think like a Computer Scientist”。



这本书在Amazon上的评价是这样的:



Charles Severance觉得这本书写得太好了,想把它作为教材。于是征得作者同意,大篇幅借鉴了这本书的内容架构,编写了一本 “Python for Informatics”。



Charles写作这本书的时候,同时开放推出了iBook格式。里面就包含了自己的授课视频,供学生直接观看学习。



后来,Charles用这本书扩展,做成了一门MOOC。2015年上线不久,硅谷资深工程师就都争相学习。

Charles深谙课程迭代的技艺。他不断添加内容,完善课程体系,将一门课发展成一个专项课程(Signature Track),并且将教材升级为 “Python for Everybody: Exploring Data In Python 3”



在目前全球MOOC口碑榜上,Charles的这门课一直名列前茅。



这个专项课程深入浅出讲解Python本来就很简单的语法,而且还用数据科学的一些基础工作任务,带动你去使用Python语言写简单项目。这种扎实的训练过程可以增强你的信心,激发兴趣。

对于自律程度低的同学来说,下面这个特性更重要——一切工作都有时限。

Coursera上的课程,每周的任务很明确。练习题正确率如果不能达到80%,就不能过关。到了截止日期,如果你不能完成全部练习和课程项目,就拿不到证书。



老师在前面引领你,助教在旁边督促你,平台用时间表提醒你,论坛上的同学们在用同侪压力推挤你……

想偷懒?想三天打鱼两天晒网?很难。


路径II


如果你的自律能力中等偏上,那么你可以选择的面就宽了。

这里我给你推荐另一个MOOC平台,叫做Datacamp。



我第一次接触Datacamp,是在2015年初。那时我在Coursera上选修杜克大学的统计学课程 “Statistical Inference”,配套的练习就在Datacamp上。

当时这个平台就给我留下了非常深刻的印象,因为代码的运行都采用了云环境。学习者不需要在本机安装任何环境,一个支持HTML5标准的浏览器就能带给你完整的学习体验。

对初学者来说,这种入门方式太好了。要知道,许多人的学习热情,就是被环境配置和依赖软件包安装的坑埋掉的。

两年之后,Datacamp已经迭代得更为强大。你可以打开首页的Data Scientist with Python这个学习路径,查看其中已经提供的20门课程。



这些课程涵盖了从Python基础,到数据处理,直至人工智能和深度神经网络的方方面面。



所有的课程设计,都是短小精悍的。一般不超过4个小时,就可以完成某一主题的学习。这样你学起来毫不费力,可以在相当短的时间内获得反馈(练习题自动评分)和成就感(证书)。

这个平台的课程,进度完全由学习者自己掌控。所以我把它归纳为适合有一定自律能力的学习者。

它既可以给你即时的回馈,让你时刻了解自己所处的位置进度,不会迷失方向,又能充分体验自主学习的乐趣。

Datacamp的课程,一般都是第一部分免费开放。后面部分购买后才能解锁学习。如果你对自己的学习能力和毅力有信心,可以购买一个完整时间段(例如一年)的课程。在此期间,所有平台上的课程,你都可以学习,并且可以在通过后获取证书。这样的购买方案本身已经有优惠,而且每年都会有特定时段的大幅打折促销,非常划算。建议放到购物车里面多关注。



这是我在Datacamp拿到的深度学习框架Keras课程证书。确实只需要几个小时的时间就能学完。成就感还是蛮强的。


路径III


前面提到的课程费用不菲。Coursera上每门课平均价格在49美元左右。对来自发展中国家的学生群体,Coursera可以提供助学金。你可以根据自己的需求如实填写申请表,来获得资助。

对于自律能力强的同学来说,你的选择可以变得非常简单直接——可以用最受推崇的教材,自己看书学习。

最受推崇的教材,其实是没有的。正如西谚有云:


One man’s meat, is another man’s poison.


这个世界上,就没有哪件东西大家都说好。但口碑非常好的教材是存在的,例如这本起了个怪名字的《笨办法学Python》(Learn Python the Hard Way)。



千万不要被名称迷惑,望文生义觉得这是一本糟糕的Python入门教程。

恰恰相反,这本书的设计,非常适合人们的认知规律。

我们学东西,由浅入深,由易到难,逐步递进。如果一味追求新知,那么之前学的东西会很快遗忘。如果总是原地打转,会带来枯燥和无聊的感觉。还记得高三做的那一年卷子吧?

好的教科书,应该在每一个章节给学习者提供新的知识和内容,提出足够的挑战。但是挑战性不能高到让学习者产生挫败感而放弃。同时也不能忽视在后续内容中把前面所学知识改换面目不断螺旋上升式重复出现。只有这样才能巩固所学,让学习者感受到基础知识的作用,增强学习的愉悦感。

这么说有些抽象,实际上有一本英语教材非常符合上述认知规律。就是我在课堂上和文章里反复推荐过的这一套教材:



《笨办法学Python》也是一本这样的书。你需要做的就是把书打开,同时打开一个好用的代码编辑器,开始按书中要求敲代码、运行代码、改代码……

下图是我当初学习时,照着这本书敲的代码。



书中对Python基础内容训练的完备性,至今无出其右者。

顺便说一句,这本书有中文版哦。所以如果你英语不好,完全不用担心。

嘱咐一句,英语真该好好学。拓宽的不仅是你的眼界,也增加了你可能获得的机会。考虑到仔细阅读这部分的读者都是自律性很强的人,我就不用多说了。


挑战


三条基本的Python入门路径讲完了。通过对自己自律能力的清晰理解,相信你可以找到一种适合自己逐渐学习和掌握Python的方式。

但是完成了读书和听课,是不是就完事大吉了?

当然不是。

许多人在这里犯了错误。他们以为拿到了证书,或学完了教材,就算是真正掌握了Python。然后把这门语言丢弃在一旁,去刷美剧和小说了。

相信我,你会遗忘的。

如果你对于长期不接触的东西从不遗忘……去医院检查一下吧。

大部分人的记忆模式,都是这个样子的:



若不加以干涉,不出一个星期,你就能把学到的新知识几乎忘光。

如果你不希望自己辛苦学来的Python知识被如此轻易浪费掉,怎么办?


实践


你应该实践。

实践Python技能,未必一定要找个世界500强企业的核心技术部门,“996”工作N年才能完成。

你可以从生活中寻找各种有趣的问题,然后思考能否用Python编程来解决它。

我真正觉得自己初步掌握了Python,就是在完成了我的第一个github项目之后。

项目非常简单,就是用Python作为胶水语言,把一系列工具连接在一起。可以把Markdown撰写的内容随心所欲一键变化成各种格式。

格式包括而不限于:



  • PDF/LaTeX;


  • Word;


  • Bitcron文稿;


  • MarkEditor文稿;


  • MWeb文稿;


  • Bear文稿;


  • TextBundle(可以导入MindNode, Ulysses等);


  • Reveal.js幻灯;


  • 发布版本Markdown(图片一键至七牛图床);


  • 本地版本Markdown(简书等远程Markdown同步图片至本地);


  • Day One日记。



其中部分功能我正陆续发布在github公开项目中,地址在这里。相应地,我也撰文做了介绍。



这个小项目,我从2014年开始做。实话实说,现在回头看当时的代码,简直惨不忍睹。但是如果你逐渐对自己的代码有了这种感觉,证明你在进步。

不要指望自己一出手就能写出完美的代码,要把“迭代”两个字时刻装在心里。这样你才能容忍自己的笨拙,不断提高。正如古人说的那句:


勤学似春起之苗,不见其增,而日有所长。


我在做这个项目的过程中,曾经遇到了中文编码、隐私信息存储、文件名空格处理、绝对与相对路径、发布流程划分、功能解耦合、Web图片地址附带参数……等等一系列的问题。



通过回顾用git版本控制工具记载下来的日志,以及版本对比功能,你可以清楚看到自己是在何时利用什么方法解决了这些问题。然后别忘了,给自己工具箱里的新增小技能打个勾。

一个个小问题逐渐被你攻克的时候,你才能真正感受到所学技能的价值,并且点滴积累自信。

讨论


你学会Python了吗?你是用什么方法学会的?可否把你的学习心得体会分享给大家?对本文推荐的资源和路径,你有什么不同的意见,或者更好的建议?欢迎留言,记录下你的思考,我们一起交流讨论。

喜欢请点赞。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)

如果你对数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。


user avatar   simonlearn 网友的相关建议: 
      

我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架)。相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点。我把我的学习过程写在下面,并附上在每个阶段的学习资料,希望对零基础的Python学习者有所帮助。

注:本文只做经历分享,不是技术探讨。

---

在知乎上常常看到想要转行IT,或者是想学习编程但不知如何开始的朋友。回答这类问题的人往往只是列出书单资源然后给出一个大致的方向。有些朋友一开始就扎入了理论学习的汪洋大海,从苦读类似《算法导论》开始,能够坚持读下来的寥寥无几,学习的积极性也被不断的挫败感消磨的所剩无几。

一直以来,编程对我而言是一种「黑魔法」般的存在。今年阿里月饼门,当很多人都参与到是非之争的时候,我更加着迷于程序员区区几行代码的脚本所展现出的威力,对于外行而言,这是超乎他们想象之外的某种能力——为什么我守在电脑面前盯着秒针然后拼命点击鼠标都不一定能抢到的礼物,程序员只需要提前花5分钟写3行代码就轻松搞定?

所以,我的心底深处一直都想变成这样的一位魔法师。今年的8月,刚好工作上想要开发一个基于微信的英语学习网站,借此机会,我决定好好学习一下编程。在此之前,我所有关于程序的知识仅仅来源于两部分,一是本科时期的C语言必修课,现在已经忘的一干二净,不过好歹我从中明白编程是怎么回事;第二部分是大概两年前由于工作关系学的一些Python,不过只是皮毛,现在忘的七七八八。

简单说,我的目标是建立一个网站,不过这个网站是动态的,也就是说它能识别谁登陆,然后对不同的人显示不同的内容。而当时的现实是,我完全不明白网页是如何显示出来的?譬如每个人登陆知乎的时候看到的是定制化的页面,后台是如何基于每个ID来组织出不同的页面的?所有我们看到的问题,回答,参与的评论在背后的服务器上是以一种什么样的形式存在的?又比如为什么有些页面只能在微信端打开,在电脑上就会出错?(不知道你有没有发现这一点)

当时我的心中充满了无数个类似的问号?当然如果你也是小白,一定有着同样的疑问。

好处是一开始就明确了学习的目的:Web建站。所以我的学习方案基本就是通过做项目学习,哪里不懂就解决哪里,边做边学习,不断推进。另外,由于知道很多成功的网站在用Python做服务器开发,比如知乎,所以我就自然选择了Python。

于是我就开始了我充满着挫败感和成就感的编程之路……

从8月到12月的四个月里,除去本来的工作,为了学习质量,我会保证平均每天4个小时的学习时间,周末也不例外。另外,所有的文档,问答都尽量看英文的,这可以帮你剩下大量的时间。12月13日,我做的网站上线了,3天时间大概有5000人访问了这个网站,我有时在后台看着日志,不免有些心潮喷涌,我想把自己的经验写下来,希望对于那些有心学习编程但无从下手的朋友提供一些帮助和鼓励。

1. 我的自学编程之路

1)基础

刚开始的时候,我对搭建网站一无所知。为了给自己迅速建立一个框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不求精通,只是了解每一项技术是干嘛的,另一方面建立起了一个学习的roadmap,这样大概知道做一个Web App需要哪些知识,分别学习的主次顺序。重点推荐两个资源:

Python基础知识:Learn Python the Hard Way

Web App基础知识:@张秋怡的答案写的通俗易懂,极力推荐。

有了这个roadmap,我明白了前端三大必须掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部过了一遍,然后试着写了几个网页,感觉自己写的很没有底气。于是根据知乎和豆瓣上的推荐,买了《JaveScript DOM》和《Head First HTML与CSS》,边看书边把例子过了一遍。

W3Schools: www.w3schools.com/

JavaScript:JavaScript DOM编程艺术

HTML & CSS : Head First HTML与CSS(第2版)

前端是需要慢慢学习的,在看完上面的资料后,虽然能写出来一些挺漂亮的页面,但是我自己知道很多都是不符合标准的,更不要说代码风格什么的。这只能通过不断地积累和增加代码量来提高。由于明白服务器端需要耗费自己大量的时间,所以在发现自己能够按照构思勉强实现网页之后,我就把学习中心放到了服务器端上。不过每天还是会抽空写一写网页,避免手生。

2)服务器端

最先了解的是HTTP协议,也就是浏览器和服务器之间是如何通信的。也就是当你在浏览器里键入网址按下回车直到网页显示在你浏览器的这个过程中,浏览器和浏览器之间发生了什么事情。这是很有意思的内容,我是以读小说的心情了解了这部分内容。了解这部分后,你就会明白类似为什么有时候会有404页面?在百度搜索框里键入的搜索词是如何提交到百度服务器的?为什么重新登录知乎的时候就不用再输入密码了?之类的问题了。

HTTP协议学习资料:In Introduction to HTTP Basics

@Vamei的博客:协议森林

了解了HTTP协议之后,我就多少有些入迷了。看似神秘难懂的现象其实原理并不复杂,你反而会被吸引。接下来就进入到我投入时间最多的部分了——后端开发。记得当时了解Web开发的MVC(Model-View-Controller)模式后,有一种心血喷涌的感觉,觉得太有意思了(程序员别喷,我就是这么没见过世面)。我们以知乎为例子来说明MVC是个啥:


每个人的主页都是相同的布局和风格,例如最上面的菜单搜索栏,颜色分割,左边显示动态等,右边是个人信息等,然后具体的内容却因人而异——每个人的头像,名字,动态都是不一样的。那么知乎是如何保证每一个人看到的都是自己的主页呢?

你可以把这个相同的布局想象成一个模板,里面有一个个空格子,当你用你的账户登陆页面时,想象你的电脑里有无数个小人根据你的账号从知乎后台的数据库里取出你的头像,动态,认证信息等等内容,然后对应着模板上规定好的位置,把对应的内容填进去。这些小人的动作实在是太快了,以至于你觉得这是在瞬间完成的。

上面所说的模板就是MVC中的V,是View的缩写,负责显示。这样做的好处在于,如果知乎有一天突然想改变一下个人主页的风格,那么只需要改变这一个模板,然后几千万注册用户的主页就相应的变化了,因为模板是公用的,是不是省了很多事情?(早期的Web开发可不是这样哟,你可能要一个个用户去改,非常麻烦。)

而这些小人除了摆放内容,它们真正负责的是业务逻辑,我们把他们叫做Controller,也就是MVC中的C。例如当你登陆的时候,这些小人要检查你的用户名是不是准确的,如果准确,它们要去数据库里取出你请求的信息等,如果用户名错误,它们要拦截住你的登陆。它们的职责还有很多,无法一一列举。在实际中,这些小人做的事情其实就是Python(或者其它脚本语言)做的事情。

最后,MVC中的Model其实就是传给View的数据,包括上面的头像,用户名,动态等因人而异的数据。这些数据在知乎服务器上是以数据库表格(table)的形式存在的,你可以把它们想象成很多不同的excel表格,不同的表格储存着不同的信息,有些记录着知乎用户的个人信息,有些记录着回答,有些记录着评论等等,而这些表格之间又彼此联系,当你在知乎的不同网页间跳转的时候,上面说的那些小人就根据你的要求,组合对应的表格取出对应的数据,然后把他们放到模板对应的空格里,发送给浏览器。然后浏览器根据你写的CSS,用不同的颜色,大小等等,将数据很漂亮的显示出来。

这样做的好处是什么呢?虽然你最终在浏览器里看到的是一个完整的页面,但是在后端逻辑上它们都是区分开的——模型(M),视图(V)和控制器(C)的区分就保证了较高的可维护性——我可以随时修改主页的显示并看到效果,同样我可以随时加入一些业务逻辑。

如果你的学习坚持到这里了,首先要恭喜你。其次你可能已经知道一些非常成熟的Python Web框架了,例如Django,Flask等等,并且你可能看到了很多小白教程教你直接使用,毕竟大部分人可能觉得没有必要重复造轮子。

本来为了省事,我也打算直接用框架。我是在设计数据库的时候,当时在看SQLAlchemy文档,觉得相对自己的项目SQLAlchemy太过复杂,所以我决定自己写自己的ORM(名词不懂没关系),这对于当时的我来说是一件难度非常大的事情。于是我投入了极大的精力每天都在看关于SQL和Python相关的教程和资料,Python核心编程(第二版) 给了我很大的启发。在自己完成了ORM后,又写了URL处理函数,同样没有用任何现成的Web框架。

现在回头看,我认为这一段时间的造轮子是提升编程能力最快的时候。比如为了写ORM,就必须去花很多时间学习SQL,去了解Python里面的metaclass,而如果用一个现成的框架,我很有可能偷懒不去关注某些细节。而不出问题还好,一旦出问题,我就只能跪。另外,造轮子迫使我在开始的时候就构思整个框架,因为我必须尽可能的考虑到所有的情况,于是就会不断的强迫自己完善知识体系,和别人的代码作对比从而改进自己的,这个过程充满了无尽的挫败感,但是得来的成就和快乐也是无可比拟的。

SQL书籍:Sams Teach Yourself MySQL in 21 Days

Python:Python核心编程(第二版)

Github上的优质Python资源:CodementorIO/Python-Learning-Resources

过程中还牵涉到部署,我的网站是跑在Linux上的。关于部署网上有非常多的优质教程,一搜一大把。这里就不再赘述。

这些是我学习大致路线,当然过程中充满着小的磕磕绊绊,虽然网站上线了,貌似运行还比较顺利,但是如果以一个程序员的标准来要求自己,自己依然非常菜鸟。不过我并没有以前那样惧怕技术了,就像你明白魔术的背后的原理后,会更多的思考原理本身。

2. 自学编程需要注意的问题

很多人都推荐小白第一门语言选Python,因为语法简单。这句话只说了一半,Python确实容易上手,对初学者的门槛很低。但我发现,对于小白真正的门槛在于系统知识,这就和用什么语言完全没有任何关系了。例如很多人学完了Python的语法,觉得确实简单,但是转头去用Python标准库的时候,却发现自己连文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。读标准库需要系统知识,比如操作系统,数据库,进程和线程,socket编程,网络协议等等,这些对于编程小白来才构成很高的门槛,但是只有学会这些,才能真正发挥出Python的威力来。

这也是我觉得自己的经历对小白是有价值的一个原因。因为设计一个动态的网页是一个很不错的练手Project。建立网页(Web App)会逼迫你了解从你在浏览器里键入地址按下回车到网页显示在浏览器的过程中,浏览器,网络,服务器都干了些什么。具体到技术上面,你不得不去学习前端的HTML,CSS和JavaScript,后端的脚本,数据库,操作系统等。也就是说,这个过程能够促使你去主动学习上面提到的系统知识,如果你再做另外一个项目,你就不会像现在这样无从下手,而有能力去进行一些技术性的探讨,所以我认为这是一个非常好的练手项目。

1)一定要空出时间补充理论知识

很多人会强调learn by doing,边做项目边学习,这也是我自己采用的方式。在这种方式中,你不断犯错,改正……学习效率非常高。但是,很多人走了极端,最后的结果就是不注意理论知识的学习。你会发现自己Google的能力越来越高,但是真实的编程能力并没有得到提升。如果有这种情况,你需要反思一下。

一种可能是你太过于依赖各种成熟的框架,结果编程就变成了用「胶水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,虽然自己不太懂SQL,但是网站跑的也还不错。这时候如果数据库出现了问题,那你就只能跪了。

另外一种可能是你完全沉浸在做项目中,忽略了学习理论知识。做项目虽然充满困难,但回报是强烈的成就感,很容易沉浸其中。我觉得这是极其错误的。首先半路出家的程序员都没有经过系统的学习,没有形成自己的知识体系,如果你不懂数据结构,算法复杂度,操作系统这些理论,那么你能达到的高度就极其有限。所以,在每天做项目的同时,一定要保证抽出一定的时间,恶补理论知识。这部分的书单在豆瓣和知乎上都有很多总结,可以自行搜索。

2)不要太纠结于无意义的问题,比如什么框架好,XX语言比XX语言好啦这种问题。前期确定了练手项目,就去专心积累代码量,积累基础知识。那些你现在还看不懂的炫酷技术你慢慢也就能明白是怎么回事了,反而没有基础,再炫酷的框架对你而言都是天书。

3)学会发问。好问题是建立在你自己已经实践或者思考的基础上问出来的,这是对自己的负责,也是对别人的尊重。不要一遇到困难就喜欢直接上网搜索:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。

4)学好英语。

THE END


最后,给自己打个广告,如果学英语,一定要关注我。


user avatar   divinites 网友的相关建议: 
      

很多答主在回答这个问题的时候,都忽略了一点:题主的“学习”的终极目的是什么?

程序语言说到底也是一种语言,比如你问:如何系统的学习法语?

你可能是想去法国留学生活;

你也可能是想成为以法语谋生,当翻译;

你还可以想进法国的语言委员会,为某个新词是不是进法语体系进行投票。

Python也一样。其实大部分人问这个问题,就是想学python 基本语法,内置库函数的基本用法和与自己专业相关的某一个或者几个方面包的API用法罢了,比如Django, Numpy, Scipy等等。这个阶段的用户叫做Python User,想做一个熟练的User很容易,跟着上面任何一个高赞回答里面推荐的书或者教程一路顺下来,基本语法,内置库函数就都掌握的基本够用了,在实际工作中应用的库,多查文档,多用google和stackoverflow,没什么困难的,就是一句话“无他,唯手熟尔”。很多目前的Python developer的职位,其实本身只是Python user,因为他们也只是将Python作为一个工具应用到了网站,运维等等方面而已。这个时候你的核心竞争力不是Python,而是你对相关业务的理解能力。扔掉python,让你学另外一门语言,给你一个类似的包,你还是大约的能做类似的事情的,只是顺手不顺手而已;但是这同时也是对你的限制,因为你也对和你业务相关的事情熟悉。大部分语言类教材,也就是教到这一步。

但是如果你不满足于只是应用Python,而希望更进一步,那么你会在工作中发现很多功能抽象出来可以应用到更广泛的范围,这个时候你就可以自己按照PEP的格式编写package,并且对你工作中用的一些package提出Issue或者直接提交补丁。到这个阶段,你可以说是一个Python package developer,因为你开始设计API给其他人用了,能够识别好的API和需要改进的API,能够编写出你认为更好的实现……等等这些,这个时候,你对语言的应用已经算是非常熟练了,抛开你的相关业务不谈,单靠Python的掌握你已经可以谋取一份和你专业不太相关的职业了,这个时候你就达到了职业程序员的水准——你的Python技能不依赖于你熟悉的业务的存在而存在。这个时候要看的教材,很多时候就不是和Python有直接关系了,而是和软件工程有关。

如果你还不满足,你对python本身感兴趣,希望为python语言添砖加瓦,那么你就需要不光精通python,至少还需要精通C,汇编最好也多少会一点,然后还需要了解编译原理等一系列相关的知识,你需要加入python社区的maillist,积极参与大家的讨论,从修改bug入手,渐渐的能够提交feature,进而形成一套自己的程序理念,并且试图用你的理念去和别人争论和妥协,一点点的把你的理念,融入到Python的发展方向上。 这个时候,你才是真正可以说是Python 语言的Developer。这个阶段的书往往非常有限,《Python源码剖析》可能是一个不错的开始。但是这个阶段,书本已经不能帮助你太多了,你其实本质上是一个研究者,面前有广阔的天地等着你自己去探索,然后整理成书发售。


user avatar   joyyiyi-35 网友的相关建议: 
      

本文回答Python初学者都会面临的三个问题:什么是Python,为什么要学Python,如何学习Python。

然后送上几道开胃菜,搭配几点讲解,带你浅尝一下Python的味道。这7个实例你一定似曾相识,可以轻松看懂。

恭喜你,可以尽情享受你的Python盛宴。文末还会加点菜,有免费彩蛋分享。

文章结构图

1.什么是Python?

Python仅仅是其他编程语言的替代品吗?

不,我们认为Python是一种生态语言[1]

Python在计算机生态的大背景中诞生和发展,其简洁和面向生态的设计理念得到了广泛认同,形成了全球最大的单个语言开源编程社区。超过9万个第三方库覆盖了从大数据到人工智能,从文本到虚拟现实等几乎所有的计算领域。

Python能将其他优秀的编程语言封装起来,降低使用复杂度。因此我们认为Python为【生态语言】。

Python语言是一个语法简洁、跨平台、可扩展的开源通用脚本语言。

Python语言诞生于1990年,由Guido van Rossum设计并领导开发,该语言Python命名源于Guido对英剧“Monty Python’s Flying Circus”的兴趣。

2000年,Python 2.0发布。Python社区逐渐发展壮大,对Python的发展推广起到了非常重要的作用。

2008年,Python 3.0发布。Python已成为了一种集合命令式程序设计、函数式编程、面向对象程序设计等多种编程范式于一体的脚本语言。

关于版本的选择,建议使用3.x版本,因为2.x版本官方已于2020年1月停止维护了,新的项目基本都用3.x去写。

2.为什么要学Python?

作为一种神奇而又通用的编程语言,Python已经被成千上万的开发者用来构建各种有趣而有用的项目。在GitHub上,有三个项目[2],引起了我极大的兴趣。

项目一: DeepFaceLab

关注量: 26.4k

复制量: 5.9k

开发者: ieberov

GitHub链接:github.com/iperov/DeepF

DeepFaceLab是一个可以创建深度伪造图像和视频的工具,它让你可以做很多有趣的事情,比如改变、去年龄、交换面孔,你甚至可以改变他们的语音,不过这需要熟练掌握视频编辑软件。

开发者声称,互联网上95%以上的深度假视频都是用这个工具制作的。这个项目非常最有趣。

项目二:Google Images Download

关注量: 7.1k

复制量: 1.7k

开发者: Hardik Vasa

GitHub 链接: github.com/hardikvasa/g

此项目可以让你一次性从谷歌下载数百张图片到你的电脑上。这个工具的工作方式是你安装库,使用命令,用你想要的关键字作为参数,然后让这个工具发挥它的魔力。本质上是在Google Images的索引中搜索指定关键字的图片,一旦找到就下载它们。

看到别的学生还在一张张的找图片,而自己可以自动下载无数美女图片,想想都觉得鸡冻。

项目三:Photon

关注量: 7.9k

复制量: 1.1k

开发者: Somdev Sangwan

GitHub 链接: github.com/s0md3v/Photo

Photon是一个使用Python构建的强大且易于使用的网络爬虫,允许收集和分析从公开或公共来源获得的信息。

Photon可以从众多来源中抓取的信息,包括并不限于:

社交媒体账户、电子邮件;文件,如pdf、png、xml文件,JavaScript文件。

Photon将所有提取的信息有条理的保存起来,而且可以导出为JSON文件。

没错,爬虫正是我学Python的目的。

你可以从网络上抓去你想要的高清无码大片,鸡冻的飞起。

Python的应用范围很广泛,能做的事情很多,几乎涉及所有的程序设计领域,被称为『胶水语言』。在爬虫、数据分析、人工智能等方面,都发挥着不可替代的作用。在办公自动化方面,Python可以让你的办公更加方便和快捷。

另外,Python可以轻松制作游戏,编写一款个性游戏,给家人玩一玩,还可以按照家人的想法设计修改。我想,这是一件无比幸福和自豪的事情。

3.怎样学Python?

3.1Python之父给我们的建议

关于学习python的建议,python之父Guido van Rossum说:

实用主义。如果你过分纠缠数据封装,访问控制、抽象或规范这样的理论概念,你就不是一个真正的 Python 程序员。而且,你会浪费时间在「与语言为敌」上面。什么是与语言为敌,就是你是用 Python 的时候,还试图延续 Java 的使用习惯。你应该去享受它,使用它的特性。如果你信奉即时满足,喜欢极限编程和敏捷开发,那 Python 就是你的最爱。

3.2选定目标,操练起来

光看不练,相当于纸上谈兵。熟能生巧。多多上机实操,找一本参考书,按照书上的实例,自己敲代码复现。

有一定的编程基础后,找一个感兴趣的项目,可以是一个小游戏或者爬虫项目,自己编写代码实现一遍。 遇到不懂得及时查找资料。

操练起来吧,有目标的操练永远是学习编程的不二法门。

3.3善用Github

作为开源代码库,Github拥有超过900万开发者用户。上面有大量的Python开源项目,找一个感兴趣的项目实现一下,遇到问题及时查找资料,Python水平会得到很大的提升。

说到学Python,Github上有一个【Python - 100天从新手到大师】的项目另我印象深刻。

项目: Python-100-Days

关注量: 104k

复制量: 41.3k

开发者: jackfrued

GitHub链接:

github.com/jackfrued/Py

作者 @Python-Jack 说:

Python是一个“优雅”、“明确”、“简单”的编程语言,非专业人士也能上手。
然后,给初学者提了几个建议:
· Make English as your working language. (让英语成为你的工作语言)
· Practice makes perfect. (熟能生巧)
· All experience comes from mistakes. (所有的经验都源于你犯过的错误)
· Don't be one of the leeches. (不要当伸手党)
· Either outstanding or out. (要么出众,要么出局)

3.4网络学习资源

1.廖雪峰的Python教程

网址:liaoxuefeng.com/wiki/10

这是针对小白的Python新手教程,对新手比较友好,有完整示例。针对以下用户设计[3]

· 会使用电脑,但从来没写过程序;
· 还记得初中数学学的方程式和一点点代数知识;
· 想从编程小白变成专业的软件架构师;
· 每天能抽出半个小时学习。

2.Python官方文档

最权威的当然就是Python官网了,上面提供Python的下载以及官方文档。官方文档不一定适合初学者,但是任何一本参考书或者教程,都不可能有官方文档那么的全面、准确、权威。有的参考书可能针对初学者,有的比较通俗易懂有自己的特色,它们都是针对特定的人群设计的。

Python官网地址:python.org/

不喜欢看英语的可以看看Python官方中文文档:

docs.python.org/zh-cn/3

python-china.com/

3.蓝桥云课

网址:lanqiao.cn/courses/

2020年,实验楼和蓝桥教育合并,形成蓝桥云课。在线做实验,高效学编程。提供实验、挑战、考试、视频、直播、课件等多种模式的综合学习体验,并结合竞赛与社区互动让学习更有趣。

3.5参考书籍

1.Eric Matthes《Python编程从入门到实践》

作者Eric Matthes是高中科学和数学老师,他从5岁开始,就一直在编写程序。他现居住在阿拉斯加,在当地讲授Python入门课程。本书是结合作者学习和教学经验写作而成的,旨在帮助小白成长为一名专业的程序员。

在本书的第一部分,你将会学习用Python编程所必须了解的基本概念,这部分的知识能够让你开发更大和更复杂的项目。

第二部分将第一部分学到的知识,讲解如何开发三个项目:包括简单的Python 2D游戏开发;数据可视化;以及创建和定制简单的名为“学习笔记”的Web应用。

本书是一本针对所有层次的读者而作的Python入门书,也是我正在用的书,里面的内容确实通俗易懂。

B站还有配套视频:bilibili.com/video/av35

2.Warren Sande《父与子的编程之旅

本书中,Warren和Carter父子以亲切的笔调、通俗的语言,透彻全面地介绍了计算机编程世界。

父子俩以简单易学的Python语言为例,通过可爱的漫画、有趣的例子,生动地介绍了数据变量、循环、输入和输出语句、数据结构以及图形用户界面等编程的基本概念。

父子俩由简入难,直到教会我们编写程序,甚至会制作有趣的游戏。适合初学者。

3.Wesley Chun《Python 核心编程》

本书全面涵盖了当今应用开发中的众多领域,为中级Python开发人员提供实践方法,指引了无数读者入门并提高的Python经典书籍,被誉为提高Python技能的必读书。本书并不适合初学者,适合具有一定经验的Python开发人员阅读。

本书主要分为3部分:第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、多线程编程、GUI编程、数据库编程以及Microsoft Office编程等内容;第2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、Django Web框架、云计算、高级Web服务等内容;第3部分则为一个补充/实验章节,包括文本处理以及GUI开发实例等一些其他内容。

4.几个简单的Python小菜

这部分通过一系列简单的Python上机实操实践,带你快速的尝一尝Python的味道,不求深入,只求简洁,高效。

以下七个实例部分来源于网络[4],有改动,注释部分参考书籍[5]

4.1第一个程序

       # PY01.py s=input("Input your name:") print("hello,%s" % s)     

运行结果:

Input your name:Three yang

hello,Three yang

注解:

#为单行注释,三个单引号为多行注释;

input("字符串"):显示"字符串",让程序赞同运行,并等待用户输入.后,存在变量s中;

print()函数:打印字符串;

Ctrl+z:撤销操作。

4.2数据类型

       a=3 b="yang" c=str(a)+b d="13" e=a+int(d) print ("c is %s,e is %i,b is %s" % (c,e,b))     

运行结果:

c is 3yang,e is 16,b is yang

注解:

用int和str函数可将字符串和数字进行转换;

字符串可以用“+”相加;

print()函数打印多个参数的方式。

4.3列表

       # PY102.py #列表操作  #定义列表 word=['a','b','ct','d','e','f','g']  #访问列表元素 a=word[2] print ("a is: "+word[2].title()) b=word[1:3] #print ("b is: "+b) print ("b is: ",b) # index 1 and 2 elements of word. c=word[:2] print ("c is: ",c) # index 0 and 1 elements of word. d=word[0:] print ("d is: ",d) # All elements of word.  #列表合并 e=word[:2]+word[2:] print ("e is: ",e) # All elements of word. f=word[-1] print ("f is: ",f) # The last elements of word. g=word[-4:-2] print ("g is: ",g) # index 3 and 4 elements of word. h=len(word) print ("Length of word is: "+ str(h))  #修改元素 print ("amend element") word[1]='bb' print ("g is: ",word)  #添加元素 print ("Adds new element") word.append('h') print (word)  #插入元素 print ("Insert new element") word.insert(1,'gg') print (word)  #删除元素 print ("delete element") del word[0] print (word) del word[1:4] print (word)     

运行结果:

a is: Ct

b is: ['b', 'ct']

c is: ['a', 'b']

d is: ['a', 'b', 'ct', 'd', 'e', 'f', 'g']

e is: ['a', 'b', 'ct', 'd', 'e', 'f', 'g']

f is: g

g is: ['d', 'e']

Length of word is: 7

amend element

g is: ['a', 'bb', 'ct', 'd', 'e', 'f', 'g']

Adds new element

['a', 'bb', 'ct', 'd', 'e', 'f', 'g', 'h']

Insert new element

['a', 'gg', 'bb', 'ct', 'd', 'e', 'f', 'g', 'h']

delete element

['gg', 'bb', 'ct', 'd', 'e', 'f', 'g', 'h']

['gg', 'e', 'f', 'g', 'h']

注解:

列表:列表是一系列按照一定顺序排列的元素组成,元素包括任意类型的值。

title()函数:以首字母的形式显示字符串;

word[1:3]:索引从第0个开始起算,[1:3]相当于[1:3);

列表长度和元素动态变化。

4.4字典

       # PY103.py #字典  #创建字典 x={'a':'aaa','b':'bbb','c':12} #访问字典 print (x['a']) print (x['c']) #添加键-值对 x['d']='ddd' print (x['d']) #修改字典值 x['d']='dee' print (x['d']) #删除键-值对 del x['d'] print (x) #遍历字典  '''for key in x:     print ("Key is %s and value is %s" % (key,x[key])) ''' for key,value in x.items():  print ("
key:"+key)  print("value:"+str(value))     

运行结果:

aaa

12

ddd

dee

{'a': 'aaa', 'b': 'bbb', 'c': 12}

key:a

value:aaa

key:b

value:bbb

key:c

value:12

注解:

字典:键和值是一种映射关系,字典就是一系列的键值对;

Python不关心键值对的顺序,只关心他们之间的对应关系;

items():返回键值对列表。

遍历字典中的键可用keys()函数,遍历字典中的值可用values()函数。

4.5条件和循环

       # PY103.py #条件和循环 #条件语句 x=int(input("Please enter an integer:")) if x<60:  print ("The score is bad") elif x<80:  print ("The score is so") else:  print ("The score is good")  # 遍历循环 a = ['Three', 'yang', 'kaitai'] for x in a:  print (x, len(x))  #无限循环 current=1 while current<=3:  print(current)     current+=1     

运行结果:

Please enter an integer:78

The score is so

Three 5

yang 4

kaitai 6

1

2

3

注解:if-else基本的条件语句:在条件测试通过执行一个操作,未通过时执行另一个操作;

While循环:针对集合中的每个元素的代码块,While循环不断执行,直到指定条件不满足为止。

4.6一个简单的函数

       #定义函数 def get_fulled_name(first_name,last_name):  full_name=first_name+' '+last_name  return full_name.title()  #返回全名  #调用函数 while True:  print("
Please tell me your name:")  print("enter q to quit")     fir_name=input("first name:")  if fir_name=='q':  break  la_name = input("last name:")  if la_name == 'q':  break  fulled_name=get_fulled_name(fir_name,la_name)  print("
hello, "+fulled_name+"!")     

运行结果:

Please tell me your name:

enter q to quit

first name:three

last name:yang

hello, Three Yang!

Please tell me your name:

enter q to quit

first name:

注解:

函数:是带特定名字的代码块,用于完成具体的任务。需要多次执行同一任务时候,可以使用函数;

定义函数中用的两个参数first_name,last_name为形式参数,调用函数用的两个参数fir_name,la_name为实参。

4.7文件处理

       import json  string=['Three','33',55]  filename='string.json' with open(filename,'w') as f:  json.dump(string,f)  with open(filename) as f:  string=json.load(f) print(string)     

运行结果:

['Three', '33', 55]

注解:

该程序使用json.dump()来存储列表,用json.load()来读取json文件。

学习资料来了:

我有很多学习资料可与大家分享, @三阳开泰

Life is short, you need Python

如果本回答对你有益,不妨点个赞再走。


【创作声明】:该文章首发于同名公众号,著作权归作者所有,如需转载,请标注来源,三阳开泰,它有自动回复功能。

参考

  1. ^ 嵩天.Python语言程序设计基础.[M].高等教育出版社.2016.
  2. ^ https://www.cnbeta.com/articles/soft/1051515.htm
  3. ^ https://www.liaoxuefeng.com/wiki/1016959663602400
  4. ^ http://www.cnitblog.com/yunshichen/archive/2009/04/01/55924.html
  5. ^ Eric Matthes.Python编程从入门到实践[M].人民邮电出版社2020.

user avatar   jing-lue-ji-zhi 网友的相关建议: 
      

人类的大脑实在太神奇了。

我出生以来,它24小时不间断工作,但却偏偏在考试的时候,大脑会猛的开始循环播放各类沙雕歌曲。

不会的题越多,想起的歌词越多。

题目越难,想起的歌词越沙雕。


user avatar   li-jin-33-15 网友的相关建议: 
      

人类的大脑实在太神奇了。

我出生以来,它24小时不间断工作,但却偏偏在考试的时候,大脑会猛的开始循环播放各类沙雕歌曲。

不会的题越多,想起的歌词越多。

题目越难,想起的歌词越沙雕。




     

相关话题

  职场新人应该干不属于自己的活儿吗? 
  如何看待网传字节跳动本月第二起员工抢救事件,现状如何? 
  怎样成为全栈工程师(Full Stack Developer)? 
  微软允许员工永久在家办公,互联网行业距离全面远程办公还有多远,有哪些挑战? 
  公司领导让我打扫办公室卫生,可以拒绝吗? 
  你有哪些从「源头」着手,正面解决职场压力的经历? 
  你目前写出的最大的 Bug 是怎样的? 
  如何把文章写的所有人都看不懂? 
  有报告称四成年轻人愿为不加班而降薪跳槽,如何看待这一情况?你跳槽的原因是什么? 
  我试图用 C 语言的共用体来实现 Base64 编码,为什么失败了? 

前一个讨论
如何看待男子设计生产枪支配件并以「通厕器握把」名义销售,一审被判 13 年?
下一个讨论
如何评价毕赣电影《地球最后的夜晚》?





© 2024-12-18 - tinynew.org. All Rights Reserved.
© 2024-12-18 - tinynew.org. 保留所有权利