Python - 不能将元组作为参数传递给另一个模块

时间:2016-07-04 17:44:08

标签: python

首先,我应该告诉我,我是Python的新手! 所以,我可能会尝试做一些不可能的事情,或者应该以不同方式完成的事情。我在互联网上找不到任何关于它的例子。

我在.py中有两个模块。 server.py和delay_simulator.py。当我从服务器调用delay_simulator时,我想传递一个元组作为参数。但是我无法在delay_simulator模块中收到tuple参数。

我将把代码放在下面。请注意,元组是pkt_recv。

server.py (只是代码的一部分)

import delay_simulator
from collections import namedtuple
pkt = namedtuple("pkt", ["seq_num", "pkt_type", "data"])
. . .
# !!! - Here is where I call the other module and try to pass the tuple pkt_recv
returned_object = delay_simulator ("string", pkt_recv, prob_loss, rtt, average_delay)

delay_simulator.py (只是代码的一部分)

import sys
from collections import namedtuple
pkt = namedtuple("pkt", ["seq_num", "pkt_type", "data"])
. . .
caller = str(sys.argv[1])
# !!! - Here is where I can't receive the tuple
pkt_recv = pkt(sys.argv[2])
prob_loss = float(sys.argv[3])
rtt = float(sys.argv[4])
average_delay = float(sys.argv[5])

当我运行程序server.py时,模块delay_simulator.py无法识别第二个参数,它的行为就像它不存在一样! sys.argv是否使用了错误的功能?是否有另一种传递这些参数的方法,包括一个元组?

提前感谢所有人:)

1 个答案:

答案 0 :(得分:0)

如果要将变量从一个模块传递到下一个模块,则需要将其封装在函数中。试试这个:

server.py(只是代码的一部分)

import delay_simulator
from collections import namedtuple
pkt = namedtuple("pkt", ["seq_num", "pkt_type", "data"])
. . .
# !!! - Here is where I call the other module and try to pass the tuple pkt_recv
returned_object = delay_simulator.getTuple("string", pkt_recv, prob_loss, rtt, average_delay)

delay_simulator.py(只是代码的一部分)

import sys
from collections import namedtuple
pkt = namedtuple("pkt", ["seq_num", "pkt_type", "data"])
. . .

def getTuple(arg1, arg2, arg3, arg4, arg5):
    caller = str(sys.arg1)
    pkt_recv = pkt(sys.arg2)
    prob_loss = float(sys.arg3)
    rtt = float(sys.arg4)
    average_delay = float(sys.arg5)

    return (caller, pkt_recv, prob_loss, rtt, average_delay)