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

有关 Python 的疑问

  •  
  •   sonnyclarity492 · 358 天前 · 1462 次点击
    这是一个创建于 358 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:非计算机科班出身,目前忙于科研论文写作;完整深入的学习了 C 语言; Python 学习了基本的判断、循环、函数,换句话说,只会 C 语言那套;没有学习面向对象的知识。

    疑问 1:Python 中有很多语法糖,例如 enumerate() 和 zip() 函数。举这两个例子是因为我不会用,但 copilot 给出了提示,结果也确实好用且正确。有必要针对这种语法糖深入学习吗?

    疑问 2 ,是否有必要完整学习 Python 的语法?举个数据分析的例子。

    在使用列表时,如何区分 ['A'], ['A', 'B', 'C'] 以及 [['A'], ['B'], ['C']]。
    
    元组又是什么?为什么有时限定元组输入,和列表有何区别?即 (1, 5) 和 [1, 5] 有何区别?
    

    疑问3:研究中涉及到修改某个库中的参数,将输出改为 3 位小数。网络上查找了相关资料,用一个自定义函数继承,然后再修改,然而我看不懂,最终直接修改了库代码。

    目前暂时就这三类问题,恳请各位大佬解释。

    16 条回复    2024-01-05 10:24:55 +08:00
    taogen
        1
    taogen  
       358 天前   ❤️ 1
    已知 OP 为了写论文学习 Python 。我的回答是:

    1. 不需要。代码写多了自然会选择最简单的方式。
    2. 不需要。看下常用基础,够用就行。Learn Python in Y minutes https://learnxinyminutes.com/docs/python/
    3. 代码能跑就行。
    coderluan
        2
    coderluan  
       358 天前   ❤️ 1
    没必要完全学,一般学下数据类型,逻辑运算,常用函数就行,而楼主你提的问题就是普通的数据类型和常用函数,不涉及什么语法糖或者完全语法,都是入门问题,得学。
    adoal
        3
    adoal  
       358 天前   ❤️ 1
    顺便说一下,enumerate 和 zip 不是语法糖,也跟你“没有学习面向对象的知识”无关。可以算是函数式编程(跟面向对象编程平等的另一种范式)里比较基础的用法。
    iyaozhen
        4
    iyaozhen  
       358 天前   ❤️ 1
    1. 可以不学,正常写(多层) for 循环也行
    2. 你说的这个和完整语法没啥关系,['A'], ['A', 'B', 'C'] 以及 [['A'], ['B'], ['C']] 就是不一样的东西,一下子也不知道怎么给你解释(因为我 C 忘的差不多了)。基础的语法还是得学一学。元组你可以不了解,只用 list 就行
    3. 这个问题信息太少。改源码的事情怎么说呢,如果你是一次性的,就干吧。我们做工程的一般不这样,因为项目会持续迭代。

    最后你说的这些和面向对象没啥关系,再说 python 照样可以面向过程的函数式
    Lee2019
        5
    Lee2019  
       358 天前   ❤️ 1
    如果后面不打算找 python 开发相关的工作,个人任务三个问题的答案是:
    1 ,不需要
    2 ,没必要,能把论文的数据跑出来就行。
    3 ,继承还直接改源码都可以,其实你都改源码了,直接把继承一样的,殊途同归,能跑通就行,缺点就是你的代码换一个环境就跑不起来了,还得现去改依赖库的源码。
    SeaRecluse
        6
    SeaRecluse  
       358 天前
    1.不需要 语法糖太多的代码我一般 pr 都不给过,维护成本高
    2.请用矩阵的思维去看 list ,对于 UP 举例这三个是 1*1 1*3 3*1 的区别。元组数据一般是为了保证数据无法修改,你把它看成 const list 就好了。通常情况下你用 list 足够
    3. 没有理解你的意思,你只是需要最终输出的精度修改吗?那只要输出后再用个 round(out_ret, 3)不就好了
    sonnyclarity492
        7
    sonnyclarity492  
    OP
       358 天前
    @SeaRecluse 第三个问题,目前做的工作时在输出的图片上显示原始数据,该库调用了 matplotlib 来绘图,并且在代码里写死了取 2 位小数
    SeaRecluse
        8
    SeaRecluse  
       358 天前
    @sonnyclarity492 对于这种别人写好的接口,你想去修改里面的一些参数完全是可以的。看你描述应该这接口里参数显示写了.2f 之类的正则化规则,可以按自己需求改动的~
    sonnyclarity492
        9
    sonnyclarity492  
    OP
       358 天前
    @SeaRecluse 嗯嗯 感谢回复,但是考虑到要在其他计算机上可复现,在想办法修复这个问题
    SeaRecluse
        10
    SeaRecluse  
       358 天前   ❤️ 1
    @sonnyclarity492 此外,善用 gpt 。如果你不了解一些代码的具体实现,但又想改动的话,可以给 gpt 提问并附上你的详细要求。
    SeaRecluse
        11
    SeaRecluse  
       358 天前   ❤️ 1
    @sonnyclarity492 如果是考虑别人的环境也能部署的话,可以把接口的实现抽出来放本地写一份,这样就可以规避了~
    kuituosi
        12
    kuituosi  
       358 天前   ❤️ 1
    不需要,python 的目的就是让非科班的也能使用
    sonnyclarity492
        13
    sonnyclarity492  
    OP
       358 天前
    感谢楼上各位的回复。总结下来就是要学会常用的数据结构,尝试用已经学会的知识来完成任务,待学习新知识后继续完善。
    ethenzh
        14
    ethenzh  
       358 天前 via Android
    你这里的问题 copilot 都能回答。尤其是第三点,你可以问 “我有 xxx 需求(将某个第三方库的输出精度改为 3 ),达到这个目的的最佳实践是?请用例子解释”
    iorilu
        15
    iorilu  
       358 天前
    哪有那么简单

    我说说把, 如果你真的想用 python 干任何正经活, 自己要写几百行代码以上的, 不是完全基于别人代码改一点的那种

    你必须都要懂, 反正今天不学明天也要学, 就这么简单

    除非你是零时用下, 糊弄一下交作业
    Baoni
        16
    Baoni  
       357 天前
    一般人不都是学到自己觉得够用嘛,你这都觉得不够了就学呗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.