Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 知道函数不接受docstring中的命名参数_Python_Docstring - Fatal编程技术网

Python 知道函数不接受docstring中的命名参数

Python 知道函数不接受docstring中的命名参数,python,docstring,Python,Docstring,他会的 我不知道如何知道函数是否可以接受docstring中的命名参数。以下是一个例子: from functools import reduce ?reduce 根据本文档,我的直觉是使用如下函数: reduce( function = lambda x, y: x+y, sequence = [1, 2, 3, 4, 5] ) func(arg1, arg2, *, kwarg1, kwarg2) 然而,我们得到: 我怎么能从文档串中知道这会发生?来自另一种语言

他会的

我不知道如何知道函数是否可以接受docstring中的命名参数。以下是一个例子:

from functools import reduce
?reduce

根据本文档,我的直觉是使用如下函数:

reduce(
   function = lambda x, y: x+y, 
   sequence = [1, 2, 3, 4, 5]
   )
func(arg1, arg2, *, kwarg1, kwarg2)
然而,我们得到:

我怎么能从文档串中知道这会发生?来自另一种语言,文档似乎告诉我这两个参数被称为
function
sequence

谢谢这是你需要的吗

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])

一般来说,没有严格的规则(据我所知)。文档无法引发语法错误:)

有一个标记,
*
,表示它后面的所有参数都是关键字参数,如下所示:

reduce(
   function = lambda x, y: x+y, 
   sequence = [1, 2, 3, 4, 5]
   )
func(arg1, arg2, *, kwarg1, kwarg2)
它不仅在文档中使用,而且在真正的可调用函数中使用。您还可以将其合并到自己的定义中

在docstring中使用此模式也是很常见的:

func(arg1, arg2, arg3=default_value, **kwargs)
# kwarg_a: description of kwarg_a
# kwarg_b: description of kwarg_b
# kwarg_c: description of kwarg_c
所以,这里有一些指导方针。通常,我们可以假设参数是位置性的,除非明确注明为关键字(例如在您的示例中使用
reduce
)。我建议查看此项以了解更多信息。

我不知道为什么在“reduce”和“reduce”中都没有显示 这通常,通过查看签名,可以判断函数不接受关键字参数:

def fn(a, b, /):
    pass
这里是
/
,因为函数签名中的最后一个参数表示参数
a
b
必须传递“位置”。(因为它们在
/
之前)

此外,我们还有
*
参数,它告诉我们应该将它后面的下一个参数作为关键字参数传递

你可以像这样混合它们:

def fn(a, /, b, *, c):
    pass

fn(10, 20, c=30)   # acceptable
fn(10, b=20, c=30) # acceptable

在Python中,“关键字参数”、“可选参数”和“位置参数”之间存在差异

使用它们的函数示例如下(来自python文档):
sorted(iterable,*,key=None,reverse=False)

这里的参数
iterable
是一个位置参数,这意味着您只需将iterable赋给函数:它类似于
sorted(my_list)
。这些论点是强制性的

其他参数称为关键字参数,因为它们可以使用关键字指定。如果你愿意,你只能送一个。如果不指定关键字,则参数的顺序为定义中给定的顺序

例如,如果您想以相反的顺序对列表进行排序,您可以写:
sorted(my_list,reverse=True)
。编写
sorted(my_list,True)
不会给您一个按相反顺序排序的列表

回到示例,函数接受两个位置参数和一个可选参数(可选参数不是关键字参数)。所以你只需要写:
reduce(λx,y:x+y[1,2,3,4,5])


PS:在使用关键字参数之前,必须指定所有位置参数,否则会引发错误

他们不是问如何使用
reduce
,而是问如何在一般情况下解释文档,并以
reduce
为例。如果一个人阅读整个文档字符串,那么应该很明显是什么“function”和“sequence”的意思是。我仍然不确定问题出在哪里。问题是“如何从docstring确定函数需要位置参数还是关键字参数?”“,其中
reduce
是一个函数示例,该函数的docstring似乎没有指定,但实现需要一种类型。具体来说,这与
reduce
reduce
参数的含义无关。您可以看到,您可以将函数名(例如,add_two_number或其他)作为第一个参数传递。请查看此url。嗯,那很有趣。我没有看到(或注意到)
*
被用作占位符。Thanks@svenhalvorson有趣的是,我自己几天前才知道。不客气!这在我看来很奇怪,但我很感激你的回答。我假设从你的描述来看,
fn(10,20,30)
不会acceptable@svenhalvorson正是因为,
c
必须是关键字参数。