如何把多类型的元素传入到函数呢?
In [3]: def fun(x,y): ##定义一个fun函数
...: print x + y
...:
In [4]: t =(1,2) ##设定一个 t元祖
In [5]: fun(t) ##直接把t元祖的值导入到函数中是不可以的
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-cc8bac9e3135> in <module>()
----> 1 fun(t)
TypeError: fun() takes exactly 2 arguments (1 given)
这就涉及到了 多函数类型 传值中的 元祖 传值
In [6]: fun(*t) ##这样 在括号内添加 *号就可以顺利的传入元祖的元素
3
如下实例:
In [7]: def aa(x,y,z):
...: return x+y+z
...:
In [8]: t1 = (1,2,3)
In [9]: aa(*t1)
Out[9]: 6
In [10]: aa(*(1,2,3))
Out[10]: 6
In [11]: aa(x=1,y=3,z=5)
Out[11]: 9
传入的参数方式是多样化的,但是一定需要保证有多少个形参,就需要传入多少个实参。
以字典的形式传参:
In [12]: dic = {'x':1,'y':2,'z':3}
In [14]: aa(**dic)
Out[14]: 6
In [2]: def aa(x, *args, **kwargs): ##定义三个参数
...: print x
...: print args
...: print kwargs
...:
In [3]: aa(11) ##传入一个参数
11
() ##第二个参数是列表
{} ##第三个参数是字典
In [4]: aa(1,2,3)
1
(2, 3)
{}
In [5]: aa(1,2,'a',[1,2])
1
(2, 'a', [1, 2])
{}
In [7]: aa(1,2,'a',[1,2],y=22,z=43) ##只有以字典或=的方式才会传到字典里面,其它的均传到列表里
1
(2, 'a', [1, 2])
{'y': 22, 'z': 43}
函数内部自己调用自己。
[[email protected] python]# cat 3.py
#! /usr/bin/python
def factorial(n):
sum = 1
for i in xrange(1, n+1):
sum *= i
return sum
print factorial(int(raw_input("pls input a number: ")))
执行结果:
[[email protected] python]# python 3.py
pls input a number: 3
6
[[email protected] python]# python 3.py
pls input a number: 5
120
如果使用递归的话:
必须有最后的默认结果
if n == 0
递归参数必须向默认结果收敛的:
factorial(n-1)
[[email protected] python]# cat 3.py
#! /usr/bin/python
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print factorial(int(raw_input("pls input a number: ")))
执行结果:
[[email protected] python]# python 3.py
pls input a number: 5
120
[[email protected] python]# python 3.py
pls input a number: 3
6