17 November 2013

参数

参数传递基本方法:
  1. 位置参数,和其他语言类似,实参与形参位置一一对应,如果有默认实参则放在最后
  2. 关键字参数,实参直接以赋值的方式传递给形参,位置不用一一对应。

对于混合两中参数传递的调用,系统将先用位置参数匹配前面的参数,之后再进行基于变量名进行关键字匹配。 虽然两种方式可以混合使用,但是尽量避免

参数收集:

可以利用元组和字典收集不定数量的参数,关键词:***
在函数形参前添加*可以收集多余的位置参数,**则可以收集关键字参数

def print_params(x, y, z=3, *pospar, **keypar):
    print x, y, z
    print pospar
    print keypar

print_params(1, 2, 3, 4, 5, 6, 7, foo = 3, bar = 4)
1, 2, 3
(4, 5, 6, 7)
{'foo' = 3, 'bar' = 4}

在语句中也可以使用***,但是作用反转。

Python3中,在*name或单独一个*之后的/任何正式的或者默认的参数名称都是keyword-only参数,必须在调用中按照关键字传递。

作用域

list类型的参数在函数内部被修改会影响到调用函数的作用域。其他类型的不会有这个问题。

函数内部可以访问全局变量。如果局部变量与全局变量同名,则全局变量被屏蔽,必须通过global var来声明使用,或者globals()['var']直接访问
globals()返回全局作用域变量字典,locals()返回局部变量字典。

Pyhton中函数是可以嵌套的。闭包。待续



blog comments powered by Disqus