我是Python语言的新手,我有点沮丧。
直到今天,我还认为在函数调用中传递参数名不是强制性的。例如,如果您有以下函数:
def computeRectangleArea(width=7, height=8):
return width * height
我认为可以像这样调用computeRectangleArea(width=7,height=8)
只是为了更清楚地理解参数的含义,但实际上并不需要输入参数的关键字,所以您也可以这样调用相同的函数:computeRectangleArea(7, 8)
今天,在使用openpyxl.styles.PatternFill()
的时候,我意识到在调用这个函数时,fill_type
关键字是必须的。
假设您以这种方式调用函数:openpyxl.styles.PatternFill('FFFFFF','FFFFFF','solid')
,那么对输入参数的解释将是错误的。
我有一些使用OOP语言(Java,C#)的经验,这些东西在那里是不存在的。
在我看来,一些参数名(如上面示例中的start_color
和end_color
)是可选的,而其他参数名(如fill_type
)必须在它们的值之前指定,这似乎是一种不一致的行为。
谁能给我解释一下为什么这项政策看起来很奇怪?此外,如果有人能给我指出一些有用的资源来理解它的实现方式,我会很高兴的。
发布于 2018-07-31 05:12:10
位置和关键字参数的工作方式与您熟悉的语言中的工作方式相同。您需要转到您正在使用的方法的文档并查看签名。要创建PatternFill
对象,请转到类的__init__
方法。
class PatternFill(Fill):
def __init__(self, patternType=None, fgColor=Color(), bgColor=Color(),
fill_type=None, start_color=None, end_color=None):
只要按顺序提供所有参数,而不跳过任何参数,就可以指定不带关键字的参数。例如,您失败的呼叫可以合法地指定为:
PatternFill(None, 'FFFFFF', 'FFFFFF', 'solid')
这些参数将与前四个参数匹配。任何时候您提供的参数顺序不正确时,都必须为该参数和该调用中的所有后续参数提供关键字。例如,对于上面的调用,如果您想让它们的样式默认为None
,那么您必须为您提供的三个参数提供关键字。如果您简单地省略了None
,那么解析器仍然会尝试从前面按顺序匹配它们:
patternType <= 'FFFFFF'
fgColor <= 'FFFFFF'
bgColor <= 'solid'
..。并且您的调用无法通过解析。
这是不是把事情搞清楚了一点?
https://stackoverflow.com/questions/51602174
复制相似问题