1-函数的概念
总结:
- 函数是组织好的、可重复使用的、用来实现特定功能的代码段
- 使用函数的好处:
- 将功能封装在函数内,可供随时随地重复使用
- 提高代码的复用性,减少重复代码,提高开发效率
2-函数的定义
总结:
- 函数的定义语法
def 函数名(传入参数): 函数体 return 返回值
- 函数的使用步骤
- 先定义函数
- 再调用函数
- 函数的注意事项
- 参数不需要,可以省略
- 返回值不需要,可以省略
3-函数的参数
示例:
# 定义一个实现两值相加的函数
def add(x, y):
result = x + y
print(f"{x} + {y}的和为{x + y}")
# 调用函数并传参
add(2, 3)
总结:
- 函数传入参数作用是为了在函数运行的时候,接收外部传入的数据
- 注意事项:
- 函数定义中的参数,称之为形式参数
- 函数调用中的参数,称之为实际参数
- 函数的参数数量不限,使用英文逗号分隔开
- 传入参数的时候,实参要和形式参数一一对应,逗号隔开
# 先定义函数
def check_health(x):
if x <= 37.5:
print("请出示健康码以及72小时核酸证明,并配合测量体温!")
print(f"体温测量中,您的体温是:{x}度,体温正常请进")
else:
print("请出示健康码以及72小时核酸证明,并配合测量体温!")
print(f"体温测量中,您的体温是:{x}度,需要隔离")
# 获取用户的温度
x = float(input("请输入您的体温:"))
# 再调用函数
check_health(x)
4-函数的返回值
示例:
# 先定义函数
def add(x, y):
result = x + y
print(result)
return result
print('xxxxxx')
# 再调用函数
res = add(2, 3)
print(res)
总结:
- 函数的返回值是函数在执行完成后,返回给调用者的结果
- 返回值的应用语法:使用关键字return来返回结果
- 注意:函数体在遇到return关键字之后就结束了,写return后的代码不会执行
None示例:
# 定义函数判断是否未成年
def check_age(age):
if age > 18:
return "success"
else:
return None
# 调用函数
res = check_age(19)
print(res)
# 根据函数结果判断是否让进入
# not None 为 True
if not res:
print("您未成年不能进入该场所!!!")
总结:
- None是类型‘NoneType’的字面量,用于表示:空的、无实际意义的
- 函数如何返回None:
- 不使用return语句时即返回None
- 主动返回:return None
- 使用场景
- 设置函数返回值
- if判断
- 变量定义
5-函数说明文档
示例:
# 定义函数
def add(x, y):
"""
这是一个两数相加的函数
:param x: 这是第一个相加的数值
:param y: 这是第二个相加的数值
:return: 返回两数之和
"""
result = x + y
return result
# 调用函数
res = add(2, 3)
总结:
- 函数说明文档是为方便对函数整体功能的解释,尤其是对参数和返回值的解释说明
- 调用函数时,可以将鼠标光标悬浮在函数名上,就可以看到函数说明文档的注释,使用我们使用函数
6-函数的分类
def add():
"""
这是一个无参无返回值的函数
:return: None
"""
print("这是一个无参无返回值的函数")
add()
def add(x, y):
"""
这是一个有参无返回值的函数
:param x: 这是第一个参数
:param y: 这是第二个参数
:return: None
"""
print("这是一个有参无返回值的函数", x + y)
add(2, 3)
def add():
"""
这是一个无参有返回值的函数
:return: 返回一个固定的字符串
"""
print("这是一个无参有返回值的函数")
return "哈哈"
print(add())
def add(x, y, z):
"""
这是一个有参有返回值的函数
:param x: 这是相加的第一个数值
:param y: 这是相加的第二个数值
:param z: 这是相加的第三个数值
:return: 三数之和
"""
print("这是一个有参有返回值的函数")
return x + y + z
print(add(1, 2, 3))
调试:
7-变量的作用域
示例:
# 先定义函数
def test1():
# 局部变量
# global关键字可以将局部变量声明为全局变量
global num
num = 10
# 使用局部变量
# 就近原则:如果局部变量和全局变量同名,函数内优先使用局部变量
print(num)
def test2():
print(num)
if __name__ == '__main__':
# 全局变量
num = 100
print(num) # 100
# 调用函数
test1()
test2()
print(num)
总结:
- 局部变量:只能在自定义的函数内的访问的变量
- 全局变量:可以在任意函数内外都能访问的变量
- 就近原则:如果局部变量与全局变量同名,函数内优先局部变量
- global关键字可以将自定义函数中的局部变量声明为全局变量
8-综合案例
- 需求分析
- 定义一个全局变量:money,用来记录银行卡余额(默认5000000)
- 定义一个全局变量:name,用来记录客户姓名(启动程序时输入)
- 定义如下的函数:
- 查询余额函数:query_balance()—打印变量money,并调用主菜单函数
- 存款函数:save_money()—输入存钱数,与money累加,并调用主菜单函数
- 取款函数:get_money()—输入取钱数,与money相减,并调用主菜单函数
- 主菜单函数:main_menu()—一直循环(while True)根据用户输入选择项,调用对应的函数(查询(query_balance())、存款、取款)或者直接退出(break)
- 要求:
- 程序启动后要求输入客户姓名
- 查询余额、存款、取款后都会返回主菜单
- 存款、取款后,都应显示一下当前余额
- 客户选择退出或输入错误,程序会退出,否则一直运行
# 定义全局变量
money = 500000
name = ""
def query_balance():
"""
余额查询
:return: None
"""
print(f"{name}, 您好,您的余额为:{money}")
# main_menu()
def save_money():
"""
存款函数
:return: None
"""
global money
# 从键盘录入存款金额
amount = float(input("请输入您的存款金额:"))
if amount <= 0:
print("存款金额必须大于0")
else:
money += amount
print(f"{name}, 您好,您的余额为:{money}")
# main_menu()
def get_money():
"""
取款函数
:return: None
"""
global money
# 从键盘录入取款的金额
amount = float(input("请输入您的取款金额:"))
if amount <= 0:
print("取款金额必须大于0")
else:
money -= amount
print(f"{name}, 您好,您的余额为:{money}")
# main_menu()
def main_menu():
"""
主菜单函数,一直循环
:return: None
"""
while True:
print('-' * 15 + '主菜单' + '-' * 15)
print("查询余额:【输入1】")
print("存 款:【输入2】")
print("取 款:【输入3】")
print("退 出:【输入4】")
op_choice = input("请输入您的选择:")
# 根据用户的选择调用对应的函数
if op_choice == '1':
query_balance()
elif op_choice == '2':
save_money()
elif op_choice == '3':
get_money()
else:
break
if __name__ == '__main__':
"""
主程序入口
"""
name = input("请输入您的姓名:")
print(f"{name}您好,欢迎使用银行系统!!!")
main_menu()
9-函数返回多值
return 值1, 值2, 值3…: 函数默认将多个值封装在一个元组中返回
# 1-定义函数
def show():
return 1, 2, 3
# 2-调用函数
t = show()
print(t, type(t))
# 直接拆包接收
a, b, c = show()
print(a, b, c)
10-函数多种传参
示例:
- 位置、关键字、缺省参数
# 1-定义函数
def show1(name, age, height):
print(f"姓名: {name}, 年龄: {age}, 身高: {height}")
# 2-1调用函数,使用位置传参
# 注意:位置传参实参和形参的个数和顺序必须一致
show1(18, '张三', 183)
# 2-2调用函数,使用关键字传参
# 注意:关键字传参:k=v,要求形参和实参个数必须一致,但是顺序无所谓
# 如果位置传参和关键字传混用,位置参数必须在关键字参数前面
show1(age=18, height=183, name='李四')
show1('张三', age=18, height=183)
# 3-定义包含缺省参数的函数
def show2(name, age=18, height=188.8):
print(f"姓名: {name}, 年龄: {age}, 身高: {height}")
# 3-1 调用函数,使用缺省参数传参
show2('张三')
show2('张三', 88)
show2('张三', 88)
show2('张三', height=158.6)
- 不定长参数
# 1-1定义可变参数函数
def show1(*args):
print(args)
# 1-2 调用可变参数函数
show1(1)
show1(1, 2)
show1(1, 2, 'a')
# 2-1 定义关键字传参的不定长参数
def show2(**kwargs):
print(kwargs)
# 2-2 调用关键字传参的不定长参数的函数
show2(name='张三')
show2(name='张三', age=18)
show2(name='张三', age=18, gender='女')
总结:
- 位置参数:调用函数时,要求实参与形参的顺序和个数必须保持一致
- 关键字参数:调用函数时,k=v方式传参(形参=实参),只要求个数一致,顺序无所谓,但是如果位置和关键字参数混用,位置参数必须在关键字参数前面
- 缺省参数:定义函数时,直接给形参设置默认值(形参=默认值),调用函数时可以省略不传实参
- 可变参数:定义函数时,使用*args接收位置传参的内容,**kwargs接收关键字传参的内容
- 需求:定义一个函数实现能对任意个数字进行
-1 定义关键字传参的不定长参数
def show2(**kwargs):
print(kwargs)
2-2 调用关键字传参的不定长参数的函数
show2(name=‘张三’)
show2(name=‘张三’, age=18)
show2(name=‘张三’, age=18, gender=‘女’)
总结:
> - 位置参数:调用函数时,要求实参与形参的顺序和个数必须保持一致
> - 关键字参数:调用函数时,k=v方式传参(形参=实参),只要求个数一致,顺序无所谓,但是如果位置和关键字参数混用,位置参数必须在关键字参数前面
> - 缺省参数:定义函数时,直接给形参设置默认值(形参=默认值),调用函数时可以省略不传实参
> - 可变参数:定义函数时,使用*args接收位置传参的内容,**kwargs接收关键字传参的内容
- 需求:定义一个函数实现能对任意个数字进行
标签:return,函数,Python,基础,参数,print,def,name
From: https://blog.csdn.net/qq_51504246/article/details/142410759