Py学习  »  Python

什么样的python特性会激发C开发人员的兴趣?

Quintin Par • 5 年前 • 842 次点击  

对于那些在C语言中愉快地编程一段时间并计划学习一种新语言的人来说,我发现Python社区比其他许多社区更紧密地结合在一起。

个人而言,动态打字让我感到不安,但我对Python社区围绕它集会的方式很着迷。在python中,还有很多其他我想错过的东西(linq、表达式树等)。

开发人员喜欢的关于Python的好东西是什么?比C更能让我兴奋的东西。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30679
 
842 次点击  
文章 [ 13 ]  |  最新文章 5 年前
Chris Woodruff
Reply   •   1 楼
Chris Woodruff    14 年前

关于Python,我最喜欢的是它非常简洁、易读的语法。虽然使用缩进作为块分隔符一开始看起来很奇怪,但一旦开始用语言编写大量代码,我发现它开始变得有意义。虽然核心语言非常简单,但它更高级的特性(例如列表理解、修饰和生成器)也相当有用。

另外,Python标准库非常棒;它的文档编写得非常好,并且包含许多非常有用的包。我还发现有很多适合C库的绑定,比如pygtk、webkit和qt,仅举几个例子。

一个警告是,和大多数动态语言一样,与编译的静态类型语言相比,Python的速度非常慢。但是,您可以使用C轻松地扩展它,从而允许您编写在C中需要更好性能的代码,其余的代码则使用Python。

总的来说,它是一种很棒的语言,而且(至少对我来说)使编码更加高效和愉快。

Jim Dennis
Reply   •   2 楼
Jim Dennis    14 年前

对我来说,python是我使用过的最优雅的语言。语法是最低限度的(明显少于大多数标点符号),并有意仿效psuedo代码约定建模,程序员普遍使用这些约定来概述他们的意图。

巨蟒的 if __name__ == '__main__': 套件鼓励重用和测试驱动的开发。

例如,前天晚上,我一起黑了几千个 ssh 作业(同时约100个)并收集所有结果(输出、错误消息、退出值)…记录每一次的时间。它还处理超时(一个 命令可以无限期地在连接到一个抖动系统时暂停---它的连接超时和重试选项在套接字连接完成后不适用,不管身份验证是否暂停)。这只需要几十行python,而且它确实是最容易创建为类的(在 __main__ 在一个简单的包装器中进行命令行解析 圣米尼 . 这足以完成手头的工作(第二天我在25000台主机上运行了脚本,大约两个小时)。现在我可以在其他脚本中轻松地使用此代码:

from sshwrap import SSHJobMan

cmd = '/etc/init.d/foo restart'
targets = queryDB(some_criteria)

job = SSHJobMan(cmd, targets)
job.start()

while not job.done():
    completed = job.poll()
    # ...
    # Deal with incremental disposition of of completed jobs
for each in sorted(job.results):
    # ...
    # Summarize results

…等等。

所以我的脚本可以用于简单的作业…它可以作为一个模块导入,用于更专业的工作,这在包装器的命令行中是无法描述的。(例如,我可以启动“使用者”子流程,在每台成功执行作业的主机上处理其他工作,同时为报告超时或故障的所有主机发出服务通知单或自动重新启动请求等)。

对于没有独立用法的模块,我可以使用 圣米尼 包含单元测试的套件。因此,每个模块都可以包含自己的测试…实际上,可以使用 doctest 来自标准库的模块。(顺便说一下,这意味着文档注释中的格式正确的示例可以与实现保持同步…因为他们 单元测试套件的一部分)。

Randolpho
Reply   •   3 楼
Randolpho    14 年前

别误会我,我一直都是C的忠实粉丝。

但是有时候我不能用C语言做一些事情。尽管C不断缩小这些差距,但python仍然是我用来填补它们的语言。

它是动态的,灵活的,强大的,干净的。可爱的语言。每当我需要编写或构建动态或功能性(如在功能性编程中)软件时,我都会使用Python。

Daniel Pryden
Reply   •   4 楼
Daniel Pryden    14 年前

如果您熟悉.NET CLR,并且更喜欢静态类型语言,但是您喜欢Python的轻量级语法,那么也许 Boo 是你的语言。

user215802
Reply   •   5 楼
user215802    14 年前

像任何编程语言一样,它只是一个工具箱中的工具或画笔,您可以通过它来绘制您的创建。任何创造性的努力都需要艺术家热爱他所使用的工具,否则,结果会受到影响。有些人喜欢Python的原因与其他人喜欢Perl的原因相同。顺便说一下,我发现大多数喜欢Python的人都讨厌Perl灵活而富有表现力的语法。作为一个Perl爱好者,我并不讨厌Python,但认为它过于结构化和限制性。

如果你问我,在Python出现之前,所有这些似乎热爱Python的人都在工具选择下默默地忍受着痛苦。有些人在珀尔的统治下受苦,另一些人则在别的什么东西下受苦。换言之,我相信当巨蟒出现时,它发现了一大群沉默的受难者渴望使用类似巨蟒的工具。

我不能用python编程,因为我不能用python“思考”。我可以用Perl“思考”,因此,它是我喜欢的工具。现在,那些默默受苦的巨蟒用户似乎找到了一些早已失去的救赎。现在,如果他们能把福音传给自己,那就好了。

appqui-platform
Reply   •   6 楼
appqui-platform    14 年前

我喜欢所有有[]和的东西。像这样的选择器[-1:1]。可能编写的代码更少,但更有意义,这使得编写模型和其他声明性的东西非常枯燥。

Alex Weinstein
Reply   •   7 楼
Alex Weinstein    14 年前

我是一个 不对称 这两种语言的用户,从某种意义上说,我使用C主要是职业化的,而python用于我所有的“有趣”项目(不是说工作从来都不有趣,而是……你知道……

上下文的这种差异可能会扭曲我的观点,包括我的观点,即它们是两种不同类型(双关语)的语言,通常用于不同的目的。

这样说, 在这个时间点上,python是[其中之一],这可能不是巧合。]选择的语言 适用于各种尖端、学术性、技术/科学导向的项目。(顺便说一句,这里的“学术性”关键词并不意味着,python是一个大学玩具,许多领域/行业中的“严肃”应用程序恰恰相反)。这可能是由于以下几个因素造成的:

(大多数观点我都没有形成,很容易在其他回答中表达出来)

  • python的开放性和准通用性(与c_不同)
  • 轻量级/易用性/低学习曲线
  • 广泛的、高质量的“标准”库和扩展程序(偶尔也有bum-quality,但总体上是可用的、开源的等)附加库。
  • 用Python语言编写的大量开源项目
  • 相对容易与C/C++结合以重用遗留代码,但也可用于放置项目的性能关键部分。
  • 语言结构的抽象层次一般较高。
  • 多范式(命令式、面向对象和功能性)
  • 在如此多的科学和技术领域从业人员的可用性

是的,

  • “群体心理效应”在一句话中提到,可能是在[自我?]嘲笑的方式。事实上,一种语言吸引了一个广泛的“紧密结合”的群体,这使得它也具有吸引力,超越了群体心理的表面特征(“看起来酷”等)。在更广泛的背景下,有时使用的最佳技术/语言不是以其内在优点为衡量标准,而是以包括用户社区在内的总体“图景”为衡量标准。
Mathias
Reply   •   8 楼
Mathias    14 年前

我选择的语言是C,到目前为止,我还没有完全理解学习Python的意义。 This talk from PDC09 我真的很感兴趣:这家伙演示了如何使用Ironpython(或IronRuby)使C应用程序可编写脚本(在他的演示中,将一个python脚本放在一个文本框中,它与C代码一起工作/扩展)。我发现这真的很吸引人:我甚至不知道从哪里开始用C做类似的事情,这让我至少感激它给桌子带来了一些不同的东西,这真的可以丰富我所能开发的东西!

Autobyte
Reply   •   9 楼
Autobyte    14 年前

你的问题有点像管道工问为什么木匠总是不停地谈论锤子。毕竟,水管工没有锤子,也从来没有丢过。python(甚至是ironpython)和c面向不同类型的开发人员和不同类型的程序。我非常熟悉Python,并且可以自由地关注业务规则,而不会被语言的语法要求所干扰。另一方面,我已经用C语言编写了一些相当重要的代码,如果我在Python中执行相同的任务,我会非常担心类型安全性的缺乏。这并不是说巨蟒是一种“玩具”语言。您可以(而且人们也可以)用Python编写一个完整的中型或大型应用程序。您有动态输入的自由,但是您也有责任保持它的完整性(框架在这里有帮助)。类似地,您可以用C语言编写一个小应用程序,但是您将带来一些您可能不需要的开销。

因此,如果问题是钉子,使用锤子;如果问题是螺钉,使用螺丝刀。换言之,花些时间学习Python,了解它是一种Strangths(文本处理、快速编码周期、简单的干净代码等),然后当您打算解决一个新问题时,询问您在Python或C中的表现是否更好。有一件事是肯定的。只要C是您所知道的唯一编程语言,它就是您将使用的唯一语言。

帕特

Robert Rossney
Reply   •   10 楼
Robert Rossney    14 年前

我是C和python的重用户;我已经用两种语言构建了非常复杂的应用程序,而且我还将python脚本嵌入到我的主要C应用程序中。我现在也没有用任何一种方法来做网络工作,但除此之外,我觉得我很有资格回答这个问题。

让我兴奋的关于python的事情,尤其是:

  • 生成器与语言的深度集成。这是第一件让我意识到我需要花很长时间认真地研究一下python。自从我熟悉了 itertools 模块,它看起来像一套漂亮的工具,但实际上是一种新的生活方式。

  • 动态类型的耦合以及所有东西都是一个对象的事实使得非常复杂的技术非常容易实现。用Python中的表(例如 o = class_map[k]() 而不是 if k='foo': o = Foo() )它成为一种基本的技术。在python中,编写将方法作为参数的方法是很正常的,当您看到 d = defaultdict(list) .

  • zip 以及在设计时考虑到的方法。你需要一段时间才能直观地掌握 dict(zip(k, v)) d.update(zip(k, v)) 正在做,但当你到达那里的时候,这是一个范例转换的时刻。只需使用一个函数,就可以消除整个无趣且可能充满错误的代码。然后,您开始设计函数和类,期望它们与 拉链 突然,代码变得越来越简单。(PoTip):或 itertools.izip . 或 itertools.izip_longest )

  • 说到字典,它们是以一种深深融入语言的方式。理解一行代码是什么样的 self.__dict__.update(**kwargs) Do是另一个改变范式的时刻。

  • 当然,列出理解和生成器表达式。

  • 便宜的例外。

  • 交互式智能接口。

  • 函数修饰器。

  • Ironpython,它的使用比我们想象的要简单得多。

这甚至没有进入到标准模块中显著的功能阵列,或者第三方工具(如BeautifulSoup、SQL炼金术或塔架)的荒谬丰富。

深入了解python最直接的好处之一是它大大改进了我的C代码。我通常可以理解具有类型变量的代码 Dictionary<string, Action<Foo>> 但写起来似乎并不自然。(我今天使用静态字典来替换硬编码逻辑的频率比一年前高得多。)我很容易理解Linq现在在做什么,或者如何做。 IEnumerable<T> return yield 工作。

那又怎么样 不要 我喜欢蟒蛇?

  • 动态类型确实限制了静态代码分析的功能。不仅没有一个类似于针对python的resharper这样的工具,在这种语言中它可以编写 getattr(x, y)() 真的不可能。

  • 它有许多不雅的约定。我多么希望能够回到过去,试着把gvr从lambda表达式应该和这个词一起引入的想法中说出来。 lambda -像lambda表达式这样的基本表达式在C语言中应该比在Python中更简洁,这真是太糟糕了。前导和尾随的双重强调惯例是可怕的,事实上,人们默许了这一点,这证明了陀思妥耶夫斯基观察到,人是可以习惯任何事物的动物。不要让我开始了解一个名为 StringIO 被允许出门。

  • 让Python在多个平台上工作的一些特性也让它有点困惑。很容易 使用 import 但要理解它到底在做什么真的很不容易。(它在哪里?什么? __init__.py 怎么办?等)

  • 令人惊讶的丰富的标准模块库如此丰富,以至于很难知道其中包含什么。编写一个函数通常比找出标准库中是否有相同的功能要容易得多——我在看你, itertools.chain .

Mark Byers
Reply   •   11 楼
Mark Byers    14 年前

能够输入一些代码并返回结果 立即 .

(免责声明:我经常使用C和python,我认为两者都有各自的优点和缺点。)

Bryan McLemore
Reply   •   12 楼
Bryan McLemore    14 年前

对我来说,这是一种灵活性和优雅性,但我希望可以从其他语言中引入一些东西(更好的线程,更健壮的表达式)。

在典型的情况下,我可以用Python编写一点代码,并且在许多其他语言中做的行数要比同样多。另外,在python代码形式中是最重要的,并且语法使它自己成为可读性高、外观整洁的代码。这当然有助于维护。

我喜欢有一个命令行解释器,我可以在里面快速地建立一个算法的原型,而不必启动一个新的项目、代码、编译、测试、重复。更不用说我可以使用它来帮助我实现服务器维护的自动化(对于我的公司,我可以兼任SA)。

最后一件立即想到的事情是大量的图书馆。有很多事情已经解决了,内置的图书馆有很多要提供,第三方的很多时候都非常好(不总是这样)。

Vitaly
Reply   •   13 楼
Vitaly    14 年前

我主要是.NET开发人员,在我的个人项目中使用python。

开发人员喜欢的关于Python的好东西是什么?

我可以自己说——蟒蛇就像一股新鲜空气。

1)学习起来很简单,晚上花了我一个星期的时间。我说的是python+django。python语法非常简单。

2)使用简单。在Windows上安装python+django完全没有问题。

3)可以在Windows和Unix上运行。

4)我需要它用于Web,所以我得到比ASP.NET更便宜的主机。

5)python语言相对于c的所有优势。就像tuples-非常有用!

我唯一不喜欢的是我最喜欢的IDE Visual Studio不支持它(我知道Ironpython,不用担心)。