私信  •  关注

Robert Rossney

Robert Rossney 最近创建的主题
Robert Rossney 最近回复了
14 年前
回复了 Robert Rossney 创建的主题 » 什么样的python特性会激发C开发人员的兴趣?

我是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 .