秋天的童话训练营软件测试之路颠覆你的Python实践

【读书笔记】_函数

2017-02-28  本文已影响20人  大婶N72
函数中返回的元素的数目,以及 python 实际返回的对象

1.python函数传参的方式有以下几种:

备注:传参按照数量分为固定参数和可变参数,固定参数有关键字+默认,可变参数是参数组。

1.1、关键字参数,就是传参的时候可以只传值(参数值),但要求与函数的参数顺序一致;也可以带上参数名,(参数名=参数值),该情况就是关键字参数,可以不需要按照函数的参数顺序。

1.2、默认参数,就是给参数附一个默认的值,如果调用函数时给该参传了新值,以新值为准,如果没传,使用默认值,备注要求默认参数要放到参数最后面,(参数名1,参数名2,默认参数=3)

1.3、参数组,就是参数值是元祖和字典,func(*tuple_grp_nonkw_args, **dict_grp_kw_args),其中的 tuple_grp_nonkw_args 是以元组形式体现的非关键字参数组, dict_grp_kw_args 是装有关键字参数的字典,字典中键为参数名,值为相应的参数值。

备注:(1).可变长的参数元组必须在位置和默认参数之后;(2).参数顺序是:关键字参数、默认参数、参数组(可变参数)

2.装饰器(@):

2.1、装饰器是在函数调用之上的修饰,装饰器的语法以@开头,接着是装饰器函数的名字可选的参数。紧跟着装饰器声明的是被修饰的函数,和装饰函数的可选参数。装饰器看起来会是这样:

@decorator(dec_opt_args)

def func2Bdecorated(func_opt_args):

2.2、可以考虑在装饰器中置入通用功能的代码来降低程序复杂度。例如,可以用装饰器来:

    a.引入日志

    b.增加计时逻辑来检测性能

    c.给函数加入事务的能力

3.函数式编程

3.1、匿名函数与 lambda

匿名函数的语法:

lambda [arg1[, arg2, ... argN]]: expression参数是可选的,如果使用的参数话,参数通常也是表达式的一部分

核心笔记:lambda 表达式返回可调用的函数对象。

用合适的表达式调用一个 lambda 生成一个可以像其他函数一样使用的函数对象。它们可被传入给其他函数,用额外的引用别名化,作为容器对象以及作为可调用的对象被调用(如果需要的话,可以带参数)。当被调用的时候,如果给定相同的参数的话,这些对象会生成一个和相同表达式等价的结果。它们和那些返回等价表达式计算值相同的函数是不能区分的

3.2、举例如下:

def add(x, y): return x + y      <=>  函数名=lambda x, y: x + y

def usuallyAdd2(x, y=2): return x+y  <=>  函数名=lambda x, y=2: x+y

如:a = lambda x, y=2: x + y  —>    a(3)=5

4.内建函数

4.1、filter(odd, allNums),返回一个列表,odd代表提供筛选的函数,allNums代表待处理的列表,filter的作用是将allNums列表中的数据通过odd函数筛选后,保留返回True的数据组成新的列表;

4.2、map(odd, allNums),返回一个列表,odd代表运算的函数,allNums代表待处理的列表,filter的作用是将allNums列表中的数据通过odd函数运算后,返回函数结果的数据组成新的列表;map((lambda x: x+2), [0, 1, 2, 3, 4, 5]) => [2, 3, 4, 5, 6, 7];map(lambda x, y: (x+y, x-y), [1,3,5], [2,4,6]) => [(3, -1), (7, -1), (11, -1)]。

5.变量的作作用域

5.1、全局变量与局部变量

当搜索一个标识符的时候,python 先从局部作用域开始搜索。如果在局部作用域内没有找到那个名字,那么就一定会在全局域找到这个变量否则就会被抛出 NameError 异常,如果找到一个名字,搜索就不会继续去寻找一个全局域的变量,故局部变量可的优先级高于同名的全局变量。

6.生成器

生成器是一个带 yield 语句的函数。一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果----那就是 yield 语句的功能, 返回一个值给调用者并暂停执行。当生成器的 next()方法被调用的时候,它会准确地从离开地方继续(当它返回[一个值以及]控制给调用者时)——可尝试用于功能测试半自动化。

生成器1 生成器2
上一篇下一篇

猜你喜欢

热点阅读