我想看看是否可以遍历函数中的函数列表。我能找到的最接近的东西是在整个模块中循环。我只想使用预先选择的函数列表。
这是我最初的问题:给定一个字符串,检查每一个字母,看看是否有5个测试满足。
如果至少有一个字母通过检查,则返回True。
如果字符串中的所有字母都未通过检查,则返回False。
对于字符串中的每个字母,我们将检查以下函数:isalnum()、isalpha()、isdigit()、islower()、isupper()
每个测试的结果应该打印到不同的行。
样本输入qA2
示例输出(必须打印到单独的行,如果至少有一个字母通过,则为True;如果所有字母都未通过每个测试,则为false):True
True
True
True
True
我写这个是为了一个测试。当然,我可以写5组不同的代码,但看起来很难看。然后我开始想我能不能把他们要求的所有测试循环一遍。
一个测试的代码:raw = 'asdfaa3fa'
counter = 0
for i in xrange(len(raw)):
if raw[i].isdigit() == True: ## This line is where I'd loop in diff func's
counter = 1
print True
break
if counter == 0:
print False
我尝试运行所有测试的循环失败:raw = 'asdfaa3fa'
lst = [raw[i].isalnum(),raw[i].isalpha(),raw[i].isdigit(),raw[i].islower(),raw[i].isupper()]
counter = 0
for f in range(0,5):
for i in xrange(len(raw)):
if lst[f] == True: ## loop through f, which then loops through i
print lst[f]
counter = 1
print True
break
if counter == 0:
print False
那么我该如何修改这些代码来实现上面的所有规则呢?
使用来自所有注释的信息-此代码满足上述规则,并动态循环每个方法。raw = 'ABC'
functions = [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]
for func in functions:
print any(func(letter) for letter in raw)
getattr方法(我认为这称为内省方法?)raw = 'ABC'
meths = ['isalnum', 'isalpha', 'isdigit', 'islower', 'isupper']
for m in meths:
print any(getattr(c,m)() for c in raw)
列表理解方法:from __future__ import print_function ## Changing to Python 3 to use print in list comp
raw = 'ABC'
functions = [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]
solution = [print(func(raw)) for func in functions]