向咨询下各位大神, Python 初有小成之后,有没有必要回过头去学 C++… - V2EX
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 5544 次点击
    这是一个创建于 2850 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟是自学 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 大神董伟明也是运维转开发的, 老铁加油
    YanSep
        9
    YanSep  
       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     Solana     1872 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:01 PVG 08:01 LAX 17:01 JFK 20:01
    Do have faith in what you're doing.
    ubao 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