Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35805
  • 博文数量: 15
  • 博客积分: 648
  • 博客等级: 上士
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-13 00:01
文章分类

全部博文(15)

文章存档

2011年(6)

2010年(3)

2009年(6)

分类: Python/Ruby

2010-01-19 02:07:34

Help on built-in function add in module operator:

add(...)
    add(a, b) -- Same as a + b.
(END) 


python容许程序员执行一个没有显式定义参数的函数,相应的方法就是通过一个元组(非关键字参数)或字典(关键字参数)作为参数组传递给参数。基本上,可以将所有参数放进一个元组或字典中,仅仅用这些装有参数的容器来调用一个函数,而不必显式地把它们放在函数调用中:
  func(*tuple_grp_nonkw_args,**dict_grp_kw_args)
完整的带有形参的语法为:
func(positional_args,keyword_args,*tuple_grp_nonkw_args,**dict_grp_kw_args)

有了上面的解释,我们就可以准确的理解程序中出现的 ans = ops[op](*nums)
nums是经过排序的两个数字,ops是一个字典,[op]是返回一个预定义过的+-*/符号中的一个,那么ops[op]联合使用就是找出字典中label所对应的vaule.
这条语句经过翻译解释后,应是这样的: ans = nums[0] add/sub nums[1].
这样理解了之后,我们验证一下,那就是我们将随机数增加到3个,显然这条语句已经不能满足需求,我们把它这种隐式的写法更改为:
(注:其实我们仍然可以*nums元组来表示参数,但是局限在于opt[op]不接受不是2个的参数,所以退而求其次,放弃这种可变长度参数的隐式写法

那么ans = ops[op](*nums) 相当于 ans = add/sub(*nums)
*nums不解

总算有个大概明白:
下面是测试结果,其实传入的a,b不论是list或者tuple,atuple表现为tuple
>>> def foo(*atuple):
...            print atuple
...            for i in atuple:
...                 print i
... 
>>> a=[1,2,3,4]
>>> foo(*a)
(1, 2, 3, 4)
1
2
3
4
>>> a
[1, 2, 3, 4]
>>> b=(1,2,3,4)
>>> foo(*b)
(1, 2, 3, 4)
1
2
3
4
>>>
阅读(1249) | 评论(0) | 转发(0) |
0

上一篇:try-except-else

下一篇:xrange与range

给主人留下些什么吧!~~