Python使用动态对象变量名
有人说把php当作瑞士军刀的话,那么python就是牛刀了。这话果然没错!今天的需求看起来有点复杂,大概解释一下这个标题:比如你需要打开几个文件,但是这个操作在循环里,所以不可能给个固定变量当成打开的对象(这里应该叫句柄,不过既然python当成对象就这么叫吧)。那么我就需要file1=open()/file2=open()/file3=open()像这样的名字当对象名,能实现么?废话不能实现我还写这篇文章干嘛!我们需要用到locals这个函数,由于我讨厌长文废话,几段话无法解释的这个函数留到末尾的相关链接吧。先上代码,刚才那个需求的示例:
files = locals()
for i in xrange(1,201):
files['file%s' % i] = open('/filepath/filename', 'r')
搞定,很简单吧?假设打开的文件内容=上面的i值,看看效果:
>>> file1.read()
1
>>> file2.read()
2
>>> file50.read()
50
很神奇吧?python果然是牛刀。接下来再弄点别的,如果我要动态得调用fileX该怎么处理?使用exec即可,exec函数用来执行储存在字符串或文件中的Python语句。上代码:
>>> i=20
>>> exec('file' + i + '.write("data")') #这样就能向file20这个对象打开的文件写入字符串data
locals()的相关链接:http://woodpecker.org.cn/diveintopython/html_processing/locals_and_globals.html
Python使用动态对象变量名 没有评论