我在Windows上使用Python 3。我正在使用threading.Thread
动态运行一个函数,我可以使用或不使用参数调用它。我正在设置一个事物列表,其中第一项是定义路径的字符串。其他参数将是列表中的后续内容。因此,args可能等于['C:\SomePath']
或者它可能等于['C:\SomePath', 'First Argument', 'Second Argument']
。我的电话看起来像这样:
my_script = threading.Thread(target=scr_runner, args=q_data.data)
my_script.start()
问题是在调用threading.Thread
和/或start
函数的过程中,参数正在丢失其列表特征(isinstance(q_data.data, str)=False
),但在{{1 }} function,它接受scr_runner
参数script_to_run_data
我需要这个论点来保持整个列表。我怎么能这样做?
我在文档中读到isinstance(script_to_run_data, str)=True.
函数期待一个元组。将threading.Thread
之类的东西转换为元组会出现问题,它会变成字符串吗?
提前感谢您的时间!
这是一个MWE:
['C:\SomePath']
现在,奇怪的是当我让my_list有更多元素时我收到错误:
# coding=utf-8
""" This code tests conversion to list in dynamic calling. """
import threading
def scr_runner(script_to_run_data: tuple) -> None:
""" This is the function to call dynamically. """
is_list = not isinstance(script_to_run_data, str)
print("scr_runner arguments are a list: T/F. " + str(is_list))
my_list=['C:\SomePath']
is_list = not isinstance(my_list, str)
print("About to run script with list argument: T/F. " + str(is_list))
my_script = threading.Thread(target=scr_runner, args=my_list)
my_script.start()
产生错误:
# coding=utf-8
""" This code tests conversion to list in dynamic calling. """
import threading
def scr_runner(script_to_run_data: tuple) -> None:
""" This is the function to call dynamically. """
is_list = not isinstance(script_to_run_data, str)
print("scr_runner arguments are a list: T/F. " + str(is_list))
my_list=['C:\SomePath', 'First Argument', 'Second Argument']
is_list = not isinstance(my_list, str)
print("About to run script with list argument: T/F. " + str(is_list))
my_script = threading.Thread(target=scr_runner, args=my_list)
my_script.start()
答案 0 :(得分:2)
args
是一系列要传递的参数;如果你想传递一个list
作为唯一的位置参数,你需要传递args=(my_list,)
使其成为包含list
的一元组(或者大多数等价,args=[my_list]
})。
它必须是一个参数序列,即使只传递一个参数,也正是为了避免你创建的歧义。如果scr_runner
有三个参数,两个有默认值,my_list
长度为3,你的意思是将三个元素作为三个参数传递,或者my_list
应该是第一个参数,其他两个仍然是默认值?