python抽象-函数

记录函数

文档字符串:在函数中写文档

def square(x):
    "document strings"
    return x * x

可以如下显示

  1. print(square.__doc__)
  2. help(square)

函数返回值

  1. 并不是所有函数都有返回值
  2. 但是函数默认的返回值是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 definition recursion

注意避免写出没有边界条件的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] ] ) # 调用函数,可以提供参数

你可能感兴趣的:(python)