一个简单的函数

首先我们可以定一个简单的函数, 函数内部只考虑required_arg这一个形参(位置参数)

def exmaple(required_arg):
print required_arg exmaple("Hello, World!") >> Hello, World!

那么,如果我们调用函数式传入了不止一个位置参数会出现什么情况?当然是会报错!

exmaple("Hello, World!", "another string")

>> TypeError: exmaple() takes exactly 1 argument (2 given)

定义函数时,使用*arg和**kwarg

*arg和**kwarg 可以帮助我们处理上面这种情况,允许我们在调用函数的时候传入多个实参

def exmaple2(required_arg, *arg, **kwarg):
if arg:
print "arg: ", arg if kwarg:
print "kwarg: ", kwarg exmaple2("Hi", 1, 2, 3, keyword1 = "bar", keyword2 = "foo") >> arg: (1, 2, 3)
>> kwarg: {'keyword2': 'foo', 'keyword1': 'bar'}

从上面的例子可以看到,当我传入了更多实参的时候

  • *arg会把多出来的位置参数转化为tuple
  • **kwarg会把关键字参数转化为dict

再举个例子,一个不设定参数个数的加法函数

def sum(*arg):
res = 0
for e in arg:
res += e
return res print sum(1, 2, 3, 4)
print sum(1, 1)
>> 10
>> 2

当然,如果想控制关键字参数,可以单独使用一个*,作为特殊分隔符号。限于Python 3,下面例子中限定了只能有两个关键字参数,而且参数名为keyword1keyword2

def person(required_arg, *, keyword1, keyword2):
print(required_arg, keyword1, keyword2) person("Hi", keyword1="bar", keyword2="foo")
>> Hi bar foo

如果不传入参数名keyword1keyword2会报错,因为都会看做位置参数

person("Hi", "bar", "foo")

>> TypeError: person() takes 1 positional argument but 3 were given

调用函数时使用*arg和**kwarg

直接上例子,跟上面的情况十分类似。反向思维。

def sum(a, b, c):
return a + b + c a = [1, 2, 3] # the * unpack list a
print sum(*a)
>> 6
def sum(a, b, c):
return a + b + c a = {'a': 1, 'b': 2, 'c': 3} # the ** unpack dict a
print sum(**a)
>> 6

最新文章

  1. 给Mac OS X的“逻辑宗卷组”改名
  2. Calculating Stereo Pairs
  3. html的块级、内联、内联块级元素基础
  4. Linux解压命令(tar)
  5. Docker私有仓库Registry的搭建验证
  6. hiho一下第91周《Events Arrangement》(前半部分)
  7. ylbtech-dbs:ylbtech-5,RI(报销发票系统)
  8. 15 个最佳的 jQuery 表格插件
  9. dojo简单添加一个Panel到父容器中
  10. hdu 2955 Robberies 0-1背包/概率初始化
  11. ubuntu中安装samba 分类: linux 学习笔记 ubuntu 2015-07-07 16:14 46人阅读 评论(0) 收藏
  12. 【转】Nginx+Tomcat搭建高性能负载均衡集群
  13. DOM处理
  14. 【C#】Send data between applications
  15. Objetive-C initialize研究
  16. ionic app打包和签名
  17. DNSCrypt
  18. 什么是CONTAINERD?
  19. linux集群时间同步搭建
  20. sql2008修改管理员与普通用户密码

热门文章

  1. 后缀数组 DC3构造法 —— 详解
  2. Mysql的外键
  3. jQuery access()方法
  4. (转)Unity优化之减少Drawcall
  5. QQ面板拖拽(慕课网DOM事件探秘)(上)
  6. 【学习笔记】OSG 基本几何图元
  7. COGS 1406. 邻居年龄排序[Age Sort,UVa 11462](水题日常)
  8. Java并发编程之原子操作类
  9. $.noconflict() 有什么用处
  10. k近邻法(kNN)