在一般的,假设你有一个像下面的方法.
def intersect_two_lists(self, list1, list2):
if not list1:
self.trap_error("union_two_lists: list1 must not be empty.")
return False
if not list2:
self.trap_error("union_two_lists: list2 must not be empty.")
return False
#http://bytes.com/topic/python/answers/19083-standard
return filter(lambda x:x in list1,list2)
Run Code Online (Sandbox Code Playgroud)
在这个特殊的方法中,当发现错误时,我不想在这种情况下返回空列表,因为这可能是这个特定方法调用的真正答案,我想返回一些东西来指示参数不正确.所以我在这种情况下错误地返回False,否则返回一个列表(空或不).
我的问题是,在这样的领域中最好的做法是什么,而不仅仅是列表?返回我想要的任何东西,并确保我记录下来供用户阅读?:-)你们大多数人都做了什么:
我最近发布了一个使用lambda函数的问题,并且在回复中有人提到lambda不受欢迎,而是使用list comprehensions.我对Python比较陌生.我做了一个简单的测试:
import time
S=[x for x in range(1000000)]
T=[y**2 for y in range(300)]
#
#
time1 = time.time()
N=[x for x in S for y in T if x==y]
time2 = time.time()
print 'time diff [x for x in S for y in T if x==y]=', time2-time1
#print N
#
#
time1 = time.time()
N=filter(lambda x:x in S,T)
time2 = time.time()
print 'time diff filter(lambda x:x in S,T)=', time2-time1
#print N
#
#
#http://snipt.net/voyeg3r/python-intersect-lists/
time1 = time.time()
N = …Run Code Online (Sandbox Code Playgroud) 我正在编辑PROSS.py以处理蛋白质结构的.cif文件.在现有的PROSS.py中,有以下函数(我相信如果它与任何类没有关联,它的名称是正确的吗?),只存在于.py文件中:
...
def unpack_pdb_line(line, ATOF=_atof, ATOI=_atoi, STRIP=string.strip):
...
...
def read_pdb(f, as_protein=0, as_rna=0, as_dna=0, all_models=0,
unpack=unpack_pdb_line, atom_build=atom_build):
Run Code Online (Sandbox Code Playgroud)
我为命令行参数添加了一个optons解析器,其中一个选项是指定除unpack_pdb_line之外使用的替代方法.所以选项解析器的相关部分是:
...
parser.add_option("--un", dest="unpack_method", default="unpack_pdb_line", type="string", help="Unpack method to use. Default is unpack_pdb_line.")
...
unpack=options.unpack_method
Run Code Online (Sandbox Code Playgroud)
但是,options.unpack_method是一个字符串,我需要使用与options.unpack_method中的字符串同名的函数.如何使用getattr等将字符串转换为实际的函数名?
谢谢,
保罗