函数

  • 函数简介
  • 函数的参数
  • 参数的传递方式
  • 实参的类型
  • 不定长参数
  • 参数的拆包
  • 作业


函数简介

  • 函数是一个对象
  • 函数用来保存一些可执行代码,并且可以在需要时,对这些语句进行多次调用

函数的参数

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)

作业

  1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
    ○ 控制姓名长度为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', '性别': '男'}
  1. 使用函数求前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. 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def Sum(n):
    if n == 1:
        return 1
    return n + Sum(n-1)


print(Sum(100))

打印结果

1-100的和是5050