一:函数
函数是一段可重用的代码。可以通过输入的参数值,返回需要的结果,并可存储在文件中供以后使用。几乎任何Python代码都可放在函数中。Python为函数提供了强大支持。
1、函数的定义及调用
格式:
def 函数名(形参表):
函数体语句序列
[return 表达式] #可选项,即有的函数可以没有返回值。
函数调用:
函数名(实参表)
说明:
函数必须先定义,后使用;
函数名与变量名的命名规则相同,只能包含字母、数字和下划线_,且不能以数字打头。
2、函数的参数
在C、C++中,参数的传递有值传递和引用传递两种方式。Python中任何东西都是对象,所以参数只支持引用传递的方式。
Python通过名称绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中同一个存储空间。
向函数传递参数时,Python采用按引用传递的方式。这意味着当传递参数时,函数将使用新变量名来引用原始值。
函数的参数类型
形式参数类型(定义函数时):
普通参数、默认值参数、可变参数
实际参数类型(调用函数时):
位置实参、关键字实参、解构实参
形式参数类型
普通参数
def add(x,y):
return x + y
默认值参数
函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算。
带默认值的参数不能位于没有默认值的参数前面。
位置可变参数(*)
在形式参数名称前加一个星号*,则代表使用该形式参数可以接收任意多个参数,而且接收的参数将会以元组的方式组织。
def func(*args):
# args以元组的方式组织传入的实参
print(args)
func(1,2,3,4,’abc’)
关键字可变参数(**)
在形式参数名称前加两个星号**,则代表使用该形式参数可以接收任意多个传入的键-值对参数(关键字实参),而且接收的参数将会以字典的方式组织。
def func(**kwd):
# kwd以字典的方式组织传入的关键字实参
print(kwd)
func(name=‘tom’,age=20)
当位置可变参数(*args)和关键字可变参数(**kwd)一起使用时候,必须先声明位置可变参数(*args),最后声明关键字可变参数(**kwd)
二、递归函数
(1)递归的概念
递归函数可以在函数主体内直接或间接地调用自己,即函数的嵌套是函数本身。
递归是一种程序设计方法,使用递归可以减少重复的代码,使程序变得简洁。
递归的过程分为两个阶段:递推和回归。
递归函数的原理:
第一阶段,递归函数在内部调用自己。每一次函数调用又重新开始执行此函数的代码,直到某一级递归程序结束。
第二阶段,递归函数从后往前返回。递归函数从最后一级开始返回,一直返回到第一次调用的函数体内。即递归函数逐级调用完毕后,再按相反的顺序逐级返回。
(2)递归的实现
一个问题能否用递归实现,看其是否具有下面的特点:
需有完成任务的递推公式。
结束递归的条件。
编写递归函数时,程序中必须有相应的语句:
一个递归调用语句。
测试结束语句。先测试,后递归调用。
函数是一段可重用的代码。可以通过输入的参数值,返回需要的结果,并可存储在文件中供以后使用。几乎任何Python代码都可放在函数中。Python为函数提供了强大支持。
1、函数的定义及调用
格式:
def 函数名(形参表):
函数体语句序列
[return 表达式] #可选项,即有的函数可以没有返回值。
函数调用:
函数名(实参表)
说明:
函数必须先定义,后使用;
函数名与变量名的命名规则相同,只能包含字母、数字和下划线_,且不能以数字打头。
2、函数的参数
在C、C++中,参数的传递有值传递和引用传递两种方式。Python中任何东西都是对象,所以参数只支持引用传递的方式。
Python通过名称绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中同一个存储空间。
向函数传递参数时,Python采用按引用传递的方式。这意味着当传递参数时,函数将使用新变量名来引用原始值。
函数的参数类型
形式参数类型(定义函数时):
普通参数、默认值参数、可变参数
实际参数类型(调用函数时):
位置实参、关键字实参、解构实参
形式参数类型
普通参数
def add(x,y):
return x + y
默认值参数
函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算。
带默认值的参数不能位于没有默认值的参数前面。
位置可变参数(*)
在形式参数名称前加一个星号*,则代表使用该形式参数可以接收任意多个参数,而且接收的参数将会以元组的方式组织。
def func(*args):
# args以元组的方式组织传入的实参
print(args)
func(1,2,3,4,’abc’)
关键字可变参数(**)
在形式参数名称前加两个星号**,则代表使用该形式参数可以接收任意多个传入的键-值对参数(关键字实参),而且接收的参数将会以字典的方式组织。
def func(**kwd):
# kwd以字典的方式组织传入的关键字实参
print(kwd)
func(name=‘tom’,age=20)
当位置可变参数(*args)和关键字可变参数(**kwd)一起使用时候,必须先声明位置可变参数(*args),最后声明关键字可变参数(**kwd)
二、递归函数
(1)递归的概念
递归函数可以在函数主体内直接或间接地调用自己,即函数的嵌套是函数本身。
递归是一种程序设计方法,使用递归可以减少重复的代码,使程序变得简洁。
递归的过程分为两个阶段:递推和回归。
递归函数的原理:
第一阶段,递归函数在内部调用自己。每一次函数调用又重新开始执行此函数的代码,直到某一级递归程序结束。
第二阶段,递归函数从后往前返回。递归函数从最后一级开始返回,一直返回到第一次调用的函数体内。即递归函数逐级调用完毕后,再按相反的顺序逐级返回。
(2)递归的实现
一个问题能否用递归实现,看其是否具有下面的特点:
需有完成任务的递推公式。
结束递归的条件。
编写递归函数时,程序中必须有相应的语句:
一个递归调用语句。
测试结束语句。先测试,后递归调用。