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

Python闭包make_currency调用convert方法时lambda未生效问题求助

问题根因

原代码的convert逻辑直接复用了set_value对应的处理函数,没有执行传入的转换lambda表达式,仅修改了货币符号,金额值未做任何计算更新。

修复后完整代码

def make_currency(val, sym):
    def dispatch(message):
        if message == 'get_value':
            def get_value(msg):
                if msg == 'amount':
                    return val
                elif msg == 'symbol':
                    return sym
            return get_value

        if message == 'set_value':
            def set_value(msg, value):
                nonlocal val
                nonlocal sym
                if msg == 'amount':
                    val = value
                elif msg == 'symbol':
                    sym = value
            return set_value
        # 单独处理convert逻辑
        if message == 'convert':
            def convert(converter_func, new_sym):
                nonlocal val, sym
                # 执行传入的lambda转换金额
                val = converter_func(val)
                # 更新货币符号
                sym = new_sym
            return convert

        return '{0}{1:.2f}'.format(sym,val)
    return dispatch

c = make_currency(10.50,'$')
print(c('get_value')('amount'))
print(c('get_value')('symbol'))
c('set_value')('amount',50)
print(c('get_value')('amount'))
print(c('str'))
c('convert')(lambda x: x*3.87, '₪')
print(c('str'))

核心修改点

  • 拆分convert与set_value的逻辑分支,不再共用处理函数
  • 新增convert专属处理函数,接收转换lambda和新货币符号两个参数,先使用当前金额值执行lambda得到转换后的新金额,再更新货币符号
  • 最后输出字符串时添加.2f格式化,保证金额固定保留两位小数,符合货币输出习惯

修改后运行输出完全符合预期:

10.5
$
50
$50
₪193.50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:07