如何在Python中将参数列表传递给函数

如何在Python中将参数列表传递给函数,python,Python,我以这种方式扭曲了一个类: import Queue import threading class MyThread(): q = Queue.Queue() content = [] result = {} t_num = 0 t_func = None def __init__ (self, t_num, content, t_func): for item in content: self.q.put

我以这种方式扭曲了一个类:

import Queue
import threading

class MyThread():
    q = Queue.Queue()
    content = []
    result = {}
    t_num = 0
    t_func = None
    def __init__ (self, t_num, content, t_func):
        for item in content:
            self.q.put(item)
        self.t_num = t_num
        self.t_func = t_func

    def start(self):
        for i in range(self.t_num):
            t = threading.Thread(target=self.worker)
            t.daemon = True
            t.start()
        self.q.join()
        return self.result

    def worker(self):
        while True:
            item = self.q.get()
            value = self.t_func(item)
            self.result[item] = value
            self.q.task_done()


x = [5, 6, 7, 8, 9]
def func(i):
    return i + 1

m = MyThread(4, x, func)
print m.start()
它工作得很好。如果我用两个或多个参数设计函数func,并将这些参数以列表形式传递给类,那么如何在函数worker中正确调用func函数

例如

也许这会有帮助:

def __init__(self, t_num, content, func, *params):
    func(*params) # params is a list here [param1, param2, param3....]


def func(param1, param2, param3):
# or 
def func(*params): # for arbitrary number of params

m = MyThread(4, x, func, param1, param2, param3....)

您需要使用
*args
**kwargs
向函数传递任意数量的参数


这里有更多信息:

作为一般规则,如果要将许多参数传递给特定函数,可以考虑将它们封装成一个简单的对象,其原因是

  • 如果需要添加/删除参数,只需修改对象和函数本身,方法签名(及其所有引用)将保持不变
  • 在处理对象时,您将始终知道您的函数正在接收什么(如果您在一个团队中工作,更多的人将使用该函数,这一点特别有用)
  • 最后,由于您可以在其构造函数上控制对象的创建,因此可以确保与对象关联的值是正确的(例如,在构造函数中,您可以确保没有空值,或者类型是正确的)
  • 如果仍然要使用多个参数,请检查*args和**kwargs,尽管我个人不喜欢这样,因为这可能会迫使人们阅读函数的源代码以使用它


    祝你好运:)

    你能举一个你想写的代码的例子吗?
    def __init__(self, t_num, content, func, *params):
        func(*params) # params is a list here [param1, param2, param3....]
    
    
    def func(param1, param2, param3):
    # or 
    def func(*params): # for arbitrary number of params
    
    m = MyThread(4, x, func, param1, param2, param3....)