Python3之函数和函数递归

1、函数的定义

def  <函数名>(<参数(0个或多个)>):
	<函数体>
	return  <返回值>
  • 函数定义时,所指定的参数是一种占位符
  • 函数定义后,如果不经过调用,不会被执行
  • 函数定义时,参数是输入、函数体是处理、结果是输出(IPO)

2、函数的可选参数传递

def  <函数体> (<非可选参数>,<可选参数>):
	 <函数体>
	 return <返回值>
例如:
def fact(n,m=1);
	s=1;
	for i in range(1,n+1):
		s*=i;
	return s//m;
>>fact(10)
>362800
>>fact(10,5)
>725760

3、函数的可变参数传递

函数定义时可以设计可变数量参数,既不确定参数总数量
def  <函数名>(<参数>,*b):
	 <函数体>
	 return  <返回值>
例如:
def fact(n,*b):
	s=1;
	for i in range(1,n+1):
		s*=i;
	for item in b:
		s*=item;
	return s;

>>fact(10,3)
>10886400
>>fact(10,3,5,8)
>435456000

函数参数传递均可以采用位置传递和名称传递:facr(10,5) (位置传递) fact(m=5,n=10)(名称传递)

4、函数的返回值

def fact(n,m=1):
	s=1;
	for i in range(1,n+1):
		s*=i;
	return s//m,n,m
>>fact(10,5)
>(725760,10,5)		#元组类型
>>a,b,c=fact(10,5)
>>print(a,b,c)
725760,10,5

5、局部变量和全局变量

  • 局部变量是函数内部的占位符,与全局变量可能重名但不同
  • 函数运算结束后,局部变量被释放
  • 可以使用global保留字在函数内部使用全局变量
n,s=10,100			#n和s是全局变量
def fact(n):
	global s		#fact()函数中使用global保留字声明,此处s为全局变量
	for i in range(1,n+1):	
		s*=i
	return s
print(fact(n),s)	n和s是全局变量
运行结果:
>>362880000 362880000

局部变量为组合数据类型且未创建,等同于全局变量
ls=["F","f"]	#通过使用[]真实创建了一个全局变量列表ls
def fun(a):
	#ls=[]
	ls.append(a)	#此处ls是列表类型,未真实创建,等同于全局变量
	return
fun("C")	全局变量ls被修改
print(ls)
运行结果分别为
>>['F','f','C']
>['F','f']		#ls=[]

6、lambda函数

  • lambda函数主要用作一些特定函数或方法的参数
  • lambda函数有一些固定使用方式,建议逐步掌握
  • 一般情况,建议使用def定义的普通函数
<函数名> = lambda <参数>:<表达式>
等价于:def <函数名>(<参数>):
			<函数体>
			return <返回值>
>>f=lambda x,y:x+y
>>f(10,15)
运行结果: 25
>>f=lambda : "lambda函数"
>>print(f())
运行结果: lambda函数

7、代码复用

  • 把代码当成资源进行抽象
  • 代码资源化:程序代码是一种用来表达计算的“资源”
  • 代码抽象化:使用函数等方法对代码赋予更高级别的定义
  • 代码复用:用同一份带代码在需要时可以被重复使用
函数和对象是代码复用的两种主要形式
1)函数:将代码命名在代码层面建立了初步抽象
2)对象:属性和方法
<a>.<b><a>.<b>() 在函数之上再次组织进行抽象

8、模块化设计

  • 紧耦合:两个部分之间交流很多,无法独立存在
  • 松耦合:两个部分之间交流很少,可以独立存在
  • 模块内部紧耦合、模块之间松耦合

9、函数递归

n!=    1	,  	n=0
	n(n-1)  , otherwise 
  • 链条:计算过程存在递归链条。(即上述的otherwise)
  • 基例:存在一个或多个不需要再次递归的基例。(即上述的n=0时)
  • 函数内部,采用分支语句对输入参数进行判断!!!!(划分递归的关键,而且只需要从n考虑到n-1即可,不需要想太多)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值