Re: [分享] Taipei.py - CPython 如何执行 python

楼主: uranusjr (←這人是超級笨蛋)   2014-04-16 02:00:15
※ 引述《timTan (用口头禅区分年记)》之铭言:
推 QQ29:可否借问一下,c里面使用python有什么好处吗? 04/15 23:46
→ QQ29:想学python,但想了解他的好处尤其是跟c配合~ 04/15 23:48
→ azureblaze:让使用者可自订行为、程式不用重开重compile就可改code 04/15 23:57
说是和 C 配合, 其实这包含两件不太一样的事情:
* 在 Python 里写 C, 以及
* 在 C 里写 Python。
你一开始问的是后者, 所以先讲这边好了。为什么要在 C 里写 Python... 嗯, 因为
我可以? :p
程式界有句很靠北的名言:[1]
任何足够复杂的 C 或 Fortran 程式, 都包含一个将就、定义不标准、满是
臭虫、缓慢的 Common Lisp 部分实作。
如果你写过不止一个 C 专案(写完就扔的玩具不算), 或许会发现每个专案里面其实
都包含了很多差不多的 utilities。资料结构啊排序啊甚至简单的字串处理等等。都
是重造的轮子。Python(或者应该说任何高阶语言与/或函式库)的存在意义就是把这
些有的没有的东西抽出来, 让你能专注在你真正想做的事情上面, 而不是一直造新轮
子。
以下内容当然不只适用于 Python 与 C, 不过原推文是问它们, 所以我就直接写了。
请不要讲什么○○和××语言没讲是偏颇之类的垃圾话。我都听到了, 谢谢指教。
一个在 C 里用 Python 的状况可能是 prototyping。可能你想要试试看某个新功能要
如何实作比较好, 那么与其直接用 C 刻两个版本再选, 先用 Python 实作某个部分,
决定之后再 port 回 C(或甚至就直接用了, 如果它 good enough™[2])可以省下很
多开发时间。
另一个可能性是做 plugin system, 其实也就是 azureblaze 讲的用法。Python 程式
码可以直接改, 在这用途上应该也满方便的。我没这样用过就是了。
不过其实上面两种都没那么常见, 至少就我所知。比较常见的反而是颠倒, 用 C 来辅
助 Python。这通常就是要嘛你想连结既存的 C 函式库, 要嘛你觉得 Python 不够快
想把某部分改写成 C 来用。加速这种目的没什么好解释的, 跳过。可以用既存 C 函
式库代表两件事情:
1. 只要某个功能有 C 函式库, 就可以接到 Python 上;
2. 可以补足 Python 因为跨平台而没有内建一些 OS-specific 功能的特点。
这也就代表你即使要用到 Python 没有的函式库, 也不见得要整个程式都写成 C。这
在很多情况下都可以在大幅缩短开发时间的情况下产生 good enough™ 的成品。
如果你正在考虑要不要学新的高阶语言/函式库, 要考虑的不应该是“它的功能我现在
能不能做到”(通常可以), 而是“它能不能让我的做法更快更好”。
[1] http://en.wikipedia.org/wiki/Greenspun's_tenth_rule
[2] http://en.wikipedia.org/wiki/Principle_of_good_enough
推 QQ29:那这样python code有办法不要明码吗,好处只有方便改code吗 04/16 00:33
这和上面完全是另一个问题了, 而且说真的我不是很想讨论这个问题, 明码是有什么不
好 Zzz。其实以 CPython 而言, 在进直译器之前有一个及时编译阶段, 会把 Python
源码转成 opcode, 后者才喂给直译器, 所以大部份的 Python 程式只要提供 opcode
档案就可以了, 不需要有源码。但是这其实 disassemble 起来没有很难。
当然 C 程式也是可以 disassemble 啦。不过如果你需要让程式好像面目全非才能有安
全感, 我也没什么意见, 单纯就是 scripting languages 不适合你罢了。
作者: QQ29 (我爱阿蓉)   2014-04-15 23:46:00
可否借问一下,c里面使用python有什么好处吗?想学python,但想了解他的好处尤其是跟c配合~
作者: azureblaze (AzureBlaze)   2014-04-15 23:57:00
让使用者可自订行为、程式不用重开重compile就可改code
作者: QQ29 (我爱阿蓉)   2014-04-16 00:33:00
那这样python code有办法不要明码吗,好处只有方便改code吗

Links booklink

Contact Us: admin [ a t ] ucptt.com