为什么/为什么有些类需要每个可能的参数,而有些则不需要?

喜欢下雨的人

我最近在Python中使用了tkinter,而在tkinter中创建对象的实例时传递参数的方式一直让我感到困惑。

当我创建一个类自己,每一个可以传递参数,具有传递。但是,在tkinter中创建任何窗口小部件的实例时,不必立即传递所有可能的参数。它们各自默认为特定值。考虑以下用于创建画布小部件的代码:

canvas = tkinter.Canvas(root, width = 400, height = 250)

值(400,25)甚至不需要按顺序传递,它们由值之前的名称(宽度,高度)标识。我可以指定其他值(例如,background,border),但是没有必要这样做,因为默认值很好。

我已经搜索了很长时间,试图找到答案,但是,由于我不确定要如何称呼这些特殊参数,因此很难找到有关此内容的任何文字。

四人
  1. 有个叫默认参数的东西,

    def default_parameters(var1 = "cabbage"):
        print var1
    
    default_parameters(var1 = "salad")     # salad
    default_parameters("salad")            # salad
    default_parameters()                   # cabbage
    default_parameters("salad", "cabbage") # Error! Expects only one parameter
    

    在此,如果未传递任何参数,则使用定义中指定的默认值。

  2. 如果要接受许多参数,可以像这样在参数部分中解压缩它们

    def many_parameters(var1,  var2 = "cabbage", *args):
        print var1, var2, args
    
    many_parameters("salad", "cabbage", "rabbit", "ninja", "puppy")
    # salad cabbage ('rabbit', 'ninja', 'puppy')
    many_parameters("salad", "cabbage", "rabbit", "ninja")
    # salad cabbage ('rabbit', 'ninja')
    many_parameters("salad", "cabbage", "rabbit")
    # salad cabbage ('rabbit',)
    many_parameters("salad", "cabbage")
    # salad cabbage
    many_parameters("salad")
    # salad cabbage
    many_parameters()
    # many_parameters() takes at least 1 argument (0 given)
    many_parameters("salad", var2 = "ninja", "puppy")
    # SyntaxError: non-keyword arg after keyword arg
    many_parameters("salad", "puppy", var2 = "ninja")
    # many_parameters() got multiple values for keyword argument 'var2'
    

    在第一种情况下,将saladcabbage分配给var1var2,但是将其余的值分配给args作为元组。

    第二和第三种情况与第一种相同。

    第四种情况没有额外的参数,因此args将为空。

    第五种情况没有额外的参数,也没有的值var2,因此args将为空,并cabbage假设使用默认值(var2

    在第六种情况下,var1没有提供任何默认值。因此,它失败并显示at-least 1 argument expected错误。

    在第七种情况下,var2(命名变量)在未命名参数之前使用。这在Python中是错误的。

    在第八种情况下,var2(命名变量)和puppy位置参数)都被设置为var2现在,Python无法决定要使用哪个值var2因此,它失败了。

  3. 在前面的案例中,我们看到了如何处理默认参数和命名参数。现在,命名参数也称为关键字参数,通常表示为**kwargs,实际上是所有命名参数的键-值对的字典。注意:默认参数不算作关键字参数。

    def all_parameters(var1, var2 = "cabbage", *args, **kwargs):
        print var1, var2, args, kwargs
    
    all_parameters("salad", "cabbage", "rabbit")
    # salad cabbage ('rabbit',) {}
    all_parameters("salad", "cabbage")
    # salad cabbage () {}
    all_parameters("salad")
    # salad cabbage () {}
    all_parameters("salad", var2 = "ninja", "puppy")
    # SyntaxError: non-keyword arg after keyword arg
    all_parameters("salad", "puppy", var2 = "ninja")
    # all_parameters() got multiple values for keyword argument 'var2'
    all_parameters("salad", moderator="jonclements", python="martijinpieters")
    # salad cabbage () {'moderator': 'jonclements', 'python': 'martijinpieters'}
    

    我相信,除了最后一项之外,其他两个示例中已经涵盖了其他所有内容。在最后一种情况下,所有非默认但已命名的参数都存储在kwargs字典中。

注意:请记住函数定义中*in*args**in **kwargs它们负责传递给函数的参数的打包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

为什么有些C#api方法需要[HttpPost]而有些则不需要?

来自分类Dev

在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

来自分类Dev

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

来自分类Dev

为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

来自分类Dev

为什么有些程序需要-h而另一些则不需要

来自分类Dev

为什么有些类需要main方法,而另一些则不需要呢?

来自分类Dev

为什么有些程序需要安装,而其他程序则不需要?

来自分类Dev

为什么有些角度指令需要双重卷曲,而另一些则不需要?

来自分类Dev

为什么有些文本在WPF中会消失,而有些则不会

来自分类Dev

为什么有些工具(例如 dd)不需要挂载点来处理设备?

来自分类Dev

为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

来自分类Dev

为什么有些函数参数存储在堆栈上而有些存储在堆上?

来自分类Dev

为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

来自分类Dev

为什么有些非root程序可以双击执行而有些则不能?

来自分类Dev

为什么有些数组值会被覆盖,而有些则不会呢?的PHP

来自分类Dev

为什么有些原语有字节码,而有些则没有?

来自分类Dev

为什么某些内置javascript方法是静态的而有些则不是呢?

来自分类Dev

为什么有些 Angular 模块会导入而有些却不会?

来自分类Dev

为什么有些快照很快,而有些快照那么慢?

来自分类Dev

为什么有些行可以插入而有些行不能?

来自分类Dev

为什么有些算术指令有有符号/无符号变体,而有些则没有

来自分类Dev

为什么有些UWP项目有project.json而有些却没有?

来自分类Dev

正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

来自分类Dev

为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

来自分类Dev

为什么有些对象没有在这个 .splice() 中被移除而有些是?

来自分类Dev

为什么有些电子邮件ID被接受而有些却没有PHP

来自分类Dev

为什么我的一些圈子消失了,而有些则没有?

来自分类Dev

为什么有些网站免费提供字体,而有些网站让您付费购买相同的字体?

Related 相关文章

  1. 1

    为什么有些库需要嵌入而有些则不需要?

  2. 2

    为什么有些C#api方法需要[HttpPost]而有些则不需要?

  3. 3

    在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

  4. 4

    为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

  5. 5

    为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

  6. 6

    为什么有些程序需要-h而另一些则不需要

  7. 7

    为什么有些类需要main方法,而另一些则不需要呢?

  8. 8

    为什么有些程序需要安装,而其他程序则不需要?

  9. 9

    为什么有些角度指令需要双重卷曲,而另一些则不需要?

  10. 10

    为什么有些文本在WPF中会消失,而有些则不会

  11. 11

    为什么有些工具(例如 dd)不需要挂载点来处理设备?

  12. 12

    为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

  13. 13

    为什么有些函数参数存储在堆栈上而有些存储在堆上?

  14. 14

    为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

  15. 15

    为什么有些非root程序可以双击执行而有些则不能?

  16. 16

    为什么有些数组值会被覆盖,而有些则不会呢?的PHP

  17. 17

    为什么有些原语有字节码,而有些则没有?

  18. 18

    为什么某些内置javascript方法是静态的而有些则不是呢?

  19. 19

    为什么有些 Angular 模块会导入而有些却不会?

  20. 20

    为什么有些快照很快,而有些快照那么慢?

  21. 21

    为什么有些行可以插入而有些行不能?

  22. 22

    为什么有些算术指令有有符号/无符号变体,而有些则没有

  23. 23

    为什么有些UWP项目有project.json而有些却没有?

  24. 24

    正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

  25. 25

    为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

  26. 26

    为什么有些对象没有在这个 .splice() 中被移除而有些是?

  27. 27

    为什么有些电子邮件ID被接受而有些却没有PHP

  28. 28

    为什么我的一些圈子消失了,而有些则没有?

  29. 29

    为什么有些网站免费提供字体,而有些网站让您付费购买相同的字体?

热门标签

归档