一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“函数编程的基础知识介绍”。
函数基础知识
掌握自定义函数的基本语法规范和调用方法/掌握函数的各种参数的使用及调用规则
1.Python函数
●函数( Function )是组织好的,可重复使用的,用来实现单一, 或相关联功能的代码段。
●函数能提高应用的模块性 ,和代码的重复利用率。
●我们已经接触过Python提供的许多内建函数 ,比如print()。
●但你也可以自己创建函数,这被叫做用户自定义函数。
2.自定义一个函数基本规则
● 你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def关键词开头,后接函数标识符名称和圆括号( )。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。
函数内容以冒 号起始,并且缩进。
returm [表达式]结束函数,选择性地返回一个值给调用方。
不带表达式的return相当于返回 None.
3.自定义一个函数语法
定义函数的语法:
def 函数标识名称(参数列表):
“函数_文档字符串,对函数进行说明"
函数体
return [表达式]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
4.函数的调用
定义一个函数只给了函数-一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另-个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme ( )函数:
调用后输出的结果为:
4.return关键字
●return语句[表达式]退出函数,选择性地向调用方返回一一个表达式。
●不带参数值的return语句返回None.
●之前的例子都没有示范如何返回数值,下例告诉你怎么做:
5.参数的传递
●在python中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3] 是List类型,"Runoob” 是 String类型,而变量a是没有类型,它仅仅是一个对象的引用(-一个指针) , 可以是List类型对象,也可以指向String类型对象
Python函数的参数传递
● 不可变类型 :在程序编程中的值传递,如整数、字符串、元组。如fun(a), 传递的只是a的值,没有影响a对象本身。比如在fun( a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。我们经常称之为值传递
● 可变类型:类似编程中的引用传递(址传递),如列表,字典。如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响
python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
6.参数
以下是调用函数时可使用的正式参数类型:
●必备参数
●关键字参数
●默认参数
●不定长参数
必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
示例
ch06-demo01-args-necessary.py
调用greeting()函数,你必须传入一个参数,不然会出现语法错误:
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
●使用关键字参 数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。
示例
ch06-demo02-keyword.py
以下实例在函数printinfo()调用时使用参数名:
缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
示例
ch06-demo03-args-default.py
打印默认的age,如果age没有被传入:
▲ 注意:缺省值必须放在最后一个参数
不定长参数*args
可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数
适用于当参数个数不确定或根据调用情况其参数个数会动态变化的情况。
▲ 基本语法如下:
def函数名称(formal args, *args ):
“函数_文档字符串"
函数体
retum [表达式]
加了星号(* )的变量名会存放所有未命名的变量参数。选择不多传参数也可,可变长参数的类型为元组。
补充: **kw
**两个型号代表接受的是一个可变长度的 字典类型的参数。
因此,改参数必须以k-v值结构出现。
def函数名称(formal _args, **kw ):
“函数_文档字符串”
函数体
retum [表达式
加了星号(** )的变量名会存放所有未命名的变量参数。选择不多传参数也可,可变长参数的类型为字典。
▲ 总结: *argv和**kw的区别
两个参数必须为函数定义中参数列表中的排名最后的参数。
*argv代表该参数位置可以放任意个数的数据,最终都会转换成元组数据类型在函数体内处理。
**kw代表该参数位置可以放k=v格式的数据,最终都会转换成字典类型数据安函数体内处理。