0.说明
无论在什么编程语言中,函数都不可或缺,充分利用函数的特性,可以大大减少我们程序中的代码量。
1.什么是函数
所谓函数,英文名为function,其实就是表示为实现一定功能的一段代码,显然,如果需要多次实现某一功能时,使用函数就是把重复代码放入其中,既节省空间,又有助于保持一致性(主要是修改代码时)。
(1)函数vs过程
两者都是可以被调用的实体,过程是简单、没有返回值、特殊的函数。在Python中,过程就是函数,因为解释器会隐匿地返回默认值None。
(2)返回值与函数类型
在C语言中,如果定义的一个函数没有返回值,则默认返回`void`,并且同时还要在定义函数时声明函数的类型(即返回值为void的函数类型)。
在Python中,并不需要定义函数的返回值类型,函数可以返回不同类型的值,而如果没有返回值,则默认返回None:
>>> def hello(): ... print ‘hello world!‘ ... >>> res = hello() hello world! >>> res >>> print res None >>> type(res) <type ‘NoneType‘>
另外需要注意的是,跟C语言一样,Python也只能返回一个值或对象,但也许你会看到下面这样的情况:
>>> def foo(): ... return ‘xpleaf‘, ‘clyyh‘ ... >>> res = foo()
执行没有报错,似乎真的可以返回多个对象!但其实,它真的返回了一个对象:
>>> res (‘xpleaf‘, ‘clyyh‘) >>> type(res) <type ‘tuple‘>
即在上面的函数中,其实是隐式地返回了一个元组,只是看起来像是返回了多个对象而已。显然,Python的这种特性要比C语言的灵活很多。关于返回值数量,可总结如下:
返回的对象的数目 | Python实际返回的对象 |
0 | None |
1 | object |
>1 | tuple |
2.调用函数
(1)函数操作符
其实就是使用圆括号来调用一个函数。
(2)关键字参数
指的是在调用函数时,可以通过给指定参数传值,而不需要按照原来函数定义参数的顺序来传值。
定义如下一个函数:
def net_conn(host, port): net_conn_suite
可以有如下调用方式:
标准调用(非关键字参数调用)
# 给参数传递值时,必须按照原来参数定义的顺序传递值 net_conn(‘www.xpleaf.com‘, 80)
关键字参数调用
# 按照顺序给参数传递值 net_conn(host=‘www.xpleaf.com‘, port=80 ) # 不按照顺序给参数传递值 net_conn(port=80, host=‘www.xpleaf.com‘)
(3)默认参数
默认参数就是声明了默认值的参数,因为给参数赋予了默认值,所以在调用函数时,不向该参数传入值也是允许的,后面会有讨论。
(4)参数组
通过一个把元组(非关键字参数)或字典(关键字参数)作为参数部分传递给函数,可以在Python中执行一个没有显式定义参数的函数。如下:
func(*tuple_grp_nonkw_args, **dict_trp_kw_args)
当然也可以给出其它形参,包括标准的位置参数(既不是默认参数也不是关键字参数,即按照函数定义时参数的位置来给相应的参数传递值)和关键字参数(函数调用时指定给哪一个参数传递值,其实就是所谓关键字参数了),函数调用的完整语法如下:
func(positional_args, keyword_args, *tuple_grp_nonkw_args, **dict_grp_kw_args)
本文出自 “香飘叶子” 博客,转载请与作者联系!
原文地址:http://xpleaf.blog.51cto.com/9315560/1763071