Skip to content

Commit fcdc5cf

Browse files
committed
add translated for *args and **kwargs in python explained
1 parent fed793a commit fcdc5cf

File tree

4 files changed

+179
-1316
lines changed

4 files changed

+179
-1316
lines changed

Python Common/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,8 @@
5454

5555
- [Lists和Tuples大对决](./Lists和Tuples大对决.md)
5656

57-
常见的Python初学者问题:列表和元组之间有何区别?答案是,有两个不同的差异,以及两者之复杂的相互作用。这就是技术差异和文化差异。
57+
常见的Python初学者问题:列表和元组之间有何区别?答案是,有两个不同的差异,以及两者之复杂的相互作用。这就是技术差异和文化差异。
58+
59+
- [解释python中的*args和**kwargs](./解释python中的*args和**kwargs.md)
60+
61+
我发现,大多数的Python新手程序员很难搞清楚\*args和\*\*kwargs魔术变量。所以,它们是什么呢?
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
原文:[\*args and **kwargs in python explained](https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/)
2+
3+
---
4+
5+
嘿,大家好呀。我发现,大多数的Python新手程序员很难搞清楚\*args和\*\*kwargs魔术变量。所以,它们是什么呢?首先,让我告诉你,写\*args或者\*\*kwargs并不是必须的。只有\*(星号)是必须的。你也可以写成\*var和\*\*vars。写成\*args和\*\*kwargs仅仅是一个惯例。所以,让我们先来看看*args。
6+
7+
** *args的使用 **
8+
\*args和\*\*kwargs最常用于函数定义。\*args和\*\*kwargs允许你传递数量不定的参数给一个函数。这里的变量的意思是,你事先不知道用户会传递多少个变量给你的函数,因此,在这种情况下,你使用这两个关键字。\*args是用来发送一个**非关键字**可变长度的变量列表给函数。这里是一个例子,以助你弄明白:
9+
10+
```python
11+
def test_var_args(f_arg, *argv):
12+
print "first normal arg:", f_arg
13+
for arg in argv:
14+
print "another arg through *argv :", arg
15+
16+
test_var_args('yasoob','python','eggs','test')
17+
```
18+
19+
这生成以下结果:
20+
21+
```
22+
first normal arg: yasoob
23+
another arg through *argv : python
24+
another arg through *argv : eggs
25+
another arg through *argv : test
26+
```
27+
28+
我希望这解开了你的困惑。现在,让我们谈谈\*\*kwargs
29+
30+
**\*\*kwargs的使用**
31+
\*\*kwargs运行你传递**关键字**可变长度参数给函数。如果你想要处理函数中的**命名参数**,那么你应该使用\*\*kwargs。下面是一个例子,以帮助理解它:
32+
33+
```python
34+
def greet_me(**kwargs):
35+
if kwargs is not None:
36+
for key, value in kwargs.iteritems():
37+
print "%s == %s" %(key,value)
38+
39+
>>> greet_me(name="yasoob")
40+
name == yasoob
41+
```
42+
43+
所以,你可以看到我们是如何在函数中处理一个关键字参数列表的。这仅仅是\*\*kwargs的基础知识,而你可以看到它多有用。现在,让我们聊聊你可以如何使用\*args和\*\*kwargs,利用一个参数列表或者参数字典来调用一个函数。
44+
45+
**使用*args和\*\*kwargs来调用一个函数**
46+
所以在这里,我们会看到如何使用\*args和\*\*kwargs来调用一个函数。试想,你有这么一个小函数:
47+
48+
```python
49+
def test_args_kwargs(arg1, arg2, arg3):
50+
print "arg1:", arg1
51+
print "arg2:", arg2
52+
print "arg3:", arg3
53+
```
54+
55+
现在,你可以使用\*args或者\*\*kwargs来传递参数给这个小函数。以下是如何做到这点:
56+
57+
```python
58+
# first with *args
59+
>>> args = ("two", 3,5)
60+
>>> test_args_kwargs(*args)
61+
arg1: two
62+
arg2: 3
63+
arg3: 5
64+
65+
# now with **kwargs:
66+
>>> kwargs = {"arg3": 3, "arg2": "two","arg1":5}
67+
>>> test_args_kwargs(**kwargs)
68+
arg1: 5
69+
arg2: two
70+
arg3: 3
71+
```
72+
73+
**使用*args、\*\*kwargs以及普通参数的顺序**
74+
所以,如果你想要在函数中同时使用这三个,那么顺序是
75+
76+
```python
77+
some_func(fargs,*args,**kwargs)
78+
```
79+
80+
我希望你明白了\*args和\*\*kwargs的使用。如果你对其有任何疑问或困惑,那么请随意在下面留言。要进一步研究,我推荐官方的[关于定义函数的python文档](http://docs.python.org/tutorial/controlflow.html#more-on-defining-functions),以及[stackoverflow上的\*args和**kwargs](http://stackoverflow.com/questions/3394835/args-and-kwargs)
81+

0 commit comments

Comments
 (0)