第四天内容20180427(函数的定义与调用、函数的参数、递归函数)
##########主要内容###########
函数的定义与调用
函数的参数
递归函数
#############################
一、函数
1、函数是一段可以重复使用的代码。函数能提高应用模块和代码的重复利用率。
2、函数的定义与调用
1.格式:
def 函数名(形参表):
函数体语句序列
[return 表达式] ##可选项,即有的函数没有返回值
2.函数调用:
函数名(实参表) ##加()表示执行函数
def func(r):
return r**2
print(func(3)) #--> 9
二、函数的参数
1、Python通过名称绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中同一个存储空间。
2、形式参数类型(定义函数时使用):普通参数、默认值参数、可变参数
a.普通参数:必须以正确的顺序传入函数。调用时的数量必须和声明时的一样
def func(a,b):
return a+b
print(func( 1 + 2 )) ###--->3
b.默认值参数:函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算
带默认值的参数不能位于没有默认值参数前面(默认值参数位于普通参数后面)
def func(name,age=35):
print('名字:' + name,'年龄:' + age)
func(lili,20) ##---->名字: lili 年龄: 20
func(lilei) ##---->名字: lilei 年龄: 35
c.动态参数
1.加一个*。可以接受任意多个参数,接受的参数会以元组的方式组织。*args
def f1(*args):
print(args)
f1(11,22,[2,3,4],{"k1":456}) #-->(11,22,[2,3,4],{"k1":456})
2.加两个**。则代表使用该形式参数可以接收任意多个传入的键-值对参数(关键字实参),而且接收的参数将会以字典的方式组织。**kwargs
def f2(**kwargs):
print(kwargs) #输出类型为字典dict
f2(k1=132,k2=456) #-->{"k1":123,"k2":456}
3.不加*表示普通参数,输出类型为a的类型。
*args 必须在 **kwargs 前面
默认写法:def func(*args,**kwargs)
def func(*args,**kwargs):
print(type(args),args)
print(type(kwargs),kwargs)
func(11,22,33 k1=123,k2=456)
#-->(<type "tuple"> (11,22,33))
#-->(<type "dict"> {'k2':456,"k1":123})
4.动态参数为列表、字典、元组
def f1(*args):
print(args,type(args))
li = [11,12,33,44]
f1(li) #输出类型为元组,li整体表示元组第一个元素
#-->([11,12,33,44])
f1(li,123)
#-->([11,12,33,44],123)
f1(*li) #输出类型为元组,li的每个元素表示元组的每个元素
#-->(11,12,33,44)
def f1(**kwargs):
print(kwargs,type(kwargs))
f1(k1=123,k2="sasa")
dic = {"k1":123,"k2":"sasa"}
f1(dic) ##报错,因为dic会作为输出的value。
f1(k=dic) ##-->{'k': {'k1': 123, 'k2': 'sasa'}} <class 'dict'>
f1(**dic) ##-->{'k1': 123, 'k2': 'sasa'} <class 'dict'>
3、实际参数类型(调用函数时使用):位置实参、关键字实参、结构实参
三、递归函数
1、递归的过程分为两个阶段:递推和回归
2、递归函数原理:
第一阶段,递归函数在内部调用自己。每一次函数调用又重新开始执行此函数的代码,直到某一级递归程序结束。
第二阶段,递归函数从后往前返回。递归函数从最后一级开始返回,一直返回到第一次调用的函数体内。即递归函数逐级调用完毕后,再按相反的顺序逐级返回。
3、实例:
1.利用递归完成阶乘计算:
def func(num): if num == 1: return 1 else: return num * func(num-1) print(func(5)) ##---->120
2.斐波那契数列
1 def func(num): 2 if num == 1 or num == 2: 3 return 1 4 else: 5 return func(num-1)+func(num-2) 6 7 for x in range(1,11): 8 print(func(x)) ###遍历输出,斐波那契数列的前10项

浙公网安备 33010602011771号