记录函数
文档字符串:在函数中写文档
def square(x):
"document strings"
return x * x
可以如下显示
print(square.__doc__)
help(square)
函数返回值
- 并不是所有函数都有返回值
- 但是函数默认的返回值是None(和1矛盾的话…)
函数参数
- 位置参数 posParam position parameter
- 关键字参数 keyParam key parameter
- 收集参数 colParam collection parameter
example:
def func(posParam, keyParam=defaultValue, *posColParam, **keyColParam):
print(posParam)
print(keyParam)
print(posColParam) # as tuple
print(keyColParam) # as dict
example:
def print_params(x, y, z = 3, *pospar, **keypar):
print(x, y, z)
print(pospar)
print(keypar)
print_params(1,2,3, 5,6,7, foo=1,bar=2)
变量
屏蔽(shadowing)
对于同名变量,局部变量能屏蔽(shadow)全局变量
- globals()获取全局变量的值,声明此变量是全局变量
- 可以使用关键字
global
- vars()是globals()的近亲函数
- locals()是声明此变量时局部变量
作用域(命名空间)
mint:按照理解应该是独立的内存空间或者stack吧
- 全局作用域
- 局部作用域
- 作用域可以嵌套
嵌套作用域,闭包
闭包(closure):函数存储于封闭作用域的行为
def Multiplier(factor):
def MultiplierByFactor(number):
return number * factor
return MultiplierByFactor
- nonlocal()对外部作用域(非全局作用域)的变量进行赋值
递归 recursion
递归的定义:引用自身
recursion
: please see the definitionrecursion
注意避免写出没有边界条件的infinite recursion
否则会产生“超过最大递归深度”的错误
函数式编程
- map(func, seq[, seq, …]) # 对序列中的每个元素应用函数
- filter(func, seq) # 返回其函数为真的元素的列表
- reduce(func, seq[, initial]) # 等同于func(func(func(seq[0], seq[1]), seq[2]), …)
- lambda
一般函数
- sum(seq) # 返回seq中所有元素和
- apply(func[, args[, kwargs] ] ) # 调用函数,可以提供参数