栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python】第九部分 函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python】第九部分 函数

【Python】第九部分 函数

文章目录
  • 【Python】第九部分 函数
  • 9. 函数
    • 9.1 函数的定义与调用
    • 9.2 函数调用的参数传递:位置实参,关键字实参
    • 9.3 函数参数传递的内存分析
    • 9.4 函数的返回值
    • 9.5 默认值参数
    • 9.6 个数可变的位置参数,个数可变的关键字参数
    • 9.7 递归函数
  • 总结


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


总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号