在函数中进一步更改字符串值

时间:2013-04-23 10:40:38

标签: python

我有一个在开头声明字符串的函数:

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)

当你不得不多次这样做时,这很乏味。我希望原始字符串可以更新。

3 个答案:

答案 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)