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

嵌套for循环中locals()+eval()失效问题及代码函数化改造需求

问题:封装globals()[eval()]遍历逻辑时的变量访问问题

我之前用globals()[eval()]实现数据库字段的批量求和遍历,现在要把这段代码封装成函数以便从其他文件传参,但遇到了变量访问问题:

  • 函数内使用globals()无法正确访问循环中定义的变量
  • 换成locals()后,eval()返回空序列,同样无法访问外层循环的变量(如win、loss、tko等)

原代码

for fighter in ['1', '2']:
    win = 0
    loss = 0
    for outcome in ['win', 'loss']:
        tko = 0
        sub = 0
        dec = 0
        for method in ['tko', 'sub', 'dec']:
            for rnd in ['1', '2', '3', '4', '5', '6']:
                globals()[eval('outcome')] += fights_fighters_table[
                    'r' + rnd + '_' + method + '_' + outcome + '_' + fighter]
                globals()[eval('method')] += fights_fighters_table[
                    'r' + rnd + '_' + method + '_' + outcome + '_' + fighter]

            # 将TKO/SUB/DEC的胜负统计写入DataFrame
            fights_fighters_table[method + '_' + outcome + '_' + fighter] = globals()[eval('method')]

        globals()[eval('outcome')] += fights_fighters_table['dq_' + outcome + '_' + fighter]

        fights_fighters_table[outcome + '_' + fighter] = globals()[eval('outcome')]

数据示例与预期结果

输入数据示例(fights_fighters_table部分字段)

r1_tko_win_1 = 4
r2_tko_win_1 = 2
r3_tko_win_1 = 0
r1_tko_loss_1 = 1
r2_tko_loss_1 = 0
r3_tko_loss_1 = 2
r1_sub_win_1 = 0
r2_sub_win_1 = 1
r2_sub_win_1 = 0
r1_sub_loss_1 = 1
r2_sub_loss_1 = 1
r3_sub_loss_1 = 0

预期输出结果(求和后新增字段)

win_1 = 7
loss_1 = 5
tko_win_1 = 6
sub_win_1 = 1
tko_loss_1 = 3
sub_loss_1 = 2

完整精简数据示例

r1_tko_win_1     3839
r2_tko_win_1     3839
r3_tko_win_1     3839
r4_tko_win_1     3839
r5_tko_win_1     3839
r6_tko_win_1     3839
r1_tko_loss_1    3839
r2_tko_loss_1    3839
r3_tko_loss_1    3839
r4_tko_loss_1    3839
r5_tko_loss_1    3839
r6_tko_loss_1    3839
r1_sub_win_1     3839
r2_sub_win_1     3839
r3_sub_win_1     3839
r4_sub_win_1     3839
r5_sub_win_1     3839
r6_sub_win_1     3839
r1_sub_loss_1    3839
r2_sub_loss_1    3839
r3_sub_loss_1    3839
r4_sub_loss_1    3839
r5_sub_loss_1    3839
r6_sub_loss_1    3839
r1_dec_win_1     3839
r2_dec_win_1     3839
r3_dec_win_1     3839
r4_dec_win_1     3839
r5_dec_win_1     3839
r6_dec_win_1     3839
r1_dec_loss_1    3839
r2_dec_loss_1    3839
r3_dec_loss_1    3839
r4_dec_loss_1    3839
r5_dec_loss_1    3839
r6_dec_loss_1    3839
r1_tko_win_2     3839
r2_tko_win_2     3839
r3_tko_win_2     3839
r4_tko_win_2     3839
r5_tko_win_2     3839
r6_tko_win_2     3839
r1_tko_loss_2    3839
r2_tko_loss_2    3839
r3_tko_loss_2    3839
r4_tko_loss_2    3839
r5_tko_loss_2    3839
r6_tko_loss_2    3839
r1_sub_win_2     3839
r2_sub_win_2     3839
r3_sub_win_2     3839
r4_sub_win_2     3839
r5_sub_win_2     3839
r6_sub_win_2     3839
r1_sub_loss_2    3839
r2_sub_loss_2    3839
r3_sub_loss_2    3839
r4_sub_loss_2    3839
r5_sub_loss_2    3839
r6_sub_loss_2    3839
r1_dec_win_2     3839
r2_dec_win_2     3839
r3_dec_win_2     3839
r4_dec_win_2     3839
r5_dec_win_2     3839
r6_dec_win_2     3839
r1_dec_loss_2    3839
r2_dec_loss_2    3839
r3_dec_loss_2    3839
r4_dec_loss_2    3839
r5_dec_loss_2    3839
r6_dec_loss_2    3839

注:需要对两名拳手('1'和'2')分别执行上述求和操作

内容的提问来源于stack exchange,提问作者MMA Attic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:15:59