在下面的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)