我有一个在开头声明字符串的函数:
def ran_network_listen(access_point_id, mode):
current_uarfcn = "10650"
ran_update_uarfcn = "upd ap" + " " + access_point_id + " " + "uarfcn=" + current_uarfcn
//etc
稍后在函数中,在多个地方,我更改了current_uarfcn
的值。
然后我将ran_update_uarfcn
传递给另一个函数。现在ran_update_uarfcn
包含为其设置的原始值。因此,我将永远是10650
。
current_uarfcn = "11000"
proc_stdout = ran_cmd(ran_update_uarfcn)
有没有办法更新原始字符串而不必每次都要将它传递给像我必须在下面的函数那样定义它?
current_uarfcn = "11000"
ran_update_uarfcn = "upd ap" + " " + access_point_id + " " + "uarfcn=" + current_uarfcn
proc_stdout = ran_cmd(ran_update_uarfcn)
当你不得不多次这样做时,这很乏味。我希望原始字符串可以更新。
答案 0 :(得分:1)
无法自动更新字符串。
但是,您可以将字符串实现为current_uarfcn
:
ran_update_uarfcn = lambda x: "upd ap " + access_point_id + " uarfcn=" + x
并传递ran_update_uarfcn(current_uarfcn)
。
答案 1 :(得分:1)
定义内部函数set_current_uarfcn(value)
current_uarfcn = ""
ran_update_uarfcn = ""
def ran_network_listen(access_point_id, mode):
def set_current_uarfcn(value):
global current_uarfcn
global ran_update_uarfcn
current_uarfcn = value
ran_update_uarfcn = "upd ap" + " " + access_point_id + " " + "uarfcn=" + current_uarfcn
set_current_uarfcn("10650")
//etc
然后在你的函数中,你可以写:
set_current_uarfcn("11000")
proc_stdout = ran_cmd(ran_update_uarfcn)
答案 2 :(得分:1)
你的意思是一个字符串模板?
def ran_network_listen(access_point_id, mode):
ran_update_uarfcn_tmpl = "upd ap {access_point_id} uarfcn={uarfcn}"
ran_update_uarfcn = lambda uarfcn: ran_update_uarfcn_tmpl.format(access_point_id=access_point_id, uarfcn=uarfcn)
current_uarfcn = "10650"
print ran_update_uarfcn(current_uarfcn)
current_uarfcn = "11000"
proc_stdout = ran_cmd(ran_update_uarfcn(current_uarfcn))
或许你可以进一步重构这个?
def uarfcn_str(method, access_point_id, uarfcn):
return "{method} ap {apid} uarfcn={uarfcn}".format(
method=method, apid=access_point_id, uarcfn=uarfcn)
def ran_cmd_update_uarcfn(apid, uarfcn):
return ran_cmd(uarfcn_str('upd', apid, uarfcn))
def ran_network_listen(access_point_id, mode):
ran_cmd_upd = lambda uarfcn: ran_cmd_update_uarcfn(access_point_id, uarfcn)
current_uarfcn = "10650"
proc_stdout = ran_cmd_upd(current_uarfcn)
current_uarfcn = "10650"
proc_stdout = ran_cmd_upd(current_uarfcn)