【Python】函数

Python函数

文章目录

      • Python函数
    • @[toc]
        • 1.函数初识
        • 2.函数的定义
        • 3.函数的传入参数
        • 4.函数的返回值
        • 5.函数说明文档
        • 6. 函数的嵌套调用
        • 7.变量的作用域
        • 8.ATM机实例
        • 声明

1.函数初识
  • 函数:是组织好的,可重复使用的,用来实现特定功能的代码段。

先来感受一下

# 计算圆的面积,Π取3.14

def circle_area(r):
    S = 3.14 * r ** 2
    print(f"半径为{r}时,圆的面积是:{S}")


circle_area(3)
circle_area(2)
circle_area(1)

# 输出结果

'''
半径为3时,圆的面积是:28.26
半径为2时,圆的面积是:12.56
半径为1时,圆的面积是:3.14
'''
# 计算字符串的长度

def string_len(data):
    i = 0
    for x in data:
        i += 1
    print(f"该字符串是:{data},长度为:{i}")


string_len("1253637")
string_len("1212qfafa 3637")

# 输出结果

'''
该字符串是:1253637,长度为:7
该字符串是:1212qfafa 3637,长度为:14
'''

从上面例子可以看出,使用函数,可以得到一个针对特定需求、可供重复利用的代码段以提高程序的复用性,提高开发效率。


2.函数的定义
  • 函数的定义语法:基本格式如下。
'''
def 函数名(传入参数):
    函数体
    return 返回值
'''
  • 注意:先定义,后调用。
  • 练习1:公园欢迎语,要求调用后输出:欢迎您来到公园!(换行)祝您旅途愉快!
# 计算字符串的长度

def hello():
    print("欢迎您来到公园\n祝您旅途愉快")


hello()


# 输出结果
'''
欢迎您来到公园
祝您旅途愉快
'''

我们可以发现,某些场景下,函数的参数可以不需要,返回值也可以不需要。


3.函数的传入参数

以两数之和函数的例子来说明。

# 两数之和函数

def add_2(x, y):
    result = x + y
    print(f"{x}+{y}的值是:{result}")


add_2(-1, 23)

# 输出结果
'''
-1+23的值是:22
'''

在上面这个函数的定义中,提供的x和y,称之为形式参数(形参),表示函数声明将要使用2个参数,参数之间使用逗号进行分隔。函数调用中,提供的-1和23,称之为实际参数(实参),表示函数执行时真正使用的参数值。传入的时候,按照顺序传入数据,使用逗号分隔。

传入参数的数量是不受限制的。可以不使用参数,也可以使用任意N个参数。传入参数的时候,要和形式参数一一对应,逗号隔开。

  • 练习1:公园门票价格判定系统。
# 公园门票系统根据年龄(是否成年)提示收费(20元)与不收费

def ticket_money(age):
    print("欢迎来到公园!")
    if age >= 18:
        print(f"您的年龄为{age},已成年,需要收费20元")
    else:
        print(f"您的年龄为{age},未成年,无需购买门票")


ticket_money(20)
ticket_money(18)
ticket_money(14)

# 输出结果
'''
欢迎来到公园!
您的年龄为20,已成年,需要收费20元
欢迎来到公园!
您的年龄为18,已成年,需要收费20元
欢迎来到公园!
您的年龄为14,未成年,无需购买门票
'''

4.函数的返回值

还是以两数求和函数的例子来说明。

# 两数之和函数


def add_2(x, y):
    result = x + y
    return result
  

a = add_2(1, 2)
print(a)

# 输出结果
'''
3
'''

上述代码定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者。所以,变量a接收到了函数的执行结果。

所谓”返回值”,就是程序中函数被调用后,最后给调用者的结果。

  • 注意点:函数内,写在return后面的语句将被被执行。

  • None类型:在 Python 中,None 是一个特殊的字面量,其类型为 NoneType 。当函数没有使用 return 语句返回数据时,实际上会返回 None 这个字面量,表示函数没有返回有实际意义的内容,即返回了空的意思。None 用于代表空值、无具体值或无实际意义的状态。

# 无return语句返回数据情形示例

def hello():
    print("hello!")


result = hello()
print(result, type(result))

# 输出结果
'''
hello!
None 
'''

当然,写return也是可以的,在最后写return None就可以了。None类型有以下几个应用:

1.在if判断中,None等同于False,—般用于在函数中主动返回None,配合if判断做相关处理。示例如下:

# 判断是否成年,成年可以进入KTV,否则不可以

def check_age(age):
    if age >= 18:
        return "Success"
    else:
        return None

real_age = int(input("请输入年龄:"))
result = check_age(real_age)

if not result:
    print("是未成年,不可进入KTV")
else:
    print("已成年,可以进入KTV")
    
# 输出结果
'''
请输入年龄:16
是未成年,不可进入KTV
'''

2.用于声明无内容的变量上。定义变量,但暂时不需要变量有具体值,可以用None来代替。


5.函数说明文档
  • 作用:对函数进行说明解释,帮助开发者更好地理解函数的功能。
  • 定义语法:在 Python 中,在函数定义后,紧接着用三引号(单或双均可)包裹说明内容。其中,:param 用于解释函数参数,说明每个参数的含义;:return 用于解释函数返回值,说明返回值的类型和意义 。示例如下:
'''
def func(x, y):
    """
    函数说明
    :param x: 参数x的说明
    :param y: 参数y的说明
    :return: 返回值的说明
    """
    函数体
    return 返回值
'''

输入一对三个双引号后,再按下回车键,以下格式会自动弹出:

def add_2(x, y):
    """
    
    :param x: 
    :param y: 
    :return: 
    """
    result = x + y
    return result

6. 函数的嵌套调用

函数嵌套调用指的是一个函数里面又调用了另外一个函数。一个示例如下。

def fun_1(a):
    """
    求一个数的平方
    :param a: 这个数
    :return: 这个数的平方
    """
    result_1 = a ** 2
    return result_1


def fun_2(x, y):
    """
    求第一个数的第二个数的平方次方
    :param x: 第一个数
    :param y: 第二个数
    :return: 第一个数的第二个数的平方次方
    """
    result_2 = x ** fun_1(y)
    return result_2


print(fun_2(2, 2))
print(fun_2(3, 2))

# 输出结果
'''
16
81
'''

7.变量的作用域
  • **定义:**变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用),主要分为全局变量和局部变量。以下面这个例子来说明。
a = 2


def func_1():
    b = 1
    print(b)


def func_2():
    print(a)


def func_3():
    print(a + 1)

func_1()
func_2()
func_3()

# 输出结果
'''
1
2
3
'''

其中a是全局变量,b是局部变量,若代码在最后加上:print(b),则会显示:name ‘b’ is not defined。

  • global关键字:使用global关键字可以在函数内部声明变量为全局变量。以下面这个例子说明。
a = 2


def func_1():
    b = 1
    print(b)


def func_2():
    print(a)


def func_3():
    global a
    a = 3
    print(a)


def func_4():
    print(a + 1)


func_1()
func_2()
func_3()
func_4()


# 输出结果
'''
1
2
3
4 
'''

代码执行的过程如下:

  1. 定义全局变量 a并赋值为2。
  2. 调用 func_1,在函数内部创建局部变量b并打印1。
  3. 调用 func_2,打印全局变量a的值,此时a为2。
  4. 调用 func_3,由于global a声明,修改全局变量a的值为3并打印3。
  5. 调用 func_4,打印全局变量a加1的结果,即4。

8.ATM机实例

使用 Python 语言编写一个模拟银行 ATM 机功能的程序。该程序需要实现以下功能:

  1. 预设初始账户余额为 1000000 元,正确的账户密码为 123456。程序开始运行时,提示用户输入密码。
  2. 如果用户输入的密码正确,则显示以下操作选项:
    • 查询余额 【输入 1】
    • 存款 【输入 2】
    • 取款 【输入 3】
    • 退出 【输入 4】
      然后提示用户输入选择的操作编号。
  3. 根据用户的选择,调用相应的函数来实现功能:
    • 当用户选择1时,调用check_money函数,该函数用于显示用户当前的账户余额。
    • 当用户选择 2时,调用deposit函数,该函数要求用户输入存款金额,并在屏幕上显示存款成功的提示信息以及更新后的账户余额。
    • 当用户选择 3时,调用withdraw_cash函数,该函数要求用户输入取款金额,并在屏幕上显示取款成功的提示信息以及更新后的账户余额。
    • 当用户选择4时,调用to_exit函数,该函数仅在屏幕上显示 “退出” 的相关提示信息。
  4. 如果用户输入的密码错误,则在屏幕上显示 “很抱歉!密码错误”,程序结束。
  5. 如果用户输入的操作编号不是 1、2、3、4中的任何一个,则在屏幕上显示 “选择错误”。
money = 1000000
password_right = 123456
password = int(input("请输入您的密码:"))


# 查询余额
def check_money():
    print("------------查询余额------------")
    print(f"您好,您当前的余额还有:{money}元")


# 存款
def deposit():
    print("-------------存款-------------")
    x_deposit = int(input("请输入您需要存入的金额:"))
    money_deposit_now = money + x_deposit
    print(f"您当前存入{x_deposit}元,存款成功!")
    print(f"您目前余额为{money_deposit_now}元")


# 取款
def withdraw_cash():
    print("-------------取款-------------")
    x_withdraw = int(input("请输入您需要取出的金额:"))
    money_withdraw_now = money - x_withdraw
    print(f"您当前取出{x_withdraw}元,取款成功!")
    print(f"您目前余额为{money_withdraw_now}元")


# 退出
def to_exit():
    print("-------------退出-------------")



if password == 123456:
    print("欢迎您来到本银行ATM,请选择您需要的服务:")
    print("查询余额 \t【输入1】")
    print("存款 \t【输入2】")
    print("取款 \t【输入3】")
    print("退出 \t【输入4】")
    print("请输入进的选择:", end="")
    x = int(input(""))
    if x == 1:
        check_money()
    elif x == 2:
        deposit()
    elif x == 3:
        withdraw_cash()
    elif x == 4:
        to_exit()
    else:
        print("选择错误")
else:
    print("很抱歉!密码错误")

    
# 输出结果
'''
请输入您的密码:123456
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 	【输入1】
存款 	【输入2】
取款 	【输入3】
退出 	【输入4】
请输入进的选择:2
-------------存款-------------
请输入您需要存入的金额:30000
您当前存入30000元,存款成功!
您目前余额为1030000元
'''

虽然完成了这个题目,但是这个代码对于ATM机的实际应用来说有着明显的缺陷:

  1. 存款和取款函数中计算的临时余额(money_deposit_now、money_withdraw_now)未更新全局变量 money,导致后续操作仍基于初始余额。
  2. 用户只能进行一次操作,操作完成后程序即结束,无法多次选择操作。

接下来进行改进:

money = 1000000
password_right = 123456
password = int(input("请输入您的密码:"))


# 查询余额
def check_money():
    print("------------查询当前余额------------")
    print(f"您好,您当前的余额还有:{money}元")


# 存款
def deposit():
    print("-------------存款-------------")
    x_deposit = int(input("请输入您需要存入的金额:"))
    global money
    money += x_deposit
    print(f"您当前存入{x_deposit}元,存款成功!")
    check_money()


# 取款
def withdraw_cash():
    print("-------------取款-------------")
    x_withdraw = int(input("请输入您需要取出的金额:"))
    global money
    money -= x_withdraw
    print(f"您当前取出{x_withdraw}元,取款成功!")
    check_money()


# 主菜单
def menu():
    print("欢迎您来到本银行ATM,请选择您需要的服务:")
    print("查询余额 \t【输入1】")
    print("存款 \t【输入2】")
    print("取款 \t【输入3】")
    print("退出 \t【输入4】")
    print("请输入进的选择:", end="")


if password == 123456:
    while True:
        menu()
        x = int(input(""))
        if x == 1:
            check_money()
        elif x == 2:
            deposit()
        elif x == 3:
            withdraw_cash()
        else:
            print("ATM退出")
            break
else:
    print("密码错误")


# 输出结果
'''
请输入您的密码:123456
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 	【输入1】
存款 	【输入2】
取款 	【输入3】
退出 	【输入4】
请输入进的选择:2
-------------存款-------------
请输入您需要存入的金额:12000
您当前存入12000元,存款成功!
------------查询当前余额------------
您好,您当前的余额还有:1012000元
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 	【输入1】
存款 	【输入2】
取款 	【输入3】
退出 	【输入4】
请输入进的选择:3
-------------取款-------------
请输入您需要取出的金额:200000
您当前取出200000元,取款成功!
------------查询当前余额------------
您好,您当前的余额还有:812000元
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 	【输入1】
存款 	【输入2】
取款 	【输入3】
退出 	【输入4】
请输入进的选择:4
ATM退出
'''

改进的点如下:

  1. 使用global关键字更新全局变量:在deposit和withdraw_cash函数中使用global money声明,对全局变量money进行更新,使后续操作基于最新余额。
  2. 复用函数显示余额:在deposit和withdraw_cash函数中调用check_money函数显示余额,减少代码重复,提高可维护性。
  3. 提供多次操作机会:使用while True循环,只要用户不选择退出,就能多次选择不同操作。
  4. 代码结构优化:将主菜单显示逻辑封装到 menu函数中,增强可维护性。
声明

本笔记由本人学习【黑马程序员】课程及相关资料整理而来,代码均为自行创作。

你可能感兴趣的:(python,开发语言,学习)