为什么有一些 Python 入门书不教 class, yield, self 之类的方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zqm840527
V2EX    程序员

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

  •  
  •   zqm840527 2024-06-30 19:05:06 +08:00 via Android 8690 次点击
    这是一个创建于 500 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是个编程纯小白,在自学 Python 。选的入门书是《 Python 编程快速上手让繁琐工作自动化》。这本书在众多的 Python 自学建议里都被提及,豆瓣评分也不错。但我发现,看不少视频教程,或者其他人的代码里,经常看到 class ,yield ,self ,__init__之类的方法(我也不知道该管他们叫什么,暂且统称方法吧),但是在《 Python 编程快速上手让繁琐工作自动化》里似乎完全没有提及。我大致看了一下这几个方法的教程和视频,发现确实看不懂。我有几个问题:

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

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

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

    请大神们指点迷津。
    42 条回复    2024-07-01 17:21:25 +08:00
    ivslyyy
        1
    ivslyyy  
       2024-06-30 19:37:55 +08:00
    入门书籍
    能入门
    就是入门好书

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

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

    摘自译者序

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

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


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

    我给你推荐一个在线文档: https://www.pythontutorial.net/
    虽然是英文的,但是遣词造句都很简单,基本上你只要把 Basics 和 OOP 的部分看完就可以尝试用 Python 解决一些问题了。
    smallboy19991231
        9
    smallboy19991231  
       2024-06-30 20:05:20 +08:00
    是推去 CS61A,主要是程,副物是 Python 言,如果是初者程都不,就要好好打基了,CS61A 符合.
    如果不是初者,程,只是其他言, Python,那不如好好看官方的法手,不前提是自己的程能力有信心.如果你程都不,一上就是法手,那就了,搞程和言都不.
    CS61A 是程能力和 Python 言合一身的一伯克利大名校的程,前置件是高中基,如果是高中水平,那非常合你入程 AND Python!
    smallboy19991231
        10
    smallboy19991231  
       2024-06-30 20:17:07 +08:00
    @smallboy19991231 再一下,辣籍和源就不用看了,作者籍直接杜,在算籍可以防掉 99%的低量,不是有而是很少,最好公的入典,不止要在豆瓣看分,要在 Goodread 上看,源的料必要是很出名的那,否你在某站看到推一股就直接很容易掉坑,必是到都有到都好的那,最後就是搜索源的前置要求,因大多典的前置知要求特高,有些是,有些是的,些源在於你只要前置要求基可以那起也不太困,最後是看定位,源和籍可以分大,科普,系入,系.科普就小看得了,不要妄想能到什,系入大多是零基即可,是典好的第一,但是是有需要一些前置件,比如什的,CS61A 就是此.最後一系就像於字典一,每都很深入,需要高智商和一些此域的基入才收巨大,一般自不用考.
    Sawyerhou
        11
    Sawyerhou  
       2024-06-30 20:20:03 +08:00
    你说的没有的那些是 面向对象,没有这部分对于办公自动化来说,基本上没什么影响。

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

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

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

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

    https://imgur.com/a/vLysoMK
    NoOneNoBody
        20
    NoOneNoBody  
       2024-07-01 01:56:04 +08:00   1
    好像还没入门?这不是一句 diss 的话
    class ,yield ,self ,__init__ 是完全不同的东西

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

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

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

    简单说你现在连人员情况都没搞清楚,你想踢足球,但找到的人都是惯用手的篮球运动员,场地也是篮球场,在没搞清队员能力和环境,就连足球队都建不起来,更加别说踢球了
    这些东西是会用到的,只是最开始先要找会踢球的人、能踢球的地方,训练……当有了这些基础,才适合去学习球队管理、请教练、注册为职业队,去打正式比赛
    dearmymy
        21
    dearmymy  
       2024-07-01 02:50:16 +08:00   1
    @TimePPT 这本书非常好啊,让我彻底告别之前 c 风格 python
    dayeye2006199
        22
    dayeye2006199  
       2024-07-01 05:35:46 +08:00
    你是不是在找 fluent python
    visper
        23
    visper  
       2024-07-01 09:01:55 +08:00
    你需要 21 天精通 python?
    fbichijing
        24
    fbichijing  
       2024-07-01 09:22:18 +08:00
    不要企图用一个软件去解决所有问题。书籍也是。
    TimePPT
        25
    TimePPT  
    PRO
       2024-07-01 09:23:01 +08:00 via Android
    @dearmymy 是的,概念和实践相结合,简单易懂,朱雷大佬是真牛
    laikicka
        26
    laikicka  
       2024-07-01 09:34:27 +08:00
    @smallboy19991231 质量 (X) 品质 (√)
    augustheart
        27
    augustheart  
       2024-07-01 09:38:47 +08:00
    入门书没法面面俱到的。打个比方,你准备写一本入门书,然后所有语法点都讲了,最后你发现那本书的厚度就够劝退入门者了
    又比如说,我个人自学 c/c++的第一个最大关卡是怎么编译一个项目,我不能说 c language pragma 里面没讲怎么在 windows 上用 mingw 编译就说这书垃圾对吧?
    ps:我还真是在一本名叫 21 天精通 c++的书上学会怎么编译和写 makefile 的
    HashV2
        28
    HashV2  
       2024-07-01 09:45:18 +08:00
    看这本书的名字是教写自动化脚本的,没必要花大量篇幅去教面向对象。
    asm
        29
    asm  
       2024-07-01 09:48:20 +08:00
    其实 python 作为面向过程编程也是相当不错的,何必去追去用不上的呢。等你需要的时候,会自然而然的学会的并用上的。
    l1xnan
        30
    l1xnan  
       2024-07-01 09:50:18 +08:00
    确实已经能干活了,有点追求就再学点中高级的内容。我们这边有用 Python 搞了几年数据分析的,代码没什么组织,风格还是面条式的一个函数套一个函数,一个函数几百行,一个文件几千行,出现 class 都是罕见的
    vialon17
        31
    vialon17  
       2024-07-01 10:17:29 +08:00
    我直接拿了 flask 的狗书给我朋友入门,哈哈。
    flask web development -- developing web applications with python
    jqtmviyu
        32
    jqtmviyu  
       2024-07-01 10:27:17 +08:00
    @laikick #25 哈哈, 模仿语言警察是吧
    jqtmviyu
        33
    jqtmviyu  
       2024-07-01 10:31:01 +08:00
    面向过程当个脚本小子不好吗?

    刚学习 python 拿了个 giithub 上的项目 autobangumi 开改, 面向对象的写法还是看懂, 但是新分支引入协程就一脸问号了.我直接放弃.
    haose
        34
    haose  
       2024-07-01 12:49:55 +08:00
    书籍的话 《流畅的 Python 》还是不错的
    deplives
        35
    deplives  
       2024-07-01 12:55:25 +08:00
    这个书好评很高么? python 相关的书籍我只认 Fluent Python
    msg7086
        36
    msg7086  
       2024-07-01 14:01:20 +08:00
    这本书的书名我拿 AI 翻了一下:
    《 Python 自动化办公,给小白的实用编程》
    他的目标是让你把办公工作自动化,只是自动化的时候用到了 Python ,所以教你个皮毛,能把工作自动化了就完事了。就像 Excel 办公教程,也不一定都会教你怎么写 VBA 代码,毕竟大多数人用 Excel 撑死也就写写公式做做过滤画点图也就完事了。
    Spute
        37
    Spute  
       2024-07-01 14:05:52 +08:00
    推荐:《 python 编程:从入门到实践》
    https://weread.qq.com/web/reader/19532980715c01921954a54
    nevermoreluo
        38
    nevermoreluo  
       2024-07-01 14:06:44 +08:00
    以下回复针对 op 说的只是为了提高工作效率的目的

    1. 这本书在教我们怎么用 python 面向办公软件常见的场景用简单代码处理问题。
    至于 class,self,__init__都是在自己想构建一个面向对象的工程时才会用到。
    可以认为再进一步,觉得目前这本书掌握了之后,想更好的组织和认识自己的代码的时候,可以考虑的事情。


    2. 至于能不能绕,如果只是自己用用的,能绕都可以绕,如果是自己用,只用保证自己功能正常的话,自己的代码可以完全不用面向对象也可以。(但是不可避免的需要用到别人的库,这个时候看懂看不懂就是另一回事情了,毕竟不是所有库都有完善易懂的文档的)


    3. 我无法用足球或者开车解释,勉强用厂子解释吧。面向对象是一种编写代码的组织方式。
    这么说吧,我开个小厂,总共就我和家里人,我不用学管理(不用管很复杂的构建编程技巧),陈设摆放机床反正就直接拿别人搞好的直接套用(用了别人写好的库),税务报账也直接让我亲戚代管(找别人帮我写个类我只管用)。一切从简,这个厂能运行能赚钱就是好事不是吗。
    但是哪天你说要开始扩建了,招个一百个人,陈设,管理,薪资,食宿,现金财务分离等等等等,还是要学习一套架构去管理(面向对象就是这套架构的方法论的一种)否则容易一团乱麻解不开
    yh7gdiaYW
        39
    yh7gdiaYW  
       2024-07-01 14:21:07 +08:00
    yield 确实讲不讲无所谓,class ,self ,__init__这几个不讲这书可能过于入门了,建议换一个
    akin520
        40
    akin520  
       2024-07-01 15:11:13 +08:00
    入门,写个脚本,完全用不这些, 那些都是高级教的:)
    huyu
        41
    huyu  
       2024-07-01 16:52:22 +08:00
    我一般都直接函数,面向对象用的太少了
    showchys
        42
    showchys  
       2024-07-01 17:21:25 +08:00
    这些 class yield 都是为了复用 没有也可以替代,就像一个 LOL 的快捷施法一样.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1016 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:45 PVG 02:45 LAX 10:45 JFK 13:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86