函数简介
- 函数是一个对象
- 函数用来保存一些可执行代码,并且可以在需要时,对这些语句进行多次调用
函数的参数
def fun(a, b): # 形参
print(a, b)
fun(1, 2) # 实参
参数的传递方式
def fun(a, b, c=20):
print(a)
print(b)
print(c)
fun(1, 2, 3) # 位置传参
fun(a=1, c=2, b=3) # 关键字传参,可以不照顺序
# 混合使用
fun(1, 2, c=3) # 位置传参必须放在前面,否则报错
实参的类型
# 实参传递给形参,就是一个赋值的操作
def fun(a):
a = 10
print(a)
b = 123
fun(b)
print(b)
打印结果
10
123
def fun(a):
a[0] = 10
print(a)
b = [1, 2, 3]
fun(b)
print(b)
打印结果
[10, 2, 3]
[10, 2, 3]
- 可变类型变的是数据,id不变
- 不可变类型,数据变了,id也会变
不定长参数
def fun(*args):
print(*args)
print(args)
fun(1, 2, 3, 4, 5)
打印结果
1 2 3 4 5
(1, 2, 3, 4, 5)
def fun(a, b, *args):
pass
# 混合使用时,位置参数一定要放在*args前面,关键字传参要放到后面
# 顺序: 位置参数, *args,关键字参数
# 关键字不定长
def fun(**kwargs):
print(*kwargs)
print(kwargs)
fun(a=1, b=2, c=3, d=4, e=5)
# 顺序 :位置参数, *args,关键字参数,**kwargs
打印结果
a b c d e
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
参数的拆包
def fun(a, b, c):
print(a)
print(b)
print(c)
t = (1, 2, 3)
fun(*t)
t = {'a': 1, "b": 2, "c": 3}
fun(**t)
作业
- 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
○ 控制姓名长度为6-20
○ 电话号码长度11
○ 性别只能允许输入男或女
○ 每一样信息不允许为空
# 定义一个空字典放名片
dict1 = {}
# 定义姓名函数
def name():
while True:
a = input('请输入姓名')
if len(a) < 6 or len(a) > 20:
print('请重输(长度在6-20之间)')
continue
else:
break
dict1['姓名'] = a
# 定义电话号码函数
def tel():
while True:
a = input('请输入电话号码')
if not (a.isdigit() and len(a) == 11):
print('请重输(11位手机号码)')
continue
else:
break
dict1['电话号码'] = a
# 定义性别函数
def gender():
while True:
a = input('请输入性别(男或女)')
if a != ('男' or '女'):
print('输入错误')
continue
else:
break
dict1['性别'] = a
name()
tel()
gender()
print(dict1)
打印结果
请输入姓名dasdadasas
请输入电话号码123214124124
请重输(11位手机号码)
请输入电话号码12345678901
请输入性别(男或女)n
输入错误
请输入性别(男或女)男
{'姓名': 'dasdadasas', '电话号码': '12345678901', '性别': '男'}
- 使用函数求前20个斐波那契数列
def feb(n):
a = 1
b = 1
list1 = [a, b]
for i in range(n-2):
a, b = b, a + b
list1.append(b)
print(list1)
feb(20)
打印结果
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
- 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def Sum(n):
if n == 1:
return 1
return n + Sum(n-1)
print(Sum(100))
打印结果
1-100的和是5050