一、函数是组织好的,可重复使用的,用来实现独立功能的代码段。函数可以提高程序代码的重用率。
1.函数的格式
不带参数和返回值函数 def 函数名():
…代码…
带参数的函数 def 函数名(参数1,参数2,…):
…代码…
带参数和返回值函数 def 函数名(参数1,参数2,…):
…代码…
return 值
下面是定义的一个函数
def dylc():
print('1楼 西装')
print('2楼 女装')
print('3楼 运动装')
floor=int(input('请输入层数:'))
if floor==1:
print('西单大悦城1楼欢迎你')
dylc()
print('你现在1楼')
elif floor==2:
print('西单大悦城2楼欢迎你')
dylc()
print('你现在2楼')
elif floor==3:
print('西单大悦城3楼欢迎你')
dylc()
print('你现在3楼')
elif floor==4:
print('西单大悦城3楼欢迎你')
dylc()
print('你现在4楼')
函数的调用: 函数名()
函数必须先定义后调用。
二、定义带参函数
(1)调用的时候,这个函数定义时有几个参数,就需要传递几个参数参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
def jiafa(a,b): #定义函数 a,b是形参
c=a+b
print('{}+{}={}'.format(a,b,c))
iafa(2,4) #调用函数 2,4是实参
jiafa(5,6)
运行结果6
11
def qiuhe(a,b):
c=a+b
return c #返回c
x=qiuhe(5,6) #调用求和函数把值赋给x
if x>10:
print('金额>10奖励')
else:
print('不打折')
运行结果
金额>10奖励
def jisuan(a,b):
c=a+b
d=a-b
e=a/b
f=a*b
return c,d,e,f
x=jisuan(3,5)
print(x)
a,b,c,d=jisuan(3,5)
print(a,b,c,d)
运行结果
(8, -2, 0.6, 15)
8 -2 0.6 15
默认参数在调用函数的时候,如果不给有默认值的形参传参,会自动采用默认值。当某个值变化小的时候,就可以使用默认参数。
def pt(name,age,sex='男'):
print('我叫',name,end='\t')
print('年龄',age,end='\t')
print('性别',sex)
pt('张三',19)
pt('李四',29)
pt('王五',49,sex='男')
pt('刘争',19,sex='女')
运行结果
我叫 张三 年龄 19 性别 男
我叫 李四 年龄 29 性别 男
我叫 王五 年龄 49 性别 男
我叫 刘争 年龄 19 性别 女
def pt(*args):#*是代表元组
print(args)
for x in args:#
print(x,end='')
print()
pt(1,2,3,4)
pt(1,2,3,4,5,6,7,8)
运行结果
(1, 2, 3, 4)
1234
(1, 2, 3, 4, 5, 6, 7, 8)
12345678
面试题
a=3
def hanshu():#没有定义局部变量,程序会错误
a+=5
hanshu()
print(a)
运行结果:
local variable ‘a’ referenced before assignment
变量的查找顺序
LEGB
L-LOCAL 局部
E-ENCLOSE 嵌套作用域
G-GLOBAL 全局
B-BUILT-IN 内置
作用域局部>外层作用域>当前会中的全局>pyhon内部作用域
a=100
c=1
b=20
def waibu():
b=200
c=2
def neibu():
c=300
print(c) #LOCAL
print(b) #ENCLOSE
print(a) #GLOBAL
print(max)#BUILT-IN
neibu()
waibu()
运行结果:
300
200
100
递归函数的用法
def jiecheng(n):
if n==1:
return 1
else:
return n*jiecheng(n-1)
print(jiecheng(6))
运行结果
120
用递归函数写斐波拉契数
def fbnq(n):#斐波拉契数
if n==1 or n==2:
return 1
else:
return fbnq(n-1)+fbnq(n-2)
for i in range(1,13):
print('第%d个月的兔子数是:'%i,fbnq(i))
运行结果
第1个月的兔子数是: 1
第2个月的兔子数是: 1
第3个月的兔子数是: 2
第4个月的兔子数是: 3
第5个月的兔子数是: 5
第6个月的兔子数是: 8
第7个月的兔子数是: 13
第8个月的兔子数是: 21
第9个月的兔子数是: 34
第10个月的兔子数是: 55
第11个月的兔子数是: 89
第12个月的兔子数是: 144
面试题
a=[lambda x:x*i for i in range(3)]
print(a[0](3))
print(a[1](3))
print(a[2](3))
运行结果
6
6
6