Python对于业余程序员来说(几个问题)

9
我是一名业余程序员(之前只用过TI-Basic),在经过很多很多的自我辩论后,我决定学习Python。我没有太多的空闲时间去教自己一百种语言,而且我所做的所有编程都是为个人使用或分发给需要的人,因此我决定需要一个好的、强大的语言来精通。我的问题如下:
  1. Python是否足够强大,能够处理大多数典型程序员在业余时间所需做的事情?我想到的是基于用户输入的复杂统计生成器,制作小游戏,自动化安装流程和构建交互式网站等等,但可能有一百件类似的事情。

  2. Python是否能够很好地处理网络任务?

  3. Python源码是否可以混淆,或者它天生就是开源的?我问这个问题是因为如果我制作了一些酷炫的东西并进行分发,我不希望某些脚本小子将自己的名字编辑进去并声称自己编写了它。

  4. Python与其他语言相比有多受欢迎?理想情况下,我的语言应该是好的、有用的,并且在线上能够轻松找到帮助,但不至于像每个电脑都知道Python那样普及。我喜欢掌握一门稍微有些冷门的语言。

感谢您提供的任何帮助。

2
它完美地符合您的需求,除了第三点。 - Larry Lustig
4
如果你做出了什么超级棒的东西,无论用什么语言编写,都有可能被反编译。 - Gordon Gustafson
7
关于第三条留言:你无法阻止这个。就算是一个不负责任的人声称自己编写了一个混淆二进制文件,也无法阻止他这么做。只需要在你的作品上加上适当的许可证并分享出去,大众一定会欣赏它的价值。不要因为不负责任的人而停止分享! - mwcz
你可能最接近第三个需求的工具是py2exe,但是仅靠混淆来保证安全性最多只能起到徒劳无功的作用... - Matthew Iselin
我也从TI-BASIC转到了Python,从未后悔过。(如果你正在寻找一本学习的书,我推荐《Python for Dummies》。)Python的一个优点是语言本身相对容易学习(或者至少大多数人需要的功能),其余的只需要阅读库文档。 - LeafStorm
显示剩余2条评论
7个回答

14

Python足够强大,能胜任大多数任务吗?

是的。 学习EveOnline游戏以获取更多信息。查看pygame框架。 随意使用Google查找更多内容。

Python在处理网络任务方面表现如何?

很好。看看Python Web框架的数量和Twisted框架。随意使用Google搜索Python网络。

Python源代码是否可以混淆?

不能用于实际用途。这不是C语言。

与其他语言相比,Python有多受欢迎?

查看TIOBE指数


4
无法混淆代码?请查看此聊天服务器 http://paste.pocoo.org/show/94512/ (由 http://stackoverflow.com/users/10999/ 编写)!(当然,关于试图隐藏源代码以防止应用程序被盗的问题,显示了对任何语言中保护代码免受不公平获取的知识缺乏。) - Mike Graham

6
我认为Python非常强大,可以做很多事情,但就像Java和C++一样,它经常依赖于好的第三方库。我来自Java背景,但在许多方面使用Python,这是一段有趣的旅程。我做过统计和自动化等工作,不确定UI是否也是如此,因为这通常取决于工具包而不是语言。
Python网络编程很好用。我不知道是否会用它来构建快速算法交易系统或VOIP应用程序,但对于大多数意图,特别是在更高层次的抽象中,它是fine and easy to use的。您需要外部库来处理SSH或FTP等事项。
Python非常流行,拥有非常好的在线支持、活跃的社区和主要的公司(例如Google)使用它。我发现官方在线教程和参考资料非常好。
我必须说,我不同意“每个有电脑的白痴”的说法。了解一种语言和正确使用它之间存在差异,这对于每种语言都是正确的,甚至是自然语言 :) Python确实具有许多功能元素,对于从过程化背景出发的人来说,并不是那么容易使用,因此总有提高的空间。
与C和Java等语言相比,Python的一个问题是它没有静态类型。这使得编写代码更快,但也使得出错变得更容易,并且很难调试。例如,同一个变量可能在某个时候包含字符串引用,在另一个时候包含对字符串列表的引用。

+1 为支持“非白痴”程序员使用Python。作为Haskell爱好者(符合Matt对于稍微晦涩语言的标准),我经常使用Python完成许多任务;它绝不是“低人一等”的。 - Jared Updike

4
  1. 当然可以。
  2. 是什么类型的网络?它内置了套接字、http、xml、smtp/pop、telnet等许多功能。
  3. Python混淆不会像编译语言那样好。通常这不是问题。
  4. 它是stackoverflow上第9个最受欢迎的标签,因此有很多帮助可用。

3

Python是否足够强大,可以处理程序员在业余时间中可能做的大多数事情?我想到的是基于用户输入的复杂统计生成器,用于桌面游戏,制作小游戏,自动化安装过程和构建交互式网站,但可能还有一百种类似的东西。

当然可以。除了自动化安装进程之外,Python是所有这些任务的好工具,但更可能的是正确的工具将取决于您要自动化的具体内容。

Python是否能很好地处理网络任务?

是的。您需要研究Twisted

Python源代码是否可以混淆,或者它本质上就是开源的?我问这个问题的原因是,如果我制作了一些很酷的东西并进行分发,我不希望某些白痴脚本小子编辑他自己的名字并说他编写了它。

"开源"是指您的代码的许可证,而不是其源代码的可视性。隐藏Python源代码并不是特别可能的事情,而反编译Python字节码的结果将比C等语言的等效工具产生更可读的代码。 不用担心这个问题!您无法防止人们窃取您的汽车或计算机,如果他们愿意违反法律,您也无法对任何语言中的代码采取同样的措施。

Python相对于其他语言有多受欢迎。理想情况下,我的语言将是好的,有用的,并且能够在网上找到帮助而不会遇到极端困难,但不会像每个电脑白痴都知道Python那样常见。我喜欢知道一种稍微偏门的语言。

这是一个无法回答的问题。谷歌会给您很多具有不同指标的矛盾结果,其中大部分都很有用。您也有点儿傻;)


就学习材料而言,我推荐如何像计算机科学家一样思考Python,这是一本不需要任何现有编程知识的好书。它可以免费在线使用,或者您可以购买印刷副本(暂时不要学习3.x。没有足够的库支持来完成像您想要做的有用的东西,当有支持时,学习将轻而易举;它与2.5/6/7没有太大区别。)


哦,Twisted不是一个好的入门选择。它是一个非常棒的网络工具,但对于业余爱好者来说有点难以理解。甚至一些专业人士也难以理解。建议从标准库中更简单的网络模块入手。当urllib和urllib2开始感觉笨重时,可以尝试下载httplib2进行更复杂的http操作。这真的非常好用。 - jcdyer
@jcd,Twisted确实需要一些努力才能掌握。然而,看到许多人在Python中尝试编写自己的网络应用程序的第一次尝试,我认为这是值得的。 - Mike Graham

2
  1. 可能是的。根据你要处理的数据量和游戏类型,统计分析可能会有些慢,但通常性能足够好,而且你可以节省大量时间来进行实际编程。如果你真的需要更高的性能,可以使用C语言制作模块,但通常已经有现成的库可以满足你的需求。

  2. 我没有用过,但有一个叫做Twisted的框架似乎很不错。

  3. 不行。字节码可以轻易被反编译,而且它只适用于特定版本的Python,因此你的代码不太具备可移植性。

  4. Python相当流行,Python Package Index中有大量的第三方库。虽然没有像Java那样广泛使用,但很多人都在用它,你可能可以得到你想要的答案。


Python有像SciPy和NumPy这样的库,可以处理任何性能关键、数值、统计等方面的问题。除了图像处理(由PIL(Python Imaging Library)很好地处理),或者是强大的图形处理工具之外,我想不到还有什么使用Python会有性能问题。 - Jared Updike
1
CPython字节码相对容易反编译,通常可以转换成漂亮易读的代码(如果原始代码本身就是如此)。它还有一些限制,包括只能在一个Python版本上运行,并且不能与Python的其他实现一起使用。保护您免受他人不公平使用您的代码的是法律和大多数人都不是坏蛋这个事实。 - Mike Graham
感谢您的输入,我已经修改了答案。不过在这个阶段这并不是很重要。 - Javier

0

点1和2:当然没问题。

点4:有点吧。Python在某些网络方面表现不错。它不是Java或C++。只需使用zlib(zip库)和pickle(序列化)来处理所有事情,并查看xmlrpclib以获取IPC。

点3:不行。但是,您可以编写C模块(用于性能关键和难以复制的部分),这将使其难以逆向工程。


0

Python对于1、2和4来说是完全胜任的(而且更好)。

从您所描述的情况来看,最好的解决方案可能是使用GPL或BSD等许可证使您的程序真正成为开源的。这样,人们将编辑您超酷的源代码(但通常是有经验的程序员,而不仅仅是脚本小子),并在此基础上构建,但会留下您的名字以示纪念。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接