Python中操作self参数拼接字符串后缀的自定义函数调用不生效问题
问题原因
- Python中的字符串属于不可变对象,函数内部对形参的重新赋值不会修改外部传入的原始变量,必须主动接收函数返回的新字符串才能拿到处理后的结果。如果调用时只写
which_application("BTC")而没有用变量承接返回值,自然不会得到拼接后的内容。 - 现有函数的分支存在返回值缺失问题:
binance分支仅写了pass没有返回原字符串;输入不合法触发递归调用时,也没有将递归的执行结果返回,这两个分支最终都会默认返回None,自然无法拿到预期的币种名称。
修复方案
调整函数逻辑
建议先把形参名从self改成更符合普通函数语义的coin_name,self通常仅用于类的实例方法指代实例对象,普通函数使用容易造成混淆。同时补全所有分支的返回值,修改后代码如下:
def which_application(coin_name): print("Which application was this transaction made on? Type either 'hotbit' or 'binance'") which_application_prompt = input("").strip().lower() if which_application_prompt == 'hotbit': return coin_name + 'HB' elif which_application_prompt == 'binance': return coin_name else: print("Invalid input.") # 必须返回递归调用的结果 return which_application(coin_name)
正确调用方式
调用时必须用变量接收函数的返回值,示例:
origin_coin = "BTC" processed_coin = which_application(origin_coin) print(processed_coin)
执行后输入hotbit会输出BTCHB,输入binance会输出BTC,符合业务需求。
内容的提问来源于stack exchange,提问作者Taimur Adam
相关产品推荐
相关产品推荐

