函数

136 阅读6分钟

在python中函数是组织好的可重复使用的,用来实现特定功能的代码段,针对特定可重复的代码可以使用函数来增加高效性 1.函数的定义 函数的基础语句是: def 函数名(传入参数): 函数体 return 返回值 在基础函数定义中不考虑传入参数和 return 返回值,在后续的学习中会详细学习

def my_len(date):
    count = 0
    for i in date:
        count += 1
    print(f"字符串{date}的长度是{count}")
str1="itheima"
my_len(str1)

以上是简单定义一个函数,后面两行是调用函数

所以在写完函数之后要使用函数时,需要进行调用 嗲用函数的格式是: 函数名(参数) 当被调用函数不需要参数时,括号内的参数可以不写 注意事项:①参数如不需要可以省略②返回值不需要也可以省略③函数必须先定义再使用 2.函数的传入参数 传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据 有如下代码,完成了2个数字相加的功能:

def add():
    result=1+2
    print(f"1 + 2的结果是:{result}")

函数的功能非常局限,只能计算1+2 以上的解决方法就可以使用函数的传入参数去解决 基于函数的定义语法: def 函数名(传入参数): 函数体 return 返回值 如下

def add(x,y):
    result=x+y
    print(f"{x}+{y}={result}")
add(3,5)

此时的 x,y 就是调用函数时传入的参数,此时 x,y 不是固定的,每次调用都可以重新传入新的数 函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数参数之间使用逗号进行分隔 函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值传入的时候,按照顺序传入数据,使用逗号分隔 在定义函数时的 xy 时形参,而调用时传入的 3,5 是作为实参 3.函数的返回值

def add1(x,y):
    return x+y
result=add1(3,5)
print(result)

在一个函数中只要执行了 return 这个函数就会立即结束,后面的流程就不会执行了,return 返回的值是函数执行后的一个结果,可以用变量来接收 当没写返回值时,默认返回None,也可主动返回None 在if判断中,None等同于False 一般用于在函数中主动返回None,配合if判断做相关处理,以下代码是具体的应用

def check_age(age):
    if age>=18:
        return "SUCCESS"
    else:
        return None
result=check_age(16)
if not result:# not None相当于Ture
    print("你是未成年")
else:
    print("你是成年人")

4.函数的嵌套调用 函数的嵌套就是在函数里又调用了一个函数

ef fun1():
    print("过程二")
def fun2():
    print("过程一")
    fun1()
    print("过程三")
fun2()

5.函数说明文档 我们可以给函数添加说明文档,辅助理解函数的作用, 语法如下: def func(x, y): """ 函数说明 :param x:形参x的说明 :param y:形参y的说明 :return:返回值的说明 """ 函数体 return 返回值 通过多行注释的形式,对函数进行说明解释内容应写在函数体之前

def add2(x,y):
    """
    add2函数可以接受2个参数,进行两数相加的功能
    :param x: 形参x表示相加中的一个数
    :param y: 形参y表示相加中的另一个数
    :return: 返回值时两数相加的结果
    """
    result=x+y
    print(f"{x}+{y}={result}")
    return result
add2(5,6)

当调用函数时,将鼠标悬停在函数名上时,会显示你所写的注释

image.png 6.变量的作用域 局部变量: 变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)主要分为两类:局部变量和全局变量 所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效,在函数中定义的变量在函数外部使用时,系统会报错

def testA:
    num =100
    print(num)
testA()   # 100
print(num)   #报错:name'num'is not defined

全局变量: 所谓全局变量,指的是在函数体内、外都能生效的变量思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?答:将这个数据存储在一个全局变量里面

# 定义全局变量a
num =100
3
def testA(:
    print(num)   #访问全局变量num,并打印变量num存储的数据
def testB():
    print(num)   #访问全局变量num,并打印变量num存储的数据
testA()  # 100
testB()  # 100

定义在函数外部的变量就越是全局变量 如果想要在函数内修改全局变量的值,此时就需要使用global关键字,如果不使用则相当于是重新定义的一个局部变量

image.png 此时直接在函数内修改变量的值只会改变内部的值,外部的时还是定义时的值,不曾改变,此时函数内的 num 是局部变量,与外部定义的全局变量 num 没有任何关系,相当于在函数内重新定义一个新的变量进行赋值,如果要在函数内部修改全局变量的值时,我们只需要用到 global 关键字,如下所示

image.png 在函数内定义的变量都使局部变量,尽管名字与全局变量一样,但依旧使局部变量,所以使用全局变量时,在函数内部不需要去定义它,直接使用就可以,但如果想要在函数内修改全局变量的值,此时就需要使用 global 关键字在函数中去声明修改这个全局变量 在函数中有一个经典案例就是自制一个ATM,具有查询余额,存款,取款,退出功能,具体实现过程如下

sum=5000000
def check_sum():
    print(f"您的余额为:{sum}!")
def put_in(money):
    global sum
    sum+=money
    print(f"您存款{money}元成功!")
    print(f"您的余额为:{sum}!")
def get_out(money):
    global sum
    if sum>=money:
        sum-=money
        print(f"您取款{money}元成功!")
        print(f"您的余额为:{sum}!")
    else:
        print("您的余额不足")
def End():
    print("请收好您的银行卡,欢迎您下次到来!")
    return False
flag=True
while flag:
    print("------------主菜单------------")
    print("你好,欢迎您使用ATM,请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t[输入2]")
    print("取款\t[输入3]")
    print("退出\t[输入4]")
    print("请输入您的选择:")
    num=int(input())
    if num==1:
        check_sum()
    elif num==2:
        put_in(int(input("请输入您的存款余额:")))
    elif num==3:
        get_out(int(input("请输入您的取款余额:")))
    elif num==4:
        End()
        flag=False
    else:
        print("您的选择有误,请重新输入")