V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
praynise
V2EX  ›  Python

向咨询下各位大神, Python 初有小成之后,有没有必要回过头去学 C++…

  •  
  •   praynise · 2017-12-22 22:47:18 +08:00 · 5232 次点击
    这是一个创建于 2561 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟是自学 python,并应用在了工作之中。由于小弟是做运维的,所以…其实对一个工具的运行效率并不非常在意。不过有的时候,还是希望有些地方能够执行的更快些。请问各位大神,在各位的 python 生涯中,用 C 库加速 python 的场景多么?是否有必要学习一下 C++呢?
    18 条回复    2017-12-24 03:19:56 +08:00
    SlipStupig
        1
    SlipStupig  
       2017-12-22 22:59:19 +08:00
    为什么不选 go 呢?
    lolizeppelin
        2
    lolizeppelin  
       2017-12-22 23:34:55 +08:00 via Android
    要 c 会 c 才能看 linux 源码
    neoblackcap
        3
    neoblackcap  
       2017-12-23 00:29:02 +08:00
    @praynise 据我了解,多数扩展库都是用 C 写的,大概是人们不想再写一个 wrapper 吧。C 库加速 python 的场景只能说业务方的需求更大。单纯运维的角度用得并不多,除非你会细到内核之类的地方,这些地方 python 的确是比较缺失的。比如你基于 eBPF 写一个非入侵式的 profiler,那么用 C 是必然的。或者一些辅助 coredump 时收集资料的,可能还是得用到 C,否则以我一个 devops 的经验来看,用得真不多。
    yexiaoxing
        4
    yexiaoxing  
       2017-12-23 05:00:32 +08:00 via iPhone
    我觉得… 还是有必要的…
    至少知道一些比较底层的东西,以后优化也有好处?
    noqwerty
        5
    noqwerty  
       2017-12-23 05:14:17 +08:00
    当你要处理的东西到了一定数量级,又是很小众别人没做过(优化过)的问题,就需要自己撸袖子开干了。
    cdlixucd
        6
    cdlixucd  
       2017-12-23 05:17:49 +08:00 via Android
    我靠 运维还要写代码😭
    jimzhong
        7
    jimzhong  
       2017-12-23 07:31:06 +08:00
    可以学 C,顺便看看 CPython 的实现。
    sunwei0325
        8
    sunwei0325  
       2017-12-23 08:54:08 +08:00   ❤️ 1
    我心中的 python 大神董伟明也是运维转开发的, 老铁加油
    Flobit
        9
    Flobit  
       2017-12-23 09:03:33 +08:00 via Android
    其实编程重要的是思想,语言大多数都相通的,思想很重要,语言只是个工具,C++有必要了解下,不要深入,如果你想学 python 的话
    Morriaty
        10
    Morriaty  
       2017-12-23 09:11:55 +08:00
    我还是坚持认为需要什么再学什么,而不是人云亦云的学习。

    比如你在使用 docker 的过程中,遇到了一些 UNdocumented feature,这时候你可能真的需要去源码里看一眼,那就该去看一眼 go 和虚拟化技术了。

    再比如 java、流处理之于 storm ; scala、分布式理论之于 spark,etc.
    ipwx
        11
    ipwx  
       2017-12-23 09:33:09 +08:00
    boost::python 可以黏合 python 和 c++。
    不过要学到玩转 boost 库的程度,需要时间。
    secondwtq
        12
    secondwtq  
       2017-12-23 09:53:50 +08:00
    Python 和 C++ 没关系,Python 更像是 C 变成脚本语言之后做了一些增强的产物
    justou
        13
    justou  
       2017-12-23 10:55:45 +08:00   ❤️ 7
    说说我从 python 深入下去的思路: Python → Cython → C → C++

    Python:
    各种入门级书籍, 官方文档教程→The Python3 Standard Library by Example(新出的) /Python Cookbook /Fluent Python

    Cython:
    官方文档 → Learning Cython Programming/Cython A Guide for Python Programmers

    C:
    kenneth A Reek, Pointers on C(C 与指针) → Expert C Programming: Deep C Secrets(C 专家编程) → C Traps and Pitfalls(C 陷阱与缺陷) 这三部曲都有影印版

    (这时候可以开始读 Python 源码了, 有一本叫<python 源码剖析>的书很值得参考, 虽然比较老,好像是剖析的 py2.5)

    C++:
    C++ Primer(写得有点啰嗦, 以前我用这个入门的, 应该还有更好的) → The C++ Standard Library: A tutorial and reference(2nd) → C++ Templates The Complete Guide(2nd)(最近才出的 2, 详述了 C++11/C++14/C++17 的模板特性) → Effective Modern C++ , Optimized C++ , Clean C++ 等各种修炼 c++内功的, C++ Concurrency in Action 专门讲多线程编程的...

    -----------------------------------------------------------

    以上仅仅是从编程语言方面的思路, 个人觉得学习曲线没那么陡, 但是比较长---看似比较长, 但有一定积累后可以接收得很快, 虽然是在走上坡路, 但是积累的东西会让你做加速运动, 但在学的时候要多加实践多做笔记, 不然忘得飞快. 数据结构算法是必须的, 数据库网络,计算机系统, 操作系统,编译原理之类的根据自己的方向和需求去补充.

    最后的编程技能就是 Python/Cython/C/C++的组合拳, 面对实际问题时可以施展得很开.

    在学校的时候做计算物理, 用 Cython/C/C++加速 Python 用得挺多的, Python 很多时候是做数据的预处理, 以及一些不是计算密集型的数据处理(数据处理毕竟是 py 强项), 然后计算密集型的就用 Cython/C/C++完成(在 numpy/scipy 无法满足性能要求的情况下), 最后返回结果给 Python 后处理; 到公司后做图像算法, Python 常用来做一些给大家用的小工具(PyQt), 图像批处理, 算法测试, 差不多当脚本用了, 最后算法是用 C++写成 dll 给后端的 C#调用, 因为我不太懂 C#, 后端哥们儿又不太懂 C++, 对接起来很是尴尬, 最近我们准备组队一起刷 C++跟 C#
    ryd994
        14
    ryd994  
       2017-12-23 11:45:47 +08:00 via Android
    @neoblackcap c++可以用 C wrapper 啊,这是标准所定义的
    合法的 C 代码一定也是合法的 C++代码
    eliteYang
        15
    eliteYang  
       2017-12-23 11:49:07 +08:00
    需要什么学什么吧,不然也容易手生,而且也写不好
    neoblackcap
        16
    neoblackcap  
       2017-12-23 12:18:49 +08:00 via iPhone
    @ryd994 可以是可以,不过我觉得他们是懒了,的确大部分扩展都是 C 写的,C++写的太少了。
    maobush
        17
    maobush  
       2017-12-23 22:07:31 +08:00 via Android
    看需求,主要还是思想,语言只是工具
    gnaggnoyil
        18
    gnaggnoyil  
       2017-12-24 03:19:56 +08:00
    @ryd994 C 和 C++的合法代码集合相互之间没有包含关系.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:51 · PVG 14:51 · LAX 22:51 · JFK 01:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.