python学习——函数

本文介绍了Python中函数的基本概念,包括函数的定义、创建格式,参数的传递方式(位置参数、关键字参数),返回值的处理,以及可变参数和关键字形参的使用。此外,还讨论了变量的作用域,递归函数的概念和应用,并通过示例展示了如何编写和调用递归函数。
摘要由CSDN通过智能技术生成

一、函数的定义
函数就是执行特定任务和完成特定功能的一段代码。使用函数可以对代码进行复用,提高代码的可维护性和可读性,使得程序便于调试。
二、函数的创建
创建格式

#创建和格式
def 函数名([参数]:
    函数体
    [return xxx]

举例

#创建和格式
def sum (a,b):
    c=a+b
    return c

result=sum(80,120)
print(result)

运行结果
在这里插入图片描述
三、参数的传递
(1)形式参数,简称为形参,形参出现的位置是在函数的定义处。
(2)实际参数,简称为实参,实参的出现位置实在函数的调用处。
(3)位置实参,根据形参对应的位置进行实参的传递。
(4)关键字实参,根据形参的名字进行实参传递。实参赋值给形参。采用了关键字赋值之后就不会再根据位置进行传递了。
形参和实参的名字可以不同。
在函数调用的过程中,进行参数的传递,如果是不可变序列,那么在函数体的修改不会影响到实参的值,如果是可变序列,那么在函数体的修改会影响到实参的值。就是说实参的值变不变取决于实参本身是可变序列还是不可变序列。
例如

def modify(a,b):
    print('a=',a)
    print('b=',b)
    a=100
    b.append(10)
    print('a=', a)
    print('b=', b)


c=1
d=[2,3,4]
print('c=',c)
print('d=',d)
modify(c,d)
print('c=',c)
print('d=',d)

运行结果
在这里插入图片描述
四、函数的返回值
(1)如果函数不需要返回值,则可以省略return。
(2)如果函数需要返回值,如果是1个,那么直接返回原类型。
(3)如果函数有多个返回值,那么返回的结果为元组。
ps:0的布尔值为false,1的布尔值为true。
下面对数据进行分奇、偶操作。

#关于返回值的验证
def classfier(num):
    odd=[] #基数
    even=[]#偶数
    for i in num :
        if i%2:
            odd.append(i)
        else:
            even.append(i)
    return odd,even

lst=[i for i in range(10)]
print(classfier(lst))

运行结果
在这里插入图片描述
五、函数的参数定义
(1)函数在定义的时候,给形参设置默认值,那么当默认值与实参的值不同的时候,实参的值取代形参的值。
(2)个数可变的位置参数
如果说,在定义函数的时候,可能无法确定位置实参的个数,那么我们可以用可变的位置参数,具体的操作方法是使用*定义个数可变的位置形参,输出结果是一个元组。

#不确定实参个数

def test(*a):
    print(a)

test(1)
test(1,2)
test('hello','world','hello','python')

运行结果
在这里插入图片描述
(3)个数可变的关键字形参
同理,在函数定义的时候,事先无法确定所要传递的关键字实参的个数的时候,这时候我们就可以使用可变的关键字形参,具体操作方法是使用**,输出结果是一个字典。
例如

#关键字形参个数不确定
def test(**para):
    print(para)

test(a=10)
test(a=10,b=20,c=30)

运行结果
在这里插入图片描述
注意
①可变的位置参数和可变的关键字参数只能有一个。
②当定义函数是既需要关键字形参,有需要位置形参的时候,那么要求位置形参放在第一个,关键字形参放在第二个。

def test(*a,**b):

(4)使用*可以将列表中的元素都转换为位置实参,使用两个星号可以将字典中的每个键值对都转换为关键字实参。

#转换为位置参数和关键字参数

def test(a,b,c):
    print('a=',a)
    print('b=',b)
    print('c=',c)

lst=[1,2,3]
test(*lst)

dic={'a':10,'b':20,'c':30}
test(**dic)

运行结果
在这里插入图片描述
关键字形参和个数可变的位置形参都是使用*,个数可变的关键字形参要用两个星号。
例如

#传递一部分位置参数,传递一部分关键字参数
def test(a,b,*,c,d):#表示从c之后必须采用关键字参数
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)

test(a=10,b=20,c=30,d=40)
test(10,20,c=30,d=40)

运行结果
在这里插入图片描述
def test(a,b,*,c,d)这一部分指得是星号之后必须采用关键字传参。
六、变量的作用域
根据变量的作用范围可以将变量分为全局变量和局部变量。
在函数体内定义的变量是局部变量,顾名思义,作用范围是函数内部。在函数体外失去作用。
例如

#变量的作用域
def test(a,b):
    c=a+b
    print(c)

print(a)
print(b)
print(c)

发现报错
在这里插入图片描述
即在变量在函数体外失去定义。

现在把a,b改为全局变量

a=10
b=20
def addition():
    c=a+b
    print(c)

addition()

运行结果
在这里插入图片描述
也可以在函数体内定义全局变量,这时候需要加上global对这个变量进行说明。
例如不加global

def test(a,b):
    # global  c
    c=a+b

test(10,20)
print(c)

运行结果
在这里插入图片描述
函数体内,变量前加上global

def test(a,b):
    global  c
    c=a+b

test(10,20)
print(c)

运行结果
在这里插入图片描述
七、递归函数
(1)递归函数的定义
如果在一个函数的函数体内调用了函数的本身,那么这个函数就称为递归函数。
(2)递归函数主要是由递归调用和递归终止条件组成的,无递归终止条件,函数将会无限被调用。
例如,求阶乘就用到了递归函数。

#求阶乘
def fac(a):
    if a==1:
       return 1
    else:
        result=a*fac(a-1)
        return(result)

print('6的阶乘是%d'%(fac(6)))

运行结果
在这里插入图片描述
八、总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值