1

我有一个函数,它在开始时声明一个字符串:

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)

当您必须多次执行此操作时,这很乏味。我希望原始字符串可以得到更新。

4

3 回答 3

1

无法自动更新字符串。

但是,您可以将字符串实现为以下函数current_uarfcn

ran_update_uarfcn = lambda x: "upd ap " + access_point_id + " uarfcn=" + x

并通过ran_update_uarfcn(current_uarfcn)

于 2013-04-23T10:44:50.903 回答
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)
于 2013-04-23T10:46:00.050 回答
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)
于 2013-04-23T18:25:20.770 回答