python函数-参数和返回值


传递参数


参数是通过赋值来传递的。 1、参数的传递是通过自动将对象赋值给本地变量名来实现的。函数参数在实际中只是python赋值的另一个实例而已。因为引用是以指针的形式实现的,所有的参数实际上都是通过指针进行传递的。作为参数被传递的对象从来不自动拷贝。 2、在函数内部的参数名的赋值不会影响调用者。在函数运行时,在函数头部的参数名是一个新的、本地的变量名,这个变量名是在函数的本地作用域内的。函数参数名和调用者作用域中得变量名是没有别名的。 3、改变函数的可变对象参数的值也许会对调用者有影响。
Python的通过赋值进行传递的机制与C++的应用参数选项并不完全一样,但是在实际中,它与C语言的参数传递模型相当相似: 1、不可变参数“通过值”进行传递; 2、可变对象“通过指针”进行传递。

可变参数


当要使函数接受元祖或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀,这种方法在函数需要获取可变数量的参数的时候很有用。

>>> def powersum(power, *args):
... '''Return the sum of each argument
raised to specified power.'''
... total = 0
... for i in args:
... total += pow(i, power)
... return total
...
>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100

由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中,如果使用的是**前缀,多余的参数则会被认为是一个字典的键值对。

>>>def func(a, *pargs):
...          print (a, pargs)
...
>>>func(1,2,3)
1,(2,3)   

>>>def func(a, **pargs):
...          print (a, pargs)
...
>>>func(a=1, c=2, b=3)
1,{'c':2,'b':3} 

输出结果


python中通常可以通过返回元组并将结果赋值给最初的调用者的参数变量名。
>>>def multiple(x,y):
            x=2
            y=[3,4]
            return x,y
>>>X=1
>>>L=[1,2]
>>>X,L = multiple(X,L)
>>>X,L
(2,[3,4])


评论关闭