3、函数式编程:
我们在用Python程序处理实际问题时,有些代码可能需要重复使用,如果每次使用都要编写一遍代码会耗费不少工作量,我们可以把这部分代码编写成函数,每次调用函数就能完成工作,不用再重复编写代码了,函数使编程效率大大提高,也使程序代码更为简洁。
我们在前文已经介绍过两个Python内置函数:input()和print()。
3.1、函数的声明和调用:
声明和定义的含义虽有区别,但本教程不做特别区分,后续内容会混合使用声明或定义,按同样的含义理解不影响量化学习。
函数声明时不会执行,只是告诉Python声明了一个函数,函数被调用时才会执行函数体的语句。(函数是可调用对象,在被调用时才会执行)
因为Python代码的执行顺序是从上到下,存在先后顺序,所以在Python中必须先声明函数然后再调用函数,否则在调用函数时会提示找不到函数。调用函数时,只要按照函数声明的形式传递参数,就可以使用函数完成相应的功能,并可以获取函数执行完后的返回值。
声明函数的关键字是def,在函数中以缩进表示各语句属于函数体。声明函数的形式如下:
def 函数名(参数):
语句块
return 返回值
参数是函数需要处理的数据,可以有多个,也可以没有,返回值是当函数执行完后抛出的值,返回值以关键字return引导,return后也可以没有返回值,return语句也可以没有,当未指定返回值时,函数默认返回None值。若函数中有多个return语句,当一个return语句被执行后,其后的语句将不再执行,函数抛出返回值并结束。
前文介绍了数据对象、表达式和流程控制语句,函数可看做是数据对象、表达式和流程控制语句的结合。
示例:
>>> def func(a,b,c):
... print(a,b,c)
... return '执行完成'
...
>>> x=func(1,2,3)
1 2 3
>>> print(x)
执行完成
>>>
示例声明了一个名称为func的函数,有三个参数a,b,c,函数语句块是调用输出函数print()打印a,b,c,函数执行完后抛出返回值'执行完成',返回值是一个字符串。调用函数时传入了三个实参1,2,3,并把函数返回值赋值给了x,所以打印x的值便输出字符串'执行完成'。
声明函数时定义的参数称为形参,在调用函数时具体传给函数的参数称为实参。
函数若需要抛出多个返回值,多个返回值可用逗号“,”隔开,多个返回值会以元组类型抛出,例如:
>>> def func(a,b,c):
... print(a,b,c)
... return (a,b,c)
...
>>> x=func(1,2,3)
1 2 3
>>> print(x)
(1, 2, 3)
>>>
多个返回值可以不用小括号括起来,在前文介绍元组时可知,Python会把用逗号“,”隔开的多个对象创建为元组,因此小括号可以省略,当返回值数量非常多的情况下用小括号会使语句结构更为清晰。
Python3允许定义函数时给参数和返回值增加注释,以便调用者知道应该传给函数什么类型的参数及返回值类型。参数的注释以:value的形式放在参数名后“=”前,返回值以-> value的形式放在小括号后冒号前,例如:
def func(a:str,b:list,c:int=8) ->tuple:
print(a,b,c)
return (a,b,c)
注释会被收集在函数的__annotations__属性中,例如:
>>> func.__annotations__
{'a': , 'b': , 'c': , 'return': }
>>>
有了注释,调用者在调用func时会知道应该给a传入字符串,给b传入列表,给c传入整数,并且函数的返回值是元组。
3.2、函数的参数传递:
3.2.1、无默认值参数:
声明函数时,诸如def func(a,b,c):,参数a,b,c的值未知,此类参数称为位置参数&#x