【Python】第九部分 函数

导读:本篇文章讲解 【Python】第九部分 函数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

【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


总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82892.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!