10.函数

函数

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

为了得到一个针对特定需求、可供重复使用的代码段,提高程序的复用性,减少重复性的代码,提高开发效率

# 例
name = "I love python"
length = len(name)
print(length)
13
# 不使用len函数,统计字符串长度
name1 = "I love python"
count = 0
for i in name1:
    count += 1
print(count)

name2 = "Ilovepython"
count = 0
for i in name2:
    count += 1
print(count)

# 函数
def my_len(data):
    count = 0
    for i in data:
        count += 1
    print(f"{data}的长度是 {count}")

my_len(name1)
my_len(name2)
13
11
I love python的长度是 13
Ilovepython的长度是 11

函数的定义

def 函数名(传入参数):

  函数体(函数要做的事情)

  return 返回值

函数的调用:函数名(参数)

注意:

  • 参数如不需要,可以省略
  • 返回值如果不需要,可以省略
  • 函数必须先定义后使用
def say_hi():
    print("hi python")

say_hi()
hi python

函数的参数

函数定义中提供的多个参数,称之为:形式参数(形参),表示函数声明将要使用2个参数

  • 参数之间使用逗号进行分隔

函数调用中,提供的实际传入参数,称之为:实际参数(实参),表示函数执行时真正使用的参数值

  • 传入的时候,按照顺序传入数据,使用逗号分隔

传入参数的数量是不受限制的

  • 可以不使用参数
  • 也可以使用任意N个参数
# 传入参数
def add(x,y):
    result = x + y
    print(f"{x} + {y}的结果是:{result}")
add(1,2)
1 + 2的结果是:3
# 案例 查体温
def check(num):
    print("请配合检查体温!")
    if num <= 37.5:
        print(f"你的体温{num}度,正常!")
    else:
        print(f"你的体温{num}度,不正常!")
check(38)
check(37.2)
请配合检查体温!
你的体温38度,不正常!
请配合检查体温!
你的体温37.2度,正常!

函数的返回值

  • 所谓“返回值”,就是程序中函数完成事情后,最后给调用者的结果
  • 函数体里遇到return后就结束了,所以写在return后的代码不会执行
  • 无返回值的函数,实际上是返回了: None 这个字面量

None 作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景

  • 用在函数无返回值上
  • 用在if判断上,None等于False
  • 用于声明无内容的变量上
def add(x,y):
    result = x + y
    return result

add(1,2)
3
def add(x,y):
    result = x + y
    #return result
    #return None    # 也可以主动返回None

print(add(1,2))
None
def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None

print(check_age(16))
print(check_age(19))

result = check_age(16)
if not result:
    print("未成年")
None
SUCCESS
未成年

函数的说明文档

函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较差,可以给函数添加说明文档,辅助理解次函数的作用

语法如下:

def func(x, y)

  """

  函数说明

  :param x: 形参x的说明

  :param y: 形参y的说明

  :return : 返回值的说明

  """

  函数体

  return 返回值

通过多行注释的形式,对函数进行说明解释

  • 注释内容写在函数体之前
def add (x, y):
    """
    add函数可以接收2个参数,进行2数相加的功能
    :return: 返回值是2数相加的结果
    """
    result = x + y
    print(f"两数相加结果是:{result}")
    return result

r = add(3, 5)
print(r)
两数相加结果是:8
8

函数的嵌套

函数的嵌套调用指的是一个函数里面又调用了另外一个函数

def func_b():
    print("---2---")

def func_a():
    print("---1---")
    func_b()
    print("---3---")
func_a()
---1---
---2---
---3---

函数中变量的作用域

局部变量:定义在函数体内部的变量,即只在函数体内部生效

全局变量:在函数体内、函数体外都能使用的变量,变量定义在函数体外部

global关键字

  • global 变量名 可以在函数内部声明变量为全局变量
def testa():
    num = 1
    print(num)
testa()
#print(num)
1
num = 1
def testb():
    num = 20   # 局部变量
    print(num)
testb()
print(num)
20
1
num = 1
def testb():
    global num   # 设置内部定义的变量为全局变量
    num = 20
    print(num)
testb()
print(num)
20
20

函数综合案例

money = 50000
name = None

name = input("请输入你的名字:")
def check_money(show_header):
    if show_header:
        print(f"-----------查询余额-------------")
    print(f"{name},您好,您的余额剩余:{money}元")

def saving(money_num):
    global money
    money += money_num
    print("-------------存款---------------")
    print(f"{name},您好,您存款{money_num}元成功。")
    check_money(False)

def get_money(money_num):
    global money
    money -= money_num
    print("-------------取款---------------")
    print(f"{name},您好,您取款{money_num}元成功。")
    check_money(False)

def main():
    print("------------主菜单--------------")
    print(f"{name},您好,很高兴为你服务,请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t[输入2]")
    print("取款\t[输入3]")
    print("退出\t[输入4]")
    return input("请输入您的选择:")

while True:
    keyboard_input = main()
    if keyboard_input == "1":
        check_money(True)
        continue
    elif keyboard_input == "2":
        money_num = int(input("您想存多少钱?请输入:"))
        saving(money_num)
        continue
    elif keyboard_input == "3":
        money_num = int(input("您想取多少钱?请输入:"))
        get_money(money_num)
        continue
    else:
        print("操作结束")
        break
------------主菜单--------------
tang,您好,很高兴为你服务,请选择操作:
查询余额    [输入1]
存款  [输入2]
取款  [输入3]
退出  [输入4]
-----------查询余额-------------
tang,您好,您的余额剩余:50000元
------------主菜单--------------
tang,您好,很高兴为你服务,请选择操作:
查询余额    [输入1]
存款  [输入2]
取款  [输入3]
退出  [输入4]
-------------存款---------------
tang,您好,您存款50000元成功。
tang,您好,您的余额剩余:100000元
------------主菜单--------------
tang,您好,很高兴为你服务,请选择操作:
查询余额    [输入1]
存款  [输入2]
取款  [输入3]
退出  [输入4]
-------------取款---------------
tang,您好,您取款20000元成功。
tang,您好,您的余额剩余:80000元
------------主菜单--------------
tang,您好,很高兴为你服务,请选择操作:
查询余额    [输入1]
存款  [输入2]
取款  [输入3]
退出  [输入4]
操作结束