在Python函数定义中,将单个"*"作为参数是什么作用?

8 浏览
0 Comments

在Python函数定义中,将单个"*"作为参数是什么作用?

我正在尝试查看一些代码,不知道下面代码中的星号表示什么。

def pylog(func=None, *, mode='cgen', path=WORKSPACE, backend='vhls', \
          board='ultra96', freq=None):

在函数定义中,当星号后面没有紧跟着参数名时,这个孤立的星号代表什么意思?

我只能找到关于*foo的结果。

0
0 Comments

在Python函数定义中,如果在参数列表中使用单独的星号(*),它会强制在调用函数时将星号后面的参数使用关键字名进行调用。

这种语法强制在调用函数/方法时,将星号后面的参数使用关键字名进行调用。这样做的目的是为了提高代码的可读性和可维护性。当函数有多个参数时,使用关键字参数可以清晰地指定每个参数的值,避免出现参数顺序错误的情况。

例如,假设有一个名为pylog的函数,其中第一个参数是函数对象,第二个参数是一个字符串。如果在函数定义中使用单独的星号(*),则在调用函数时必须使用关键字参数来指定第二个参数的值,否则会引发错误。

下面是一个示例代码:

# 定义一个函数
def pylog(func, *, mode):
    print(func, mode)
# 正确的调用方式
pylog(math.log, mode='cgen')
# 错误的调用方式
pylog(math.log, 'cgen')

在上面的例子中,当使用关键字参数`mode='cgen'`来调用`pylog`函数时,会正常输出结果。但是,当使用位置参数`'cgen'`来调用`pylog`函数时,会引发错误。

通过使用单独的星号(*)来强制使用关键字参数,可以避免参数传递错误的情况,提高代码的可读性和可维护性。

0