.NET作为一个成熟的开发平台,为很多语言的发展提供了肥沃的土壤:历史相对久远的有Managed C++、C#、VB.NET、J#,正值壮年的则有IronPython、IronRuby,而老赵极力推崇的F#则是后起之秀了。面对那么多的语言,选择自然也是一个难题。在大部分开发人员眼中,C#是最为正统的.NET语言,它几乎是为.NET而生的,语言版本更替的速度与.NET Framework相比,一点都不含糊,这不,C# 4.0都出来了。因此,C#通常都是.NET开发人员的首选语言。但是,掌握了C#之后,如果您希望学习多一种语言以增强解决问题的能力;如果您希望了解更多有关编程范式的内容;如果您希望了解DLR甚至编译器的设计;如果您希望……那么,IronPython将会是您的最佳选择,它就像是叮当的万能口袋,只要您伸手,您就会淘到想要的宝贝。

有关IronPython的历史,我在这里就不赘述了。简单的说,它是Python语言在.NET上的实现,既保持了Python所崇尚的编程哲学(想了解它?打开IronPython的控制台,在提示符之后输入import this,出现在屏幕上的就是著名的The Zen of Python),又为.NET开发人员带来了新鲜的开发模式。IronPython与传统的.NET开发语言不同,它是一门解释型的动态语言,也是一门多范式编程语言。尽管解释型、动态与多范式都是非常简单的词汇,但是它能够为开发人员带来更为直接了当的解决方案。譬如,在C# 3.0才引入的Lambda表达式以及闭包(Closure),而IronPython早已极好地支持这些体现了函数式编程的特性。即便是现在,使用IronPython实现闭包、duck typing以及运行期绑定都要比C#和VB.NET来得更为直观。也许您对会“直观”这一点不以为然,而事实上,我们在编写程序的时候,除了要让计算机为我们工作之外,还要让他人能够轻松地阅读我们的代码。作为程序员,我们都知道代码的可读性以及可维护性是多么重要,如果从一个软件的生命周期来看,升级与维护是软件最大的开销。您还记得KISS原则么?是的,就是Keep It Simple & Stupid。IronPython可以帮助我们实现这美妙的“亲吻”,真正去拥抱编程。

除了为开发人员带来更高的生产力之外,IronPython的出现也让“.NET平台糅合各种编程语言”真正实至名归。想必大家都会记得,早在.NET平台诞生之初,它所推崇的多语言协作理念是其最大的噱头。然而,.NET所述的多语言协作性仅仅体现在IL的层面上,那么在实际的项目开发当中,又会有谁愿意同时使用C#和VB.NET进行开发呢?由于IronPython是一门解释型语言,利用它来实现某些不稳定的业务逻辑就再适合不过了,省却了编译的过程,即改即运行。更重要的,我们可以在C#代码当中直接调用IronPython的代码!这些特性都让IronPython完全能够胜任C#左膀右臂的角色。

听Michael罗嗦了那么多,您是否觉得IronPython正是自己的新欢呢?觉得上述文字空洞无物?好吧,最后给大家送上两段代码,Code will tell.

代码一,实现了“把一个字符串数组中的元素转化为整数,再将其中的偶数放入一个List<int>容器中”的功能,C#版的代码可以参考老赵的文章《拯救C# 2.0,但是我们真做的到吗?》

>>> strArray = ["", "", "", ""]
>>> intArray = [int(i) for i in strArray if int(i) %  == 0]

代码二,实现了“找出长度较短的字符串”的功能,C#版的代码可以参考Klesh.Cn精心翻译的好文:C#和Java的闭包-Jon谈《The Beauty of Closures》 中的Example2b.cs 和Example2c.cs:

>>> SampleData = ["the", "quick", "brown", "fox", "jumped","over", "the", "lazy", "dog"]
>>> maxLength = raw_input("Maximum length of string to include?") 
>>> maxLength = int(maxLength)
>>> shortWords = [i for i in SampleData if len(i) <= maxLength]

出处:http://www.cnblogs.com/perhaps/archive/2010/04/23/1718261.html

作为.NET程序员,您需要IronPython么?的更多相关文章

  1. 总结一下ERP .NET程序员必须掌握的.NET技术

    总结一下ERP .NET程序员必须掌握的.NET技术,掌握了这些技术工作起来才得心应手   从毕业做.NET到现在,有好几年了,自认为只能是达到熟练的水平,谈不上精通.所以,总结一下,自己到底熟练掌握 ...

  2. 程序员必备,C#各类项目、开源项目插件资料收藏

    一.AOP框架     Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面 ...

  3. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  4. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  5. 传播正能量——做一个快乐的程序员

    引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累,顿时有感而发.自己本来不擅长写文章,更不擅长写这种非技术性的文章,但是在思绪喷薄之际,还是止不住有很多话要说.针对从客观上说&quo ...

  6. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  7. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

  8. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  9. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

随机推荐

  1. Cadence 15.7 win7无法启动解决方法

    原帖地址:http://blog.sina.com.cn/s/blog_69a5dce90100kscf.html 按照XP下的破解方法安装Cadence15.7后,  如果不能正常启动Cadence ...

  2. js的new到底干了啥 -

    javascript通过new操作符构建一个对象的步骤 <Javascript高级程序设计>的解释: 创建一个对象 将构造函数的作用域赋给新对象(把新对象作为构造函数的调用上下文,也就是t ...

  3. 小程序获取openId

    1.小程序获取微信openId   wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId / ...

  4. JavaScript点击事件-一个按钮触发另一个按钮

    <input type="button" value="Click" id="C" onclick="Go();" ...

  5. 每天一个Linux命令(9)mv命令

    mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中. 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加.而cp对文件进行复制,文件个数增加了.     (1) ...

  6. java获取调用此方法的上面的方法名、类

    StackTraceElement[] stacks = (new Throwable()).getStackTrace(); for (StackTraceElement stack : stack ...

  7. 【Flask】query可用参数

    ### query可用参数:1. 模型对象.指定查找这个模型中所有的对象.2. 模型中的属性.可以指定只查找某个模型的其中几个属性.3. 聚合函数. * func.count:统计行的数量. * fu ...

  8. 20145229吴姗珊 《Java程序设计》两天小总结

    20145229吴姗珊 <Java程序设计>两天小总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.从应用程序 ...

  9. URL重定向之一.htaccess文件和AllowOverride指令

    通常利用Apache的rewrite模块对URL进行重写的时候,rewrite规则会写在 .htaccess文件里.但是要使Apache能够正常读取 .htaccess文件的内容,就必须对 .htac ...

  10. ios9 3dtouch 博客

    http://my.oschina.net/u/2340880/blog/511509#OSC_h3_3