Python函数的基本知识

(一)函数的基本概念

(1)函数的定义

      函数是随时可以执行的代码,可以封装一些随时可以使用的代码程序,提高代码的复用性。在写程序时我们用def来定义函数,后面接上函数的名字。下面举个小例子方便理解:
import random
print('*'*20)
print('欢迎使用猜数字小程序')
print('现在给您提供一个猜数字的小游戏')
a = int(input('请您给出该答案的开始范围:'))
b = int(input('请您给出该答案的结束范围:'))
num = random.randint(a,b)  #随机生成a-b之间的数
i = 1
while i<=10:  
    x = int(input('请输入您猜的数:'))
    if x>num:
        print('太大了哦,要小一点')
    elif x<num:
        print('太小了哦,要大一点')
    else:
        print('恭喜您猜对啦')
        break
    print(f'当前还有{10-i}次机会,继续加油')
    i+=1
else:
    print('游戏结束,不好意思您次数已经用完')

这是一个猜数字的小游戏代码,当我们运行时能够执行一次,但是如果我们想要再玩一次的时候该怎么办呢?这时我们就可以定义一个函数def fun () 注意:小括号里是放参数或不放参数的地方,参数后面会讲。

def fun():
    import random
    print('*'*20)
    print('欢迎使用猜数字小程序')
    print('现在给您提供一个猜数字的小游戏')
    a = int(input('请您给出该答案的开始范围:'))
    b = int(input('请您给出该答案的结束范围:'))
    num = random.randint(a,b)  #随机生成a-b之间的数
    i = 1
    while i<=10:  
        x = int(input('请输入您猜的数:'))
        if x>num:
            print('太大了哦,要小一点')
        elif x<num:
            print('太小了哦,要大一点')
        else:
            print('恭喜您猜对啦')
            break
        print(f'当前还有{10-i}次机会,继续加油')
        i+=1
    else:
        print('游戏结束,不好意思您次数已经用完')

此时函数就已经定义完成。

(2)函数的调用

函数定义完,使用时是需要自己调用的。调用的方法是函数名加上(),比如fun()在这里插入图片描述
这里的函数又分为内置函数和自定义函数。比如上面的例子就属于自定义函数,而id() len() print() type()这种属于是内置函数。
注意:函数名不要和系统内置函数名重复。
当我们定义完函数后,只要我们需要用到函数里面的代码,就可以直接引用函数。

(二)函数参数及作用域

(1)函数的参数

参数指的是还没有赋值的变量,等待函数调用时传入值。参数是不规定数据类型的,传入什么类型它就是什么类型。

def num(a):
    print(a*2)

在这里插入图片描述
这里可以观察到print只是一个打印语句,是没有任何返回的,所以用变量接收不到内容。那么当我们想要使用接收内容后的变量该怎么办呢?此时就要用到return返回值,用于在函数中返回最终数据。

def num(a):
    return a*2

在这里插入图片描述
return不能返回赋值语句,是在函数中最后一个执行的语句,后面的内容不会再执行。

(2)参数类型

1.必备参数

     	必备参数指只要定义了参数就必须要传入对应值,否则就会报错。

2.默认参数

        有传入值就接收对应的值,没有就是用默认值。

3.不定长参数

        参数个数未知,传入多少就接收多少。用*args(元组的不定长)和**kwargs(字典的不定长)接收,这里的args和kwargs是规范性写法,也可以自定义。字典的不定长通过键值对的方式给入。一定要先传入元组的不定长,之后再传字典的不定长。整体顺序是,优先必备参数,其次默认参数,剩下是不定长参数。
def num(*args,**kwargs):
    print(f'我的爱好是{args},我还对{kwargs}感兴趣。')

在这里插入图片描述

(3)函数的作用域

        函数相当于一个封闭空间,不能修改函数外面的变量,如需要修改,则要提前声明,关键词是global。
num = 10         #全局变量  定义在外部的变量,定义在外部的变量,函数内是不能修改的,修改需要提前声明
def func():
    global num   #声明全局变量
    num+=1
    print(num)

在这里插入图片描述
闭包:内部函数是不可以直接在外面使用的,如果需要使用,要把它返回出去。也就是外层函数返回内层函数的函数体。

def func():
    money = 100       #定义在内部的是局部变量
    def f1():
        print(money)
    def f2():
        print(money)
    return f1,f2      #f1,f2加小括号是对结果的调用,不加是得到整个函数

在这里插入图片描述
这里是接收变量里的函数体,在把元组里的内容接收出来(拆包),这样就可以对局部变量进行使用。
当然,如果想要修改局部变量也需要提前声明,关键词是nonlocal。

def func():
    money = 100
    def f1():
        nonlocal money   #声明局部变量
        money-=99        #在内层函数不可以直接修改外层函数的值,如需修改,声明局部变量
        print(money)
    def f2():
        print(money)
    return f1,f2      #返回内层函数的函数体,f1,f2加小括号是对结果的调用,不加是得到整个函数

在这里插入图片描述
看函数作用域的时候还要考虑这个数据是不是可变类型。
不可变类型: 数值、int、float、bool、str、tuple
可变:list、dict、set
如果是可变类型不需要考虑作用域,如果是不可变类型,需要考虑作用域,即看是需要修改全局还是局部变量,用global和nonlocal声明。

(三)递归函数和匿名函数

(1)递归函数

当我们需要重复使用函数时,除了循环,还可以用递归函数,比如下面的阶乘运算。

def func(n):
    if n<=1:
        return 1    #递归函数也需要结束条件
    else:
        print(n)
    return n * func(n-1)   #函数自身调用自己

(2)匿名函数

没有名字的函数,单独使用没有意义,往往结合其他函数去运行。
在这里插入图片描述

li = [1,2,6,4,'a','b']
li.sort(key=lambda x:str(x))   #利用匿名函数对列表的数据进行处理
print(li)

这段程序执行过程是:列表调用排序方法的时候会依次把列表里的元素放进来进行排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值