簡體   English   中英

如何在Python中將參數列表傳遞給函數

[英]How to pass a list of parameters to a function in 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(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()

它運作良好。 如果我設計具有2個或更多參數的函數func,並將這些參數以列表的形式傳遞給類,那么如何正確地在函數worker中調用func函數?

例如。

def __init__ (self, t_num, content, t_func, t_func_p):
            for item in content:
                self.q.put(item)
            self.t_num = t_num
            self.t_func = t_func
            self.t_func_p = t_func_p

def func(i, j, k):
m = MyThread(4, x, func, [j, k])

您需要使用*args**kwargs將任意數量的參數傳遞給函數。

這是更多信息: http : //www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

也許這會有所幫助:

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....)

通常,如果要將許多參數傳遞給特定的函數,則可以考慮將它們包裝到一個簡單的對象中,原因是

  1. 如果您需要添加/刪除參數,只需修改對象,函數本身,方法簽名(及其所有引用)將保持不變。
  2. 在使用對象時,您將始終知道您的功能將收到什么(如果您在團隊中工作,這將使更多的人使用該功能,這特別有用)。
  3. 最后,由於您控制對象在其構造函數上的創建,因此可以確保與該對象關聯的值正確(例如,在構造函數中,可以確保沒有空值或類型正確) )。

如果您仍然想使用多個參數,請檢查* args和** kwargs,盡管我個人並不喜歡這樣做,因為它最終可能會迫使人們閱讀該函數的源代碼才能使用它。

祝好運 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM