从C#到Python:2 运算符、表达式和流程控制
2010-09-30 22:36:47 来源:WEB开发网1 #Python中用列表内涵模拟以上LINQ语句
2 s = [x for x in range(0, 10) if x % 2 == 0]
当然上边的例子很简单,实际上我们可以用列表内涵完成更复杂的程序设计任务,而且效率一般会比使用for、if等的组合语句高(因为中间省略了一些列表的生成和赋值过程)。Python 2.5 之后,列表内涵进行了进一步的扩展,如果一个函数接受一个可迭代对象作为参数,那么可以给它传递一个不带中括号的列表内涵,这样就不需要一次生成整个列表,只要将可迭代对象传递给函数。
当然,列表内涵也不能滥用,可能会严重影响代码可读性,一个典型的反面例子见我的另一篇文章《学习Python列表内涵:一行代码搞定双倍超立方数计算》,这是初学者作品,谢绝效仿啊:)
2.4 动态表达式
先布置一个思考题:在C#语言中,如果需要在文本框中输入1+2(或更复杂的数学表达式)后计算它的值,你会怎么做呢?
不怕大家笑,我在用C#解决这个问题的时候,是自己做了一个表达式解析器…………,虽然只能计算加减乘除的简单组合,但也着实费了我好大力气。后来才开始使用各种各样的第三方Parse组件,msscript等。现在我们有了Python,要完成这个任务可以说是非常简单,简单到你不敢相信:只要用内置的eval()函数,就可以计算并返回任意有效表达式的值。例如:
1 str = '1+2'
2 print eval(str)
你还可以试验更复杂的表达式,是不是很Powerful的一项功能?
除了eval函数之外,Python还提供了exec语句将字符串str当成有效Python代码来执行,看下面的例子:
1 #exec.py
2 exec 'a=100'
3 print a
另外还有execfile函数,它用来执行一个外部的py文件。上一个例子存为exec.py后,运行下边的代码就知道是怎么回事了:
1 execfile(r'c:\exec.py')
最后提醒,默认的eval(),exec,execfile()所运行的代码都位于当前的名字空间中,eval(), exec,和execfile()函数也可以接受一个或两个可选字典参数作为代码执行的全局名字空间和局部名字空间,具体可以参考Python的手册,我就不啰嗦了。
2.5 小结
本章简要比较了Python与C#在运算符、表达式、程序流程控制语句等方面的异同,要点如下:
(1) Python的算术运算符除了+、-、*、/、%之外,还有求幂(**)和取整除(//);
(2) Python支持复合赋值(x+=1),但不支持C#中的自增和自减运算符(如x++);
(3) Python用and、or、not代替了C#语言中的逻辑运算符&&、||和!,同时and、or所执行的逻辑运算不返回布尔值,而是返回实际比较值之一;
(4) Python的选择语句包括if、elif和else,记得后边加冒号;Python中没有switch,但可以用if-elif-else或dict完成相同的任务模拟;
(5) Python的循环语句有while、for,它们都支持else语句;注意Python的for相当于C#中的foreach语句,同时可以用for + range对象模拟C#中的常规for循环;
(6) 两种语言的异常处理语句基本一致,不同的是Python的异常处理也支持else。
更多精彩
赞助商链接