【问题标题】:'Undefined' parameters in function calls in pythonpython中函数调用中的“未定义”参数
【发布时间】:2016-11-18 16:52:06
【问题描述】:

每当我在 python 中使用Tkinter 编程时,代码如下所示:

    from Tkinter import *

    class GUI():

        def __init__(self, master):

            self.master = master # master is an instance of Tk
            self.master.title("") # set the name of the window

            self.frame = Frame(self.master, width=800, height=500, bg="#eeeeee")
            # 800, 500 and "#eeeeee" are examples of course
            self.frame.pack()

            self.canvas = Canvas(self.frame, width=800, height=500, bg="ffffff")
            self.canvas.place(x=0, y=0)
            #mostly there are some other widgets

        # here are obviously other methods

    def main():

        root = Tk()
        app = GUI(root) # root and app.master are synonyms now
        app.master.mainloop()

    if __name__ == '__main__':

        main()

我的问题是,我真的不明白为什么Frame(width=800, height=500)place(x=0, y=0) 有效:我没有定义参数heightwidthxy。查看Tkinter - 模块中的代码,函数需要一个名为*args**kw 的参数。我知道如何使用它们(至少足以开发一些小型应用程序),但我不知道如何定义使用这些参数的函数。我觉得我对 python 的这一部分不太了解,尽管我可以使用它。

所以我的问题是:
如何定义函数,使用以下语法调用:

functionName(parameterName1 = value, paramterName2 = value, ...)

我不需要知道如何制作一个接受不同数量参数的函数(结合我的问题),但它也可以。

【问题讨论】:

  • 任何基本的 Python 教程都会向您展示如何做到这一点。这是标准教程中的Defining Functions

标签: python python-2.7 function syntax tkinter


【解决方案1】:

您所指的内容称为关键字参数

可以说,使用特定关键字参数定义函数的最佳方法之一是提供默认值。如果您不需要任何其他默认值,默认值通常为 None

def functionName(parameterName1=None, parameterName2=None):
    print("parameter one is: %s" % str(parameterName1))
    print("parameter two is: %s" % str(parameterName2))

然后你可以像这样调用这个函数:

foo = functionName(parameterName1="hello", parameterName2="world")

你也可以做 tkinter 函数做的事情,接受 **kwargs 作为参数。这会将所有命名参数收集到一个字典中,然后您可以对其进行迭代:

def functionName(**kwargs):
    print("the arguments are:", kwargs)

注意:您不必使用名称kwargs——您可以使用任何您想要的名称(**kw**kwargs**whatever),但kwargs 似乎是最常见的.

【讨论】:

  • 谢谢,我已经知道如何设置默认值了,只是不知道可以在函数调用中输入参数名称。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2021-07-09
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多