You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将循环中的fun_name传入Fun类的map_list方法?

问题解决方案

先明确原代码的核心问题:你在初始化Fun对象时就调用了map_list(),但此时主程序的fun_name还没进入循环赋值,global关键字根本拿不到有效变量;而且类的设计没考虑到fun_name是动态变化的,每次循环都需要重新计算映射结果。下面给两种可行的修改方案:

方案一:将fun_name作为参数传递给方法

这种方式最直接,符合面向对象的封装原则,避免全局变量依赖:

class Fun:
    def __init__(self, user_input):
        # 把输入传入类初始化,避免依赖全局变量
        self.converted_list = list(user_input)
        
    def map_list(self, fun_name):      
        return list(map(lambda x: getattr(x, fun_name)(), self.converted_list))
        
    def return_bool(self, fun_name):
        # 每次调用时根据当前fun_name重新计算映射结果
        map_result = self.map_list(fun_name)
        for each_bool in map_result:
            if each_bool:
                return True
        return False


if __name__ == '__main__':
    user_input = input()
    if 0 < len(user_input) < 1000:
        fun = Fun(user_input)
        fun_set = ['isalnum','isalpha','isdigit','islower','isupper']
        for fun_name in fun_set:
            # 把当前循环的fun_name传入方法
            print(fun.return_bool(fun_name))

方案二:将fun_name设为实例属性,循环时更新

如果希望保留类内部的属性传递逻辑,可以这样改:

class Fun:
    def __init__(self, user_input):
        self.converted_list = list(user_input)
        # 初始化实例属性存储方法名
        self.fun_name = None
        
    def map_list(self):      
        # 直接使用实例属性中的方法名
        return list(map(lambda x: getattr(x, self.fun_name)(), self.converted_list))
        
    def return_bool(self):
        map_result = self.map_list()
        for each_bool in map_result:
            if each_bool:
                return True
        return False


if __name__ == '__main__':
    user_input = input()
    if 0 < len(user_input) < 1000:
        fun = Fun(user_input)
        fun_set = ['isalnum','isalpha','isdigit','islower','isupper']
        for fun_name in fun_set:
            # 每次循环更新实例的fun_name属性
            fun.fun_name = fun_name
            print(fun.return_bool())

为什么原global方式不可行?

你初始化fun = Fun()时,主程序的for循环还没开始,fun_name根本没被赋值,此时map_list()里的global fun_name要么找不到变量,要么拿到无效值。而且全局变量会让代码耦合性变高,不利于维护,不推荐使用。

内容的提问来源于stack exchange,提问作者Mango-danbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:35:09