V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zqm840527
V2EX  ›  程序员

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

  •  
  •   zqm840527 · 175 天前 via Android · 6835 次点击
    这是一个创建于 175 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是个编程纯小白,在自学 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  
       175 天前
    入门书籍
    能入门
    就是入门好书

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

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

    摘自译者序

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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


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