Python的哪些功能会激发C#开发人员的兴趣?

时间:2009-11-20 20:30:24

标签: c# python programming-languages

对于一直喜欢用C#编程很长时间并且计划学习一门新语言的人,我发现Python社区比其他许多人更紧密。

个人动态打字让我失望,但我对Python社区围绕它的方式感到着迷。我希望在Python中有很多其他的东西(LINQ,表达式树等)

开发人员喜爱的Python有哪些好处?比C#更令我兴奋的东西。

13 个答案:

答案 0 :(得分:18)

对我而言,它的灵活性和优雅,但我希望可以从其他语言中提取一些东西(更好的线程,更强大的表达)。

在典型的情况下,我可以在python中编写一些代码,并且比许多其他语言中的相同数量的行做得多。此外,在python代码形式中,最重要的是语法使其自身具有高度可读性和干净的代码。那当然有助于维护。

我喜欢使用命令行解释器,我可以快速构建算法原型,而不必启动新项目,代码,编译,测试,重复。更不用说我可以用它来帮助我自动化我的服务器维护(我作为我公司的SA加倍)。

最后想到的是大量的库。有很多东西已经解决了,内置的库有很多东西可以提供,第三方的很多次很好(但并不总是如此)。

答案 1 :(得分:14)

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

(免责声明:我经常使用C#和Python,我认为两者都有好处和坏点。)

答案 2 :(得分:10)

我主要是.NET开发人员,并为我个人项目使用Python。

  

开发人员喜欢python的优点是什么?

我可以自己说 - Python就像一股清新的空气。

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

2)使用简单。没有麻烦在Windows上安装Python + Django。

3)它可以在Windows和UNIX上运行。

4)我需要它用于网络,所以我得到比ASP.NET更便宜的托管。

5)Python语言优于C#的所有优点。像元组一样 - 非常有用!

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

答案 3 :(得分:10)

你的问题有点像水管工,问为什么木匠总是在谈论锤子。毕竟水管工没有锤子,从来没有错过它。 Python(甚至是IronPython)和C#针对不同类型的开发人员和不同类型的程序。我对Python非常熟悉,并且可以自由地专注于业务规则,而不会被语言的语法要求分散注意力。另一方面,我已经在C#中编写了一些相当实用的代码,如果我在Python中执行相同的任务,我会非常担心缺少类型安全性。这并不是说Python是一种“玩具”语言。您可以(并且人们)用Python编写完整的中型或大型应用程序。你有动态打字的自由,但你也有责任保持一切(框架帮助)。同样,你可以在C#中编写一个小应用程序,但是你会带来一些你不太可能需要的开销。

所以如果问题是指甲使用锤子,如果问题是螺丝使用螺丝刀。换句话说,花一些时间来学习Python,了解它的强度(文本处理,快速编码循环,简单干净的代码等)然后当你正在寻找解决一个新问题时,问你是否会在Python或C#。有一点是肯定的。只要C#是您所知道的唯一编程语言,它就是您唯一可以使用的编程语言。

Pat O

答案 4 :(得分:10)

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

关于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))正在做什么之前需要一段时间,但是当你到达那里时,这是一个范例转换的时刻。只需使用一个函数,就可以消除整个无趣且可能错误的代码。然后你开始设计函数和类,期望它们将与zip一起使用,突然你的代码变得更简单,更容易。 (Protip:或itertools.izip。或itertools.izip_longest。)

  • 说到词典,它们深深融入语言的方式。理解像self.__dict__.update(**kwargs)这样的代码行是另一个转变范式的时刻。

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

  • 廉价的例外情况。

  • 交互式解释器。

  • 函数装饰器。

  • IronPython,使用起来比我们有任何期望的要简单得多。

这甚至没有涉及标准模块中的各种功能,或者像BeautifulSoup或SQL Alchemy或Pylons这样的第三方工具的荒谬恩惠。

我从深入Python中获得的最直接的好处之一就是它大大改进了我的C#代码。我通常可以理解其中包含Dictionary<string, Action<Foo>>类型变量的代码,但编写它似乎并不自然。 (今天使用静态字典来替换硬编码逻辑的频率远远超过一年前。)我可以毫不费力地理解LINQ现在正在做什么,或者IEnumerable<T>return yield如何工作。< / p>

那么我喜欢Python?

  • 动态类型确实限制了静态代码分析的功能。不仅没有像Resharper for Python那样的工具,在一种语言中,有可能写出getattr(x, y)()真的不可能。

  • 它有一堆不雅的惯例。我多么希望能够及时回过头来尝试与GVR讨论lambda表达式应该用单词lambda引入 - 这是非常诅咒那些像lambda表达式一样基本的东西应该更简洁在C#中比在Python中。领先和尾随的双下划线会议是可怕的,人们默默地默认这一事实证明陀思妥耶夫斯基观察到人类是可以适应任何事物的动物。并且不要让我开始考虑一个名为StringIO的模块被允许出门的事实。

  • 使Python在多个平台上运行的一些功能也让人感到莫名其妙。 使用 import很容易,但要理解它到底在做什么真的不容易。 (它在哪里?__init__.py做什么?等等。)

  • 令人惊讶的丰富的标准模块库非常丰富,很难知道其中的内容。编写函数通常比查看标准库中是否有某些东西做同样的事情更容易 - 我在看着你,itertools.chain

答案 5 :(得分:4)

我选择的语言是C#,到目前为止我还没有看到我学习Python的重点。 This talk from PDC09真的引起了我的兴趣:这个人演示了如何使用IronPython(或IronRuby)来创建一个C#app脚本(在他的演示中,在文本框中删除一个Python脚本,它可以使用/扩展你的C#码)。我发现这真的很吸引人:我甚至不知道在C#中我会开始做类似的事情,这至少让我意识到它带来了不同的东西,这可以真正丰富我可以开发的东西!

答案 6 :(得分:2)

我是这两种语言的不对称用户,从某种意义上说,我使用C#主要是专业的,而Python则用于我所有的“有趣”项目(不是说工作从来没有乐趣,但......你知道......)

这种背景差异可能会扭曲我的观点,包括我认为它们是两种截然不同的语言(双关语),通常用于不同的目的。

这就是说,对于各种尖端的,有点学术性的技术来说,Python在这个时间点,[选择语言之一] 可能不是巧合科学导向的项目。 (顺便说一句,这个“学术”关键词并不暗示,Python是一个大学玩具,在很多领域/行业中有很多“严肃”的应用程序可以证明相反)。这可能是由于以下几个因素造成的:

(我不会发展大多数积分,在其他回复中很容易表达)

  • Python的开放性和准普遍可用性(与C#不同)。
  • 轻巧/易用/低学习曲线
  • 广泛的,高质量的“标准”库和扩展器(偶尔也有流行的质量,但总体而言,开源等)附加库。
  • Python语言的各种开源项目
  • 与C / C ++绑定以重用遗留代码相对容易,但也用于放置项目的性能关键部分
  • 语言的构造的一般更高层次的抽象
  • 多范式(命令式,面向对象和功能性)
  • 在如此多的科学和技术领域中从业者的可用性

,是的,

  • 一种评论中提到的“群体心理效应”,可能是以[自我]的方式引起的。一种语言吸引了一个广泛的,“紧密结合”的社区这一事实,使其具有吸引力,超越了从群体(“看起来很酷”等)的群体心态特征。在更广泛的背景下,有时使用的最佳技术/语言不是根据其内在优点来衡量,而是根据整体“图片”来衡量,包括用户社区。

答案 7 :(得分:1)

我喜欢[]和{}的所有内容。像这样的选择器[-1:1]。可以编写更少的代码,但更多的东西是有意义的,这使得编写模型和其他声明性的东西非常干。

答案 8 :(得分:1)

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

如果你问我,在Python诞生之前,所有这些似乎喜欢Python的人都会在工具选择下默默地受苦。有些人受到Perl的影响,有些则受到其他的影响。换句话说,我相信当Python出现时,它发现了一大群沉默的患者渴望像Python这样的工具。

我无法在Python中编程,因为我不能在Python中“思考”。我可以在Perl中“思考”,因此,它是我喜欢的工具。现在,Python用户似乎已经找到了一些长期失去的救赎。现在如果他们只能将自己的福音传播给自己:)。

答案 9 :(得分:1)

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

答案 10 :(得分:0)

我喜欢Python的主要内容是它非常简洁,可读的语法。虽然首先使用缩进作为块分隔符看起来很奇怪,但是一旦你开始用语言编写很多代码,我发现它开始变得有意义了。虽然核心语言非常简单,但它具有更高级的功能,例如:列表理解,装饰器和生成器也很有用。

此外,Python标准库非常棒;它的文档写得很好,它包含很多非常有用的包。我还发现C库有很多很好的绑定,比如PyGTK,Webkit和Qt,仅举几例。

有一点需要注意的是,与大多数动态语言一样,Python与编译的静态类型语言相比速度相当慢。但是,您可以使用C轻松扩展它,允许您编写需要在C中获得更好性能的代码,其余部分在Python中。

这是一种优秀的语言,(至少对我来说)使编码更有效率和愉快。

答案 11 :(得分:0)

不要误会我的意思,我将永远是C#的忠实粉丝。

但有时在C#中我不能做的事情。虽然C#不断减少这些差距,但Python仍然是我填写它们的语言。

它充满活力,灵活,强大,干净。可爱的语言。每当我需要脚本或构建动态或功能(如函数式编程)软件时,我就会使用Python。

答案 12 :(得分:0)

对我来说,Python是我用过的最优雅的语言。语法是极简主义的(比大多数人的标点符号少得多),并且在伪造的代码约定之后有意地建模,程序员无处不在地使用这些约定来概括他们的意图。

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

例如,前一天晚上我一起攻击了数千个ssh个作业(大约100个并发)并收集所有结果(输出,错误消息,退出值)......并记录下来每个人都有时间。它还处理超时(一个ssh命令可以无限期地停止连接到一个颠簸系统---它的连接超时和重试选项在套接字连接后不适用,无论身份验证是否停止)。这只需要几十行Python,并且最简单的方法是将它创建为一个类(在__main__套件之上定义)并在__main__内的一个简单包装器中进行命令行解析。这足以完成手头的工作(第二天我在25,000台主机上运行脚本,大约两小时)。我现在可以像在其他脚本中一样使用此代码:

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

......等等。

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

对于没有独立使用的模块,我可以使用__main__套件来包含单元测试。因此,每个模块都可以包含自己的测试...实际上,可以使用标准库中的doctest模块将其集成到“doc字符串”中。 (顺便提一下,这意味着文档注释中格式正确的示例可以与实现保持同步......因为它们单元测试套件的一部分)。