如何将参数传递给作为关键字参数传递的函数?

时间:2019-07-25 16:01:27

标签: python

我有一个tkinter按钮,谁的命令调用一个带有参数的函数,在这种情况下,该函数将tkinter窗口作为参数。

from tkinter import *

def main():
    root = Tk()
    app = Application(master=root)
    app.update()

def do_something(tk_win):
    # Do something to the window

class Application(Frame):
    master = None

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.frame = Frame(self.master)
        self.btn = Button(self, text="Redo Search", command=do_something, self)
        self.frame.pack()
        self.search_again.pack()

我为IDE分配btn的值的行被我的IDE标记为“位置自变量跟随关键字自变量”。我明白为什么这么说,但是我不知道如何将self作为参数传递给函数。我该怎么做呢?谢谢!

4 个答案:

答案 0 :(得分:3)

要在调用第二个self时将其作为参数传递给do_something,您可以创建一个零参数函数,该函数在调用时依次使用所需的单个参数调用do_something

一种方法是使用lambda

self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))

...而另一种方法是使用functools.partial helper(在functools模块中)来生成“部分评估”功能,以达到以下目的:

self.btn = Button(self, text="Redo Search", command=functools.partial(do_something, self))

答案 1 :(得分:0)

简单,从函数中删除自身

self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))

答案 2 :(得分:0)

以下更改对您的设计有用吗?使该函数成为该类的一部分,并使用“ self-dot”语法对其进行“正常”调用。

formSubmit(event) {
  var obj = {
    title: this.title,
    status: this.status
  };
  axios.post('/add-item', this.$data)
    .then((response) => {
      this.$eventBus.$emit('newitem', obj)
    })
  event.target.reset();
}

答案 3 :(得分:0)

通过使用do_something(self)函数。

返回一个新的部分对象,该对象在被调用时的行为类似于使用位置参数args和关键字arguments关键字调用的func。如果将更多参数提供给调用,则将它们附加到args。如果提供了其他关键字参数,它们将扩展并覆盖关键字。大致相当于:

def局部(函数,参数,*关键字):     def newfunc(* fargs,** fkeywords):         newkeywords = keyword.copy()         newkeywords.update(fkeywords)         return func(* args,fargs,* newkeywords)     newfunc.func =函数     newfunc.args = args     newfunc.keywords =关键字     返回newfunc