Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下面的python代码场景中使用kwargs正确吗?_Python - Fatal编程技术网

在下面的python代码场景中使用kwargs正确吗?

在下面的python代码场景中使用kwargs正确吗?,python,Python,在以下场景中使用卡丁车是否正确 我有一个函数,在调用中需要五个参数,其中两个是可选的。因此,我可以将其删除为: def f(p1, p2, p3, p4, p5, o1=None, o2=None) 或 因为我在和params做类似的事情: orig_path = "{0}/{1}/{3}/{4}".format(p1, p2, p3, p4) 或 我不知道在Python中,在声明中使用哪种样式是正确的。有没有关于正确使用kwargs的指南?。我在Amazon boto3中看到api通常使用

在以下场景中使用卡丁车是否正确

我有一个函数,在调用中需要五个参数,其中两个是可选的。因此,我可以将其删除为:

def f(p1, p2, p3, p4, p5, o1=None, o2=None)

因为我在和params做类似的事情:

orig_path = "{0}/{1}/{3}/{4}".format(p1, p2, p3, p4)


我不知道在Python中,在声明中使用哪种样式是正确的。有没有关于正确使用kwargs的指南?。我在Amazon boto3中看到api通常使用kwargs结构,但是…

作为经验法则,如果可以的话,您应该始终在函数定义中写出所有参数,并理想地为它们指定描述性名称

警察说

显式比隐式好

而且

可读性很重要

使参数显式有助于防止许多错误,例如使用太多或太少的参数调用函数,或者使用不存在的关键字参数调用函数

它还对可读性有很大帮助,因为您可以很容易地从定义中看出函数需要多少个参数、哪些参数、可能的关键字参数的顺序和默认值。有时,您甚至可以通过良好的参数名猜测函数的功能,而无需查看文档

有些IDE甚至可以在编写调用时自动查找定义,并在键入时提醒您可能出现的问题

这样做:

def twidle_旋钮(调谐、音量、平移=无,低音=6.0,中音=2.0,高音=1.5):
“”“修改最重要的无线电控制。”“”
my_radio.modify_控件(radio.TUNEFREQ,value=max(min(调谐,120.0),85.0))
my_radio.modify_控件(radio.VOL_MASTER,值=(volume/100.0))
如果平移不是无:
my_radio.modify_控件(radio.VOL_LEFT,value=min(1.0-平移/100.0,1.0))
my_radio.modify_控件(radio.VOL_RIGHT,value=min(1.0+平移/100.0,1.0))
对于控制,以((radio.eq_BASS,BASS)为单位的值,
(radio.eq_MID,MID Range),
(radio.EQU_TREB,treble)):
my_radio.modify_控件(控件,值=值,单位=radio.DB)
不要这样做:

def twidle_旋钮(*args,**kwargs):#警告:千万不要这样做!
my_radio.modify_控件(radio.TUNEFREQ,max(min(args[0],120.0),85.0))
my_radio.modify_控件(radio.VOL_MASTER,args[1]/100.0)
如果kwargs.get(“平移”)不是无:
my_radio.modify_控件(radio.VOL_LEFT,min(1.0-kwargs[“平移”]/100.0,1.0))
my_radio.modify_控件(radio.VOL_RIGHT,min(1.0+kwargs[“平移”]/100.0,1.0))
对于控制,参数,默认为((radio.eq_BASS,“BASS”,6.0),
(radio.eq_MID,“中端”—2.0),
(radio.eq_TREB,“高音”,1.5):
my_radio.modify_控件(控件,kwargs.get(参数,默认值),radio.DB)

那么什么时候可以使用
*args
*kwargs

  • *args
    的一个用途是当您需要接收一个包含以下内容的列表时: 都相似,功能相同。然而,你也可以 只需使用一个普通参数,并让调用者显式地传入 列表有时,使用
    func([thing])
    调用函数可能看起来像 不过,这很尴尬,尤其是大多数时候你只经过一次 不管有没有。这些是
    *args
    将 改善情况

  • 另外,当您需要传递一些位置和/或关键字时 将函数收到的参数转移到另一个不需要的函数 拥有对的控制权,您不想指定您的参数 允许呼叫者通过,然后是
    *args
    *kwargs
    - 在显式参数之后使用-是实现此目的的方法

  • 如果您有一组关键字参数,这些参数强烈地服务于 相关函数,您无法预先准确地预定义 关键字将是,因为它们可能依赖于 动态变化,这也是使用
    *kwargs


此列表并非详尽无遗,但它应该能让您大致了解情况。

使用第一个。仅Functiono def就表示需要5个参数。这是某种信息增益。它还可以在函数中保存一些代码。(假设:p1-p5是必需的)@sascha你很可能会把它变成一个答案,并提到Python禅宗中的“显式优于隐式”原则。@BlubberdBlub请放心,因为你提到的Python禅宗在这里非常相关。@sascha好吧,这基本上就是你已经说过的(“这是某种信息增益。”),只是用不同的词:)
orig_path = "{0}/{1}/{3}/{4}".format(p1, p2, p3, p4)
orig_path = "{p1}/{p2}/{p3}/{p4}".format(kwargs)