【发布时间】:2014-02-18 16:09:41
【问题描述】:
这是“我认为答案是否定的,但无论如何我都会问”的问题之一。
我需要将元组列表传递给工作线程。 我现在拥有的:
Worklist[0]=('Read','Float','GagArray',Gagarray,200)
Worklist[1]=('Write','Int','Oiler',Oiler,1)
Worklist[2]=('Wrtie','BOOL','Buckets',Buckets,250)
...
Gagarray 是一个数字列表(在本例中为浮点数)。 我的工作线程需要 Name Gagarray 和 Gagarray。 我的工作线程将使用字符串“GagArray”从设备请求数据。 接收到的数据(本例中为 200 个浮点数)将被放入 GagArray 列表中。
这可行,但多余的“GagArray”和 GagArray 困扰着我。
我想做这样的事情:
Worklist[0]=('Read','Float','GagArray',200)
worker 将拥有字符串 'GagArray' 并使用它来引用 GagArray 列表。 即:
Element=Worklist[0][2]
^Element^[3]=3.14159
PS。所有引用都将在工作线程的范围内。 (全局)
我认为这与标准的参考传递问题有点不同。
【问题讨论】:
-
所以,python 不是按值调用,而是按对象引用调用,所以你总是在传递引用......但你的问题是不同的。您能否向我们展示您的代码,以便我们查看
Gagarray、Oiler等列表的范围? -
现在 GagArray、Oiler 等都是 globas。 (我以后可能会清理它)。对于它的价值,我认为在 C 中也不可能。
-
好吧,你可以让你的工人查找
globals()['GagArray']。这是an example ofglobals()... 但最好避免使用全局变量。为什么不创建像{'GagArray': GagArray, ...}这样的字典? -
globals()['GagArray'] 似乎是最干净的,除了会有大量的全局变量。制作字典仍然是多余的。 (实际上更糟的是因为现在我必须输入 GagArray 三次。一次在 Worklist 中,两次在字典中;-)
-
@2rs2ts:“所以,python 不是按值调用”它完全是按值调用。您描述的是按值调用。
标签: python parameter-passing pass-by-reference