Python函数

本文详细介绍了Python函数的创建与调用,包括位置实参、关键字实参及参数传递原理。还探讨了函数的返回值、参数定义(默认值、可变数量参数)以及变量作用域。通过递归函数实现阶乘和斐波那契数列计算的示例,深入理解递归概念。
摘要由CSDN通过智能技术生成

目录

一、函数的创建和调用

1.1 函数的创建

1.2 函数的调用

二、函数的参数传递

2.1 位置实参

2.2 关键字实参

2.3 实参对象类型

三、函数的返回值

四、函数的参数定义

4.1 默认值参数

4.2 个数可变的位置形参

4.3 个数可变的关键字形参

4.4 形参类型的组合和顺序问题

五、变量的作用域

六、递归函数

例1:使用递归函数实现阶乘计算

例2:使用递归函数实现斐波那契数列的计算


函数

函数就是执行特定任务已完成特定功能的一段代码。使用函数可以实现代码的复用,隐藏实现细节,同时提高程序的可读性,便于调试与维护。

一、函数的创建和调用

1.1 函数的创建

def  函数名 ( [ 形式参数 ] ) :

        函数体

        [ return xxx ]

注意:函数的命名也需要遵守标识符命名规则(数字、字母、下划线)

1.2 函数的调用

函数名 ( [实际参数] )

二、函数的参数传递

2.1 位置实参

根据形参对应的位置进行实参传递

  • 使用 * 序列中的每个元素都转换为位置实参
def fun(a,b,c):
    print('a=',a,end='\t')
    print('b=',b,end='\t')
    print('c=',c)

fun(10,20,30)
lst=[11,22,33]
fun(*lst)

运行结果

2.2 关键字实参

根据形参名称进行实参传递

def bmi(weight, height):
    x = weight/(height**2)
    return x

'''位置实参'''
print(bmi(48.5, 1.61))
'''关键字实参'''
print(bmi(height=1.61,weight=48.5))

运行结果

  • 使用 ** 字典中的每个键值对都转换为关键字实参
def fun(a,b,c):
    print('a=',a,end='\t')
    print('b=',b,end='\t')
    print('c=',c)

fun(a=10,b=20,c=30)
dic={'a':11,'b':22,'c':33}
fun(**dic)

运行结果

2.3 实参对象类型

  • 若实参是不可变对象, 函数体内的修改不会影响实参的值(如字符串等)
  • 若实参是可变对象,函数体内的修改会影响实参的值(如列表等)

三、函数的返回值

return 返回值

  • 若函数没有返回值(函数执行完毕后,不需要给调用处返回数据),return 可以省略不写
  • 若函数的返回值为1个,则返回结果为返回值本身
  • 若函数的返回值为多个,则返回结果为以返回值为元素的元组

函数在定义时,是否需要返回值,视情况而定

四、函数的参数定义

4.1 默认值参数

  • 函数定义时,给形参设置默认值:
    • 调用函数时若未提供对应实参,则使用默认值
    • 只有当实参与默认值不符的时候才需要传递实参

def  函数名 ( 形式参数=默认值 ) :

def fun(a,b=10):
    print(a,b)

fun(100)    # 位置实参100传递给形参a,形参b使用默认值10
fun(100,30)

运行结果

4.2 个数可变的位置形参

  • 定义函数时,若无法事先确定传递位置实参的个数时,使用个数可变的位置形参
  • 使用 * 定义个数可变的位置形参
  • 结果为一个元组

一个函数只能有1个个数可变的位置形参

def  函数名 ( * 形式参数 ) :

4.3 个数可变的关键字形参

  • 定义函数时,若无法事先确定传递关键字实参的个数时,使用个数可变的关键字形参
  • 使用 ** 定义个数可变的关键字形参
  • 结果为一个字典

一个函数只能有1个个数可变的关键字形参

def  函数名 ( ** 形式参数 ) :

注意:定义函数时,若既有个数可变的位置形参,又有个数可变的关键字形参,要求个数可变的位置形参放在个数可变的关键字形参之前

def  函数名 ( * 形式参数 , ** 形式参数 ) :

4.4 形参类型的组合和顺序问题

def fun1(*args1,**args2):
    pass

def fun2(a,b,*,c,d):  # 要求c,d只能使用位置参数传递
    pass

def fun3(a,b,*,c,d,**args):
    pass

五、变量的作用域

即程序代码能访问该变量的区域。变量根据变量的有效范围分为:

  • 局部变量
    • 在函数体内定义的变量,只在函数体内部有效
    • 局部变量使用 global 声明,即可成为全局变量
  • 全局变量
    • 在函数体外定义的变量,在函数体内部和外部都有效

六、递归函数

即在函数体内调用该函数本身的函数。递归主要由两部分组成:

  • 递归调用条件
  • 递归终止条件

例1:使用递归函数实现阶乘计算

def fun(n):
    if n==1:
        return 1
    else:
        res=n*fun(n-1)
        return res

print('5的阶乘是',fun(5))

运行结果

例2:使用递归函数实现斐波那契数列的计算

def fib(n):
    if n==1 or n==2:
        return 1
    else:
        res=fib(n-1)+fib(n-2)
        return res

print('斐波那契数列第8位的数是',fib(8))


print('斐波那契数列前8位的数是',end='\t')
for i in range(1,9):
    print(fib(i),end='\t')

运行结果


Flag:我要成为一个日更选手:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值