Python 函数



Python 函数

搞懂Python函数的定义与调用

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

函数定义

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

Python 定义函数使用 def 关键字,一般格式如下:
 def 函数名(参数列表):
    # 实现特定功能的多行代码
    [return [返回值]]

其中,用 [] 括起来的为可选择部分,即可以使用,也可以省略。

不建议读者使用 a、b、c 这类简单的标识符作为函数名,函数名最好能够体现出该函数的功能。
形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。
[return [返回值] ]:整体作为函数的可选参参数,用于设置该函数的返回值。也就是说,一个函数,可以用返回值,也可以没有返回值。

注意:在创建函数时,即使函数不需要参数,也必须保留一对空的“()”。
下面是函数不带参数的实例:
 def animal():
    animal = ["cow","dog","cat"]
    return animal

下面是函数带参数的实例:
 def animal(param):
    if (param == "cow"):
        print("param is cow")

函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
 def animal(param):
    if (param == "cow"):
        print("param is cow")

animal("cow");

执行结果:
param is cow

参数

必需参数
关键字参数
默认参数
不定长参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用函数,你必须传入一个参数,像上面调用animal()函数一样不然会出现语法错误:
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
 def animal(param1,param2):
    if (param1 == "cow"):
        print("param1 is cow")

animal(param2="cat",param1="cow");

执行结果:
param1 is cow

调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 param1 参数,则使用默认值:
 def animal(param="cow"):
    if (param == "cow"):
        print("param is cow")

animal();

执行结果:
param is cow

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
 def functionname([formal_args,] *var_args_tuple ):
    function_suite
    return ([expression])

 def animal(arg1, *vartuple):
    print(arg1)
    print(vartuple)

animal("cow","cat","dog","lion");

执行结果:
cow
('cat', 'dog', 'lion')

还有一种就是参数带两个星号 **基本语法如下:
 def functionname([formal_args,] **var_args_dict ):
    function_suite
    return ([expression])

加了两个星号 ** 的参数会以字典的形式导入。
 def animal(arg1, **vardict):
    print(arg1)
    print(vardict)

animal("cow",a="cat",b="dog",c="lion");

执行结果:
cow
{'a': 'cat', 'b': 'dog', 'c': 'lion'}

注意:声明函数时,参数中星号 * 可以单独出现,单独出现星号 * 后的参数必须用关键字传入。

匿名函数

python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

lambda 函数的语法只包含一个语句,如下:
 lambda [arg1 [,arg2,.....argn]]:expression 

如下实例:
 sum =  lambda arg1, arg2: arg1 + arg2

print("相加后的值为 : ", sum( 20, 20 ))
print("相加后的值为 : ", sum( 10, 20 ))

执行结果:
相加后的值为 : 40
相加后的值为 : 30

return语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:
如下实例:
 def animal():
    animal = ["cow","dog","cat"]
    return animal

# 调用animal函数>
ret = animal()
print("函数 : ", animal())

执行结果:
函数 : ['cow', 'dog', 'cat']

递归调用

递归是指函数能够调用自身,递归是一种常见的数学和编程概念。
如下实例:
 def recursion(k):
    if (k > 0):
        result = k + recursion(k-1)
        print(result)
    else:
        result = 0
    return result
recursion(6)

执行结果:
1
3
6
10
15
21