为什么有一些 Python 入门书不教 class, yield, self 之类的方法?

5 天前
 zqm840527
我是个编程纯小白,在自学 Python 。选的入门书是《 Python 编程快速上手——让繁琐工作自动化》。这本书在众多的 Python 自学建议里都被提及,豆瓣评分也不错。但我发现,看不少视频教程,或者其他人的代码里,经常看到 class ,yield ,self ,__init__之类的方法(我也不知道该管他们叫什么,暂且统称方法吧),但是在《 Python 编程快速上手——让繁琐工作自动化》里似乎完全没有提及。我大致看了一下这几个方法的教程和视频,发现确实看不懂。我有几个问题:

1 、请问为什么这么受好评的入门书里面不教这几个方法?

2 、如果我不学这几个方法,未来会遇到什么问题?是否只是代码会写得繁琐一点,但还是能绕过去?(我学 Python 不是为了就业当程序员,只是为了提高工作效率)

3 、可否用踢足球或者开汽车来类比一下这些方法?是否这些方法是类似于倒钩射门或者甩尾漂移?普通人一辈子都不会用到,不学无妨?还是说相当于 40 米远射?我射不了那么远,但可以麻烦一点多传几脚到禁区内再射门?

请大神们指点迷津。
4762 次点击
所在节点    程序员
42 条回复
ivslyyy
5 天前
入门书籍
能入门
就是入门好书

入门之后
还要继续学
才有非入门级别的东西
这不是显而易见吗?

答案在题目里
hefish
5 天前
估计 op 是希望有一本书,21 天从入门到精通。。。我记得我上大学那时候就有很多,
比如 turbo c 从入门到精通,windows 3.1 从入门到精通,dos 6.2 从入门到精通,autocad 12 从入门到精通。。。
实际上感觉这就是一入门,精通不了的。
butanediol2d
5 天前
"本书是面对编程初学者的书,假定读者没有任何编程知识。在简单介绍 Python 编程语言的基本知识后,就开始用一个接一个的例子,教我们如何用 Python 来完成一些日常工作,利用计算机这个强大的工具,节省工作时间,提高工作效率,避免手工操作容易带来的错误。"

摘自译者序

感觉这本书是写给并非靠写代码吃饭的人,提高他们自己应用场景中的工作效率的。对于这些人和使用场景来说,比较符合你举的例子。

class (或者面向对象),yield (或者"协程")之类等等概念,更多的是为了搞定复杂项目,在这些使用场景下可能确实不是必须的。
wangfeng3769
5 天前
别指望一本书学会所有的方法,慢慢来。打好基础最重要。
amlee
5 天前
我看了一下这本书的目录,它第一部分的基础太简单,甚至是是简陋,完全不够。
第二部分的示例倒是挺好,很具体,很适合给新手展示你能做什么。


这本书入门完全不够,大概情况会是一旦你想脱离第二部分的使用场景,想要自己做点东西,就会无从下手
TimePPT
5 天前
kaneg
5 天前
yield 可以不讲,使用场景是比较小,但 class 还是比较基本的,面向对象是 python 的一大特色,不然只能写写面向过程的程序
rimwindy
5 天前
没听说过这本书,看了下目录感觉一般般啊😂
我觉得小白的话倒没必要专门买书看,照着网上的文档入个门,找些实用的案例对着敲或许更有效率,遇到不会的知识点可以再去搜索或者直接问 chatGPT 。

我给你推荐一个在线文档: https://www.pythontutorial.net/
虽然是英文的,但是遣词造句都很简单,基本上你只要把 Basics 和 OOP 的部分看完就可以尝试用 Python 解决一些问题了。
smallboy19991231
5 天前
還是推薦去學習 CS61A,主要是學編程,副產物是 Python 語言,如果是初學者連編程都不會,就要好好打基礎了,CS61A 符合.
如果不是初學者,會編程,只是學過其他語言,沒學過 Python,那還不如好好看官方的語法手冊,不過前提是對自己的編程能力有信心.如果你連編程都不會,一上來就是語法手冊,那就廢了,這樣搞連編程和語言都學不會.
CS61A 是編程能力和 Python 語言結合一身的一伯克利大學名校的課程,前置條件是高中數學基礎,如果妳是高中數學水平,那麼非常適合你入門編程 AND Python!
smallboy19991231
5 天前
@smallboy19991231 再說一下,辣雞書籍和網絡資源就不用看了,國內作者書籍直接杜絕,在計算機類書籍可以防掉 99%的低質量書,不是說沒有而是很少,最好選公認的入門經典,不止要在豆瓣看評分,還要在 Goodread 上看,網絡資源的學習資料必須要是很出名的那種,否則你在某個網站看到推薦一股腦就直接學很容易掉坑,必須是到處都有到處都說好的那種,最後就是搜索這個資源的前置要求,因為大多數經典的前置知識要求特別高,有些是數學,有些是別的,這些資源在於你只要前置要求基礎可以那麼學起來也不會太困難,最後是看定位,資源和書籍可以分為幾大類,科普,系統入門,系統進階.科普書就當個小說看得了,不要妄想能學到什麼,系統入門類大多數是零基礎即可學習,這種是經典好書的第一選擇,但是還是有個別需要一些前置條件,比如數學什麼的,CS61A 就是此類.最後一種系統進階類就像當於字典一樣,每個都很深入,需要高智商和一些此領域的基礎入門才會收穫巨大,一般自學不用考慮這種.
Sawyerhou
5 天前
你说的没有的那些是 面向对象,没有这部分对于办公自动化来说,基本上没什么影响。

面向对象用于封装大型程序,一般的自动化功能比较单一,逻辑简单,没有这个需求。
noahlias
5 天前
因为这个的一部分属于高级范围了 建议看 fluent python 或者 python cookbook
任何东西都是从基础开始,不可能一开始就给你讲复杂的,你想进阶就得持续学习
另外上面提到的 cs61a 是很好入门编程领域的课程
Vegetable
5 天前
因为书名翻译的不好。

Automate the Boring Stuff with Python: Practical Programming for Total Beginners

你再看英文原版书名,人家重点就不是 Python
wheat0r
5 天前
师傅带进门,修行靠个人
ClericPy
5 天前
入门能写点面向过程就足够了。像面向对象,函数式,设计模式这些玩意,我上学时候也死背,完全看不懂,不踩几次大坑根本没法感同身受
echo0x000001
5 天前
这么说吧,通过书名看起来这本书的目的是教人做一个工具,而 class 是用来制作工具的工具,面向的场景不一样,所以它不会讲这部分内容。
maythrive
5 天前
对于 OP 的几个问题:

1. 个人水平有限,不好回答。但就我自己看的一些课程或者是教材,都会先从最简单的东西开始教,变量,条件控制,循环……这些是基础;然后是面向过程的编程方法;再到面向对象的编程方法;然后再到其他更高级的内容(比如多线程?)或者更具体的应用(比如 Django 网页开发);而像 class 关键字、__init__方法都属于面向对象的范畴了,所以作为入门书籍,可能不打算深入到这一部分内容,就没有提及。
2. 对于提高工作效率这样的场景,应该是可以这么认为的;
3. 可能更像是第二种比喻,虽然也不是很准确,它是编程思想上的不同(怎么踢),不是能力上的不同(能踢多远)。但确实可以用比较复杂的办法实现类似的功能(多踢几脚)。
Orenoid
5 天前
这本书是为了帮助你快速上手,让你学会用 Python 开发一些实用的小工具,本身就不是系统教程
fyq
5 天前
在 Amazon 上对于这一套书有一个分类,你看的是 Beginner ,也就是入门,你说的那些东西是学完基本概念之后应该去进阶( Intermediate )部分继续深入学习的了。

https://imgur.com/a/vLysoMK
NoOneNoBody
5 天前
好像还没入门?这不是一句 diss 的话
class ,yield ,self ,__init__ 是完全不同的东西

class 是用来定义类的
类里面用 def 定义方法,其中特殊(名称固定)的其中之一是__init__方法
当执行了 __init__ 后类可实例化,这时 self 才有意义
yield 是语句,可以在 def 定义的方法或函数内实现不同于 return 的返回

class 是球队
def 组织队员的职能(如前锋、中场、后卫)
yield 是球队训练的一项目标技能:让球过了网
self 是球队的自称,但只有注册后登记为职业队后使用才有意义
__init__ 是球队去相关协会注册职业球队、职业球员的过程,根据人员配备情况可注册为足球队、篮球队、排球队……
没有__init__的话是可变化的球队,打篮球也行、踢足球也行、打排球都行(能按规则把球弄过对方的网就是了),但肯定是非职业比赛了

入门先搞懂变量、语句、表达式、函数这些
如果有多个关联的函数需要统一管理,例如需要使用共同变量、传递结果、互相调用等等,这时可以设置类来封装,如果要实例化、对象化一个类,例如设置初始的共用变量,才需要__init__

简单说你现在连人员情况都没搞清楚,你想踢足球,但找到的人都是惯用手的篮球运动员,场地也是篮球场,在没搞清队员能力和环境,就连足球队都建不起来,更加别说踢球了
这些东西是会用到的,只是最开始先要找会踢球的人、能踢球的地方,训练……当有了这些基础,才适合去学习球队管理、请教练、注册为职业队,去打正式比赛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX