【Python】第九部分 函数

本文详细介绍了Python中的函数,包括函数定义与调用、参数传递(位置实参、关键字实参)、内存分析、返回值、默认值参数、可变数量参数、递归函数、匿名函数(lambda)和高阶函数的应用。通过实例解析了函数在实际编程中的使用和注意事项,帮助提升代码复用性和可读性。

【Python】第九部分 函数



9. 函数

9.1 函数的定义与调用

  什么是函数?函数就是执行可以完成特定功能的一段代码

  为什么需要函数?可以复用代码,提高可读性可维护性

# def 函数名(形参,形参):
#     函数体
#     return

def fun1(num1, num2):  # num1和num2 表示的是形参
    return num1 + num2


res = fun1(10, 20)  # 10 和 20表示的是实参
print(res)

9.2 函数调用的参数传递:位置实参,关键字实参

# 位置实参就是根据对应的位置进行传参
def fun2(num1, num2):
    return num1 * num2

# 将20和30依次赋值给num1和num2,这种就叫做位置实参传递
res = fun2(20, 30)
print(res)

# 通过指定形参名称进行赋值,这种就叫做关键字实参传递
res1 = fun2(num2=10, num1=30)
print(res1)


9.3 函数参数传递的内存分析

def fun3(a, b):
    a = 100
    b.append(50)
    return a, b

n1 = 10
n2 = [10, 20, 30, 40]

print(fun3(n1, n2))  # (100, [10, 20, 30, 40, 50])
print(n1)  # 10
print(n2)  # [10, 20, 30, 40, 50]
# 通过上面不难看出n1未被修改,而n2被修改了
''' 
    原因:在函数调用的过程中,进行参数的传递,如果是不可变对象
    那么函数体内的修改并不会影响实参,如果是可变对象,那么函数体内
    的修改会影响到实参
'''


9.4 函数的返回值

  1. 没有返回值,如果函数执行完你并不需要传递数据,可以不写return

  2. 返回值的个数是一个的话,那么直接返回该类型

  3. 如果返回的结果是多个,则返回的是元组

def fun2():
    print('hello')


fun2()  # hello


def fun3(a, b):
    return a + b


print(fun3(10, 20))  # 30


def fun4(a, b):
    res = a + b
    res1 = a * b
    return res, res1


print(fun4(10, 20))  # (30,200)


9.5 默认值参数

# 默认值参数
# 如果没有传参则使用默认值,如果有传参则覆盖默认参数的值
def fun5(a, b=2):
    return a // b

print(fun5(10))  # 5

9.6 个数可变的位置参数,个数可变的关键字参数

'''
    在定义函数的时候,可能事先无法确定需要传递位置参数的个数
    这个时候就可以使用可变的位置参数,在参数前面加个*,返回的是元组
    注意:个数可变的位置参数只能有一个
'''

def fun6(*args):  # 在形参中使用可变的位置参数
    print(args)

fun6(10, 2, 32, 23)  # (10, 2, 32, 23)


# 还可以写在实参中
def fun66(a, b):
    print(a, b)


lis = ['hello', 'world']
fun66(*lis)  # 将每个元素都转化为位置实参传入

# --------------------------------------------

'''
    在定义函数的时候,可能事先无法确定需要传递关键字参数的个数
    这个时候就可以使用可变的关键字参数,在参数前面加个**,返回的是字典
    注意:个数可变的关键字参数只能有一个
'''

def fun7(**args):  # 在形参中使用可变的关键字参数
    print(args) 

fun7(a='123', b='456')  # {'a': '123', 'b': '456'}

# 还可以写在实参中
def fun77(name, age):
    print(name, age)


dic = {'name': 'Jack', 'age': 18}
fun77(**dic)  # 将每个元素都转化为关键字实参传入

# -----------------------------------------

'''
    个数可变的位置参数和个数可变的关键字参数同时使用的时候,
    个数可变的位置参数必须写在前面不然会报错
'''

def fun8(*args1, **args2):
    print(args1, args2)


fun8('123', '456', a='789')  # ('123', '456') {'a': '789'}


9.7 递归函数

  什么是递归函数?
  如果在一个函数中调用了了函数本身,那么这个函数就叫做递归函数,递归函数必须要有终止条件,不然就成了死循环了。

递归函数的优缺点:

  • 缺点:占用的内存多,效率低下
  • 优点:思路和代码简单
''' 
    递归的调用过程:每执行一次函数,都会在栈内存中分配一个栈帧
    每执行完一次函数,都会释放对应的内存空间
'''
# 实现阶乘
def fun9(n):
    if n == 1:
        return 1
    else:
        res = n * fun9(n - 1)
        return res

print(fun9(5))  # 120

# 实现斐波那契数列(第三个数是前两个之和)
# 1 1 2 3 5 8 13 21 34 55 89

def fb(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return fb(n-1) + fb(n-2)

print(fb(10))  # 55


9.9 匿名函数

匿名函数只能临时使用一次,并且函数体只能写一行

通过关键字 lambda

语法: lambda 参数 : 函数体

def res(func):
    print(func(12, 20))


res(lambda x, y: x + y)

9.10 高阶函数

def add(x, y):
    return x + y

# 把函数当成参数进行传递
def res(fun):
    return fun(2, 4)


print(res(add))

9.8 函数说明文档

def add(x,y):
	"""
		函数说明,当鼠标移入函数名上既可以看到我
		固定格式
		:params x: 数字1
		:params y: 数字2
		:return: 返回相加后的值
	"""
	return x + y


总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值