现在的位置: 首页 > 综合 > 正文

循环、列表推导式and函数编程 in Python

2013年09月12日 ⁄ 综合 ⁄ 共 1506字 ⁄ 字号 评论关闭

循环结构是编程时的常用结构。特别在处理序列化对象(例如:list(列表)、dict(字典)、tuple(元组))时循环好象是必须使用的。但是在Python中有更方便的处理方式那就是列表推导式以及函数编程方式。

如果我们要找出某个目录如"c://"下所有扩展名为".txt"的文件用三种方式实现如下:

循环:
import os
dirpath = 'c://'
result = []
for filename in os.listdir(dirpath):
 
                                          #列出此目录下所有目录项
      if os.path.isfile(os.path.join(dirpath,filename)) /                #判断此目录项是否是文件
         and os.path.splitext(filename)[1] == '.txt':                     #判断此目录项是否以'.txt'结尾
            result.append(filename)

列表推导式:
import os
dirpath='c://'
result=[ filename for filename in os.listdir(dirpath) if os.path.isfile(os.path.join(dirpath,filename)) /
            and os.path.splitext(filename)[1] == '.txt' ]
           
#利用列表推导式来生成列表确实方便好多

函数编程方式:
import os
dirpath='c://'
result=filter(lambda fn : ((os.path.isfile(os.path.join(dirpath,fn)) and os.path.splitext(fn)[1]) and True or False) /
                  , os.listdir(dirpath))
                  
#首先定义了lambda匿名函数接收一个目录项名,如果此目录项以'.txt'为扩展名且是一个文件
                  #那么返回True否则返回False。'A and B or C '是一个类似c语言三目运算符' A ? B : C '的习惯
                  #性用法。但是它并不相同,如果你要使用这个方法则必须保证B的值必须为真,不能为
                  #False、None、[]、{}等一切为假的值,否则这个用法会得出你不希望的结果。
                  #filter(f,list)则是对传入的列表的每个值执行f函数操作,并将所有f返回真的列表项返回

如果你看那些python大师级的程序员写的代码,简直就是表达式、lambda函数、filter()、map()、reduce()、'... and ... or ... '、列表推导式的集合。善用fp方式编程可以导致更快速的开发更短以及错误更少的代码。

资料连接:
http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/charm-10/index.shtml 可爱的 Python:Python 中的函数编程
http://www.chinesepython.org/pythonfoundry/limodoupydoc/dive/html/index.html 深入Python (Dive Into Python)

抱歉!评论已关闭.