V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zqm840527
V2EX  ›  程序员

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

  •  
  •   zqm840527 · 3 天前 via Android · 4654 次点击
    我是个编程纯小白,在自学 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  
       3 天前
    入门书籍
    能入门
    就是入门好书

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

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

    摘自译者序

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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


    3. 我无法用足球或者开车解释,勉强用厂子解释吧。面向对象是一种编写代码的组织方式。
    这么说吧,我开个小厂,总共就我和家里人,我不用学管理(不用管很复杂的构建编程技巧),陈设摆放机床反正就直接拿别人搞好的直接套用(用了别人写好的库),税务报账也直接让我亲戚代管(找别人帮我写个类我只管用)。一切从简,这个厂能运行能赚钱就是好事不是吗。
    但是哪天你说要开始扩建了,招个一百个人,陈设,管理,薪资,食宿,现金财务分离等等等等,还是要学习一套架构去管理(面向对象就是这套架构的方法论的一种)否则容易一团乱麻解不开
    yh7gdiaYW
        39
    yh7gdiaYW  
       2 天前
    yield 确实讲不讲无所谓,class ,self ,__init__这几个不讲这书可能过于入门了,建议换一个
    akin520
        40
    akin520  
       2 天前
    入门,写个脚本,完全用不这些, 那些都是高级教的:)
    huyu
        41
    huyu  
       2 天前
    我一般都直接函数,面向对象用的太少了
    showchys
        42
    showchys  
       2 天前
    这些 class yield 都是为了复用 没有也可以替代,就像一个 LOL 的快捷施法一样.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2896 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:53 · PVG 20:53 · LAX 05:53 · JFK 08:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.