python2.x学习笔记(13) -- 函数和函数式编程

1.  关键字参数的概念仅仅针对函数的调用。这种理念是让调用者通过函数调用中的参数名字来区分参数。这样规范允许参数缺失或者不按顺序,因为解释器能通过给出的关键字来匹配参数的值。
>>>net_conn(port=8080, host='chino')

2. 默认参数就是声明了默认值的参数。因为给参数赋予了默认值,所以, 在函数调用时,不向该
参数传入值也是允许的。

3. Python 同样允许程序员执行一个没有显式定义参数的函数,相应的方法是通过一个把元组(非关键字参数)或字典(关键字参数)作为参数组传递给函数。
基本上,你可以将所有参数放进一个元组或者字典中,仅仅用这些装有参数的容器来调用一个函数,而不必显式地将它们放在函数调用中:
  func(*tuple_grp_nonkw_args, **dict_grp_kw_args)

4. 实际上,你也可以给出形参!这些参数包括标准的位置参数和关键字参数,所以在 python 中允许的函数调用的完整语法为:
  func(positional_args, keyword_args,
  *tuple_grp_nonkw_args, **dict_grp_kw_args)
  该语法中的所有的参数都是可选的---从参数传递到函数的过程来看,在单独的函数调用时,每个参数都是独立的。

5. 函数是用 def 语句来创建的,语法如下:
def function_name(arguments):
"function_documentation_string"
function_body_suite

6. 内部/内嵌函数
最明显的创造内部函数的方法是在外部函数的定义体内定义函数(用 def 关键字)
内部函数一个有趣的方面在于整个函数体都在外部函数的作用域(即是你可以访问一个对象的
区域;稍后会有更多关于作用域的介绍)之内。如果没有任何对 bar()的外部引用,那么除了在函数体内,任何地方都不能对其进行调用.

7. *函数(与方法)装饰器
@decorator(dec_opt_args)
def func2Bdecorated(func_opt_args):

@deco1(deco_arg)
@deco2
def func(): pass
This is equivalent to:这等价于:
func = deco1(deco_arg)(deco2(func))

8.现在我们知道装饰器实际就是函数。我们也知道他们接受函数对象。
从本质上看,这些特征引入了 java 开发者称呼之为 AOP                      (Aspect Oriented Programming,面向方面编程)的概念。
你可以考虑在装饰器中置入通用功能的代码来降低程序复杂度。例如,可以用装饰器来:
        引入日志
        增加计时逻辑来检测性能
        给函数加入事务的能力

9. 可变长度的参数
  可变长的参数元组必须在位置和默认参数之后,带元组(或者非关键字可变长参数)的函数普
遍的语法如下:
  def function_name([formal_args,] *vargs_tuple):
  "function_documentation_string"
  function_body_suite

这给出使用了变量参数字典来应对额外关键字参数的函数定义的语法:
def function_name([formal_args,][*vargst,] **vargsd):
function_documentation_string function_body_suite

10. 匿名函数与 lambda
一个完整的 lambda“语句”代表了一个表达式,这个表达式的定义体
必须和声明放在同一行。我们现在来演示下匿名函数的语法:
  lambda [arg1[, arg2, ... argN]]: expression
   参数是可选的,如果使用的参数话,参数通常也是表达式的一部分。
lambda 表达式返回可调用的函数对象。

11. 函数式编程的内建函数     
apply(func[, nkw][, kw])   
用可选的参数来调用 func,nkw 为非关键字参数,kw关                            键字参数;返回值是函数调用的返回值。
filter(func, seq)        
调用一个布尔函数 func 来迭代遍历每个 seq 中的元素;
返回一个使 func 返回值为 ture 的元素的序列。
map(func, seq1[,seq2...])
将函数 func 作用于给定序列(s)的每个元素,
并用一个列表来提供返回值;如果 func 为 None,
func 表现为一个身份函数,返回一个含有每个序列中元素集合的 n 个元组的列表。
reduce(func, seq[, init])
将二元函数作用于 seq 序列的元素,每次携带一对(先前的结果以及下一个序列元素),连续的将现有的结果和下雨给值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值 init 给定,第一个比较会是 init 和第一个序列元素而不是序列的头两个元素。













你可能感兴趣的:(AOP,编程,.net,python)