08-Python基础教程-函数

八、函数

首先我们看一段代码:

# -*- coding: utf-8 -*-
#
函数
的应用

PI = 3.14

r1 = 1
r2 = 2
r3 = 3

print 2 * PI * r1 * r1
print 2 * PI * r2 * r1
print 2 * PI * r3 * r1

上述代码是实现了三次求圆的面积,在Python的正常应用中,我们经常会把重复的代码进行统一的规范与整理,将重复的功能单一化,这就是函数函数是为了使得写好的程序中,经常需要被使用的代码能够很方便的被使用,也为了从逻辑上更便捷的管理和维护代码。

Python不仅可以灵活地定义函数,而且系统体身也为我们提供了大量的内置函数,方便在日常应用中的操作。除Python外,基本上所有的高级语言都支持函数。

8.1 常用内置函数


第5行ord()函数,可以实现将字符转换成ASCII数值。

第7行chr()函数,可以实现将ASCII数值转换成字符。

第4行range()函数,可以生成0至11之前的数值列表。

第6行len()函数,可以计算出对象的长度。

第4行int()函数,可以将字符”1″转换为数值”1″。

第6行str()函数,可以将数值”1″转换为字符”1″。

第8行float()函数,可以将数值”1″转换为浮点数值”1.0″。

第46行abs()函数,实现了正数、负数及小数的绝对值结果,abs()函数是实现绝对值的方法。

第46行cmp()函数,实现了对数值的比较,其函数返回值结果如下:

  1. x > y时,函数返回结果为1;
  2. x < y时,函数返回结果为-1;
  3. x == y时,函数返回结果为0;

在Python中,函数名其实就是一个函数对象的引用,它能灵活地将函数名赋值给变量,此变量就有此函数的功能,这个被赋值的变量,我们通常称为”别名“。

这种”别名“不建议大家使用,因为它会破坏我们对程序的理解,但是得知道它。

8.2 自定义函数

在Python中,通常使用关键字def来定义一个函数,依次写出函数名、括号、括号中的参数和冒号,然后在缩进块中写函数体内容,最后可以使用return语句来返回相应的值,当然return也是可以省略的。

第3行,”def“为定义函数的关键字,”area_of_circle“为函数的名称,”r“为涵数的参数。

第48行,为函数的功能描述,此部分可以省略,但为了养成好的编程习惯,建议大家根据引实例进行填写,这也是符合代码规范的要求。

第910行,为函数体,实现了圆面积计算的功能。

第11行,为函数体,实现了函数结果的返回,是不是有返回值,根据你所写的函数而定。

第13行,函数的调用,函数体本身不会执行,只有调用它时才有效。

在Python中,函数可以根据自己的功能决定是否有返回值,如果有返回值,使用”return“语句来返回内容,如果没有返回值,可以不写”return“,但函数执行完毕后,还会有一个返回结果,那就是”None“。

当然,为了保持函数的完整性或在一些特殊用法上,在没有返回值的函数中可以使用”return”或”return None”返回,它所代表的是函数没有返回值。

8.3 函数的多值返回

在Python中,函数是可以返回多个值的,接下来看一个示例。

第11行,通过”return“语句实现了同时返回”vDebug“与”vRelease“。

第13行,通过变量”vD“与”vR“来接收函数返回的结果。

在其它程序语言中,通过返回值返回内容时,通常只能返回一个值,如果想返回多个,只能通过让人不能理解的指针,或自己去组织成一个新的数据结构反返回,而在Python中,就简单的多,那么,它是怎么返回的?我们再看个示例。

通过第13行,我们使用一个变量获得返回内容,在第14行进行了打印,在打印结果中可以看出,函数的多返回值实际上是返回的是一个tuple元组)类型。

8.4 空函数

在Python中,有一个非常特殊的函数,那就是空函数。空函数是一个只定义了的函数,但没有做任何操作,定义一个空函数,通常使用关键字def,后面依次写出函数名、括号、括号中的参数和冒号,然后在缩进块中写”pass“做为函数体。

空函数的应用示例有很多,比如说想实现打印本机IP地址的功能函数,但是还没有想好怎么去做,所以把函数空出来,将来可以进行补充;再比如做一些大型项目时,系统架构师会将软件的实现方法与接口定义好,余下的工作就需要程序员按要求完成指定的函数体。在上图中第8行的”pass“语句什么也不做,只是起到一个占位的作用。”pass“还可以出现在其它语句中。

第5行的”pass“如果不写,语法就会出现错误。

8.5 函数的参数

先描述一下相关部门经常提到的一个高大上的术语”接口“。什么是接口呢,其实接口就可以理解为函数名,因为在团队项目开发中,经常会遇到相互功能的调用,而在正式编写代码之前,团队都会先约定每个人所负责的部分的函数名称及参数信息,这样就不会因为不统一,而造成代码对接不成功的问题。

第310行,为整个函数的实现,此函数实现了对句子中单词的切分,并返回句子中的第一个单词。

第12行,在调用函数之前,定义了将要切分的句子。

第13行,实现了切分函数的调用,并且将字符串句子”str“传入函数。此时的”str“即为必备参数。”get_wors“函数,在实现时就一个参数,所以在13行的调用中,也要有一个参数才行,否则就会出现系统错误。函数的返回结果赋值给了变量”word“。

第14行,对得到的单词进行了印。

刚刚提到了必备参数,必备参数必须以正确的顺序传入函数,调用时与函数声明的数量必须相同。在上例中,我们只能获得到第一个单词,那么,想随意获得指定个数的单词怎么办?看下面的示例是如何做到的。

第3行,在原有的参数基础之上,添加了一个参数,用来返回指定单词的索引编号。

第10行,返回值返回函数传过来的索引值。

第13行,调用时,就可以根据单词的索引位置获得单词了。

接下来,我们再对其进行修改。

第3行,”def get_words(sentence, n = 0):“中的”n=0“是什么意思,其实它叫默认参数

第13行,调用时,只传递一个参数即可,第二个参数如果不填写,即为函数默认值”0“,如果正常填写,即为实际填写的内容。

默认参数是函数在调用时,缺省参数的值没有传入,则被认为是默认参数。

第38行,实现了对整型数值的求合的操作,但在第3行参数中的”nums“我们并不分析出是什么类型,但根据函数体的功能实现,可以猜出可能是”list“或”tuple“。

第10行,我们使用了list作为参数传入函数,并做了打印操作。

第11行,我们使用了tuple作为参数传入函数,并做了打印操作。

通过上例,我们可以看出,函数可以使用”list”或”tuple”做为参数,就是因为”list”或”tuple”可以作为参数,所以函数就得能够处理任意长度的参数。在函数调用时,用户可能传送一个空的”list”或”tuple”,也可能传送任意多个”list”或”tuple”元素,我们称这样的参数为可变参数

可变参数(部分书籍称它为”不定长参数“)就是传入的参数个数是可变的。

第8行,实现了函数调用,只传递两个参数过去。

第3~6行,函数的实现部分,这里为了说明”关键字参数“,在第3行的第三个参数前面多个”**“符号,它是用来标识关键字参数,并在第6行,对其打印,在打印结果中”other:{}“我们可以看出,其实在第8行调用时,没有传参的第三个参数,实际传送过来的是一个dict(即字典)类型的内容。接下来我们看一个具体的应用。

第36行,函数的实现部分。

第8行,实现了函数的调用,需要注意调用时的第3个参数与第4个参数(你也可以接照这样的格式加入第5个、第6个到第n个参数)。

我们可以根据打印结果看到我们传入和参数,在函数内部自动封装成一个dict。除了这种用法之外,还有一种用法以,我们看下面的示例。

通过例可以看出,我们可以定义一个dict,直接以参数传入函数。

到此我们就可了解到,在Python中,调用函数可使用4种参数类型,它们分别是”必备参数“、”默认参数“、”可变参数“与”关键字参数“。

转载请附上原文出处链接及本声明
李老师的博客 » 08-Python基础教程-函数

1 评论

  1. 默默的转走并加工应用

发表评论

提供最优质的文章集合

立即查看 了解详情