如何在Python中通过变量名调用fuzzywuzzy库的方法?
解决fuzzywuzzy方法通过变量名调用的问题
你的代码里直接用fuzz.alg会报错,因为alg是字符串,不是fuzz对象的方法属性。下面是两种可行的解决方式:
方法1:用getattr()动态获取方法
如果你需要保留字符串形式的方法名,可以用Python内置的getattr()函数,从fuzz对象中取出对应名称的方法,再调用它:
from fuzzywuzzy import fuzz method_name1 = 'token_sort_ratio' method_name2 = 'partial_ratio' method_name3 = 'ratio' def compare_alg(l1, l2, alg): # 从fuzz对象中获取名为alg的方法 compare_func = getattr(fuzz, alg) # 调用方法并打印结果 print(compare_func(l1, l2)) compare_alg("Catherine M Gitau","Catherine Gitau", method_name1) compare_alg("Catherine M Gitau","Catherine Gitau", method_name2) compare_alg("Catherine M Gitau","Catherine Gitau", method_name3)
方法2:直接传递方法对象(更推荐)
不需要用字符串存方法名,直接把fuzz里的方法本身赋值给变量,调用时直接使用这个变量即可,这种方式更直观,还能避免字符串拼写错误:
from fuzzywuzzy import fuzz # 直接赋值方法对象,而非字符串 method1 = fuzz.token_sort_ratio method2 = fuzz.partial_ratio method3 = fuzz.ratio def compare_alg(l1, l2, alg): # 直接调用传入的方法 print(alg(l1, l2)) compare_alg("Catherine M Gitau","Catherine Gitau", method1) compare_alg("Catherine M Gitau","Catherine Gitau", method2) compare_alg("Catherine M Gitau","Catherine Gitau", method3)
两种方式的适用场景:
- 方法1适合需要动态指定方法名的场景(比如从配置文件读取方法名称)
- 方法2是Python中传递方法的常规做法,代码更简洁安全
内容的提问来源于stack exchange,提问作者sksankar
相关产品推荐
相关产品推荐

