简体   繁体   中英

'Undefined' parameters in function calls in python

Whenever I program something in python with Tkinter , the code looks like this:

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

My problem is, I don't really understand why Frame(width=800, height=500) or place(x=0, y=0) is working: I didn't define the parameters height , width , x and y . Looking at the code in the Tkinter - module, the functions expect a paramter called *args or **kw . I know how to use them (at least well enough to develop some small applications), but I don't know how to define a function which uses this parameters. I feel like I don't know really much about this part of python, though I can work with it.

So my Question is:
how can I define a function, what is called with the following Syntax:

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

I don't need to know how to make a function what accepts a varying amount of parameters (combined with my problem), but it would be fine too.

What you are referring to are called keyword arguments .

Arguably one of the best ways to define a function with specific keyword arguments is to provide defaults. It's common for the default to be None if you don't have the need for any other default:

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

You can then call this function like so:

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

You can also do what tkinter functions do, and accept **kwargs as a parameter. This gathers up all named arguments into a dictionary that you can then iterate over:

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

Note: you don't have to use the name kwargs -- you can use any name you want ( **kw , **kwargs , **whatever ), but kwargs seems to be the most common.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM