![]() |
1
1752
这个
这个
这个
这两种习惯用法都可以与普通参数混合使用,以允许使用一组固定参数和一些可变参数:
的另一个用法
在python 3中,可以使用
另外,python 3还添加了新的语义(请参阅 PEP 3102 ):
这样的函数只接受3个位置参数,以及后面的所有参数
|
![]() |
2
501
同样值得注意的是,你可以使用
你可以这样做:
注意:钥匙在
|
![]() |
3
147
单*表示可以有任意数量的额外位置参数。
double**表示可以有任意数量的额外命名参数。
使用以下代码:
输出是
|
![]() |
4
123
他们允许
要定义接受的函数
为了
用户通过
任意数量的参数,位置(
定义函数
您可以(并且应该)选择任何合适的名称,但是如果目的是让参数具有非特定的语义,
扩展,传递任意数量的参数
您也可以使用
接收参数的函数不必知道它们正在被扩展。
例如,python 2的xrange没有明确预期
作为另一个例子,我们可以在
python 3中的新功能:使用仅关键字参数定义函数
你可以拥有
keyword only arguments
后
用途:
也,
在这里,
我们不能再接受无限制的位置参数,因为我们没有
同样,更简单地说,我们需要
在这个例子中,我们看到如果我们试图通过
我们必须明确通过
python 2兼容演示
我们通常在不知道函数将接收什么或传递多少参数时使用这些参数,有时甚至单独命名每个变量都会变得非常混乱和冗余(但在这种情况下,通常显式优于隐式)。 例1
下面的函数描述如何使用它们,并演示行为。注意命名
我们可以在联机帮助中查看函数的签名,使用
让我们用
哪些印刷品:
例2
我们也可以使用另一个函数来调用它,我们只是在其中提供
例3:装饰材料的实际应用 好吧,也许我们还没有看到实用程序。所以假设您在区分代码之前和/或之后有几个具有冗余代码的函数。以下命名函数只是用于说明目的的伪代码。
我们可能能够以不同的方式处理这个问题,但是我们当然可以用一个装饰器提取冗余,因此下面的示例演示了如何
现在,每一个被包装的函数都可以写得更简洁,因为我们已经计算出了冗余度:
通过分解我们的代码,
|
![]() |
5
41
让我们首先了解什么是位置参数和关键字参数。 下面是函数定义的示例 位置参数。
这是一个带有位置参数的函数定义。 您也可以使用关键字/命名参数来调用它:
现在让我们研究一个函数定义的例子 关键字参数 :
也可以使用位置参数调用此函数:
所以我们现在知道了带有位置参数和关键字参数的函数定义。 现在让我们研究一下‘*’操作符和‘*’操作符。 请注意,这些操作员可用于两个领域: a) 函数调用 b) 函数定义 在中使用“*”运算符和“*”运算符 函数调用。 让我们直接举一个例子,然后讨论它。
所以记住 当“*”或“*”运算符用于 函数调用 - “*”运算符将数据结构(如列表或元组)解包为函数定义所需的参数。 “**”运算符将字典解包为函数定义所需的参数。 现在让我们研究一下“*”运算符在 函数定义 . 例子:
在功能中 定义 “*”运算符将接收到的参数打包成一个元组。 现在让我们看看函数定义中使用的“**”示例:
在功能中 定义 “**”运算符将接收到的参数打包到字典中。 所以请记住: 在一个 函数调用 “*” 解包 将元组或列表的数据结构转换为位置参数或关键字参数,以便由函数定义接收。 在一个 函数调用 “**” 解包 将字典的数据结构转换为要由函数定义接收的位置参数或关键字参数。 在一个 函数定义 “*” 包装 位置参数转换成元组。 在一个 函数定义 “**” 包装 字典中的关键字参数。 |
![]() |
6
21
|
![]() |
7
12
从python文档中:
|
![]() |
8
12
对于你们这些通过例子学习的人!
让我们通过定义一个接受两个正态变量的函数来说明这一点。
告诫
|
![]() |
9
9
而star/splat运算符的用法 expanded 在Python3中,我喜欢下表,因为它与这些运算符的使用有关 with functions . splat运算符可在函数内同时使用 建设 在功能上 呼叫 :
这实际上是为了总结洛林·霍克斯坦的 answer 但我觉得这很有帮助。 |
![]() |
10
7
我想举一个别人没有提到的例子 *也可以解包 发电机 python3文档中的示例
解压x将是[1,2,3],解压y将是[4,5,6] zip()接收多个iretable参数,并返回一个生成器。
|
![]() |
11
6
在Python3.5中,还可以在
它还允许在单个函数调用中解包多个iterable。
(感谢米吉尔森的政治公众人物链接。) |
![]() |
12
4
除了函数调用之外,*args和**kwargs在类层次结构中也很有用,并且避免了编写
例如,
子类可以是
然后将子类实例化为
此外,具有新属性的子类(仅对该子类实例有意义)可以调用基类
可以设置为
完整的代码是 here |
![]() |
13
2
使用方法如下: 1)单*
输出:
2)现在
输出:
|
![]() |
14
1
在函数中同时使用这两者的一个好例子是:
|
![]() |
15
1
这个例子可以帮助你记住
|
![]() |
16
1
例如,用于实现 可变参数 在Java中如下:
|
![]() |
17
0
将产生:
将产生:
|
![]() |
18
-1
*args=*a list=列表中的所有元素 **args=**a dict=dict中的所有项 |
![]() |
tomm · 谷歌表格-将两列相乘,复制第三列 3 年前 |
![]() |
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 3 年前 |
![]() |
Andrés BolÃvar · AJAX请求未收到我想要的属性 3 年前 |
![]() |
clarkk · 当声明向量时,(1)是什么意思? 3 年前 |
![]() |
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 3 年前 |
![]() |
michael · 错误的脚本和语法问题 3 年前 |