函数的定义
函数:是组织好的,可重复使用的,用来实现特定功能的代码段。
- 作用:提高程序的复用性,减少重复性代码,提高开发效率
函数的定义和调用

Python 函数是组织好的可重复使用的代码段,用于实现特定功能。内容涵盖函数定义、参数传递(位置、关键字、缺省、不定长)、返回值(含 None 类型)、作用域(局部与全局)、嵌套调用及回调函数等核心概念。通过 ATM 案例演示实际应用场景,并介绍匿名函数(lambda)的定义与用法。

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


# 函数的定义
def my_len(data):
length = 0
for i in data:
length += 1
return length
# 函数的调用
print(f"字符串的长度是:{my_len('hello world~~')}")


如果函数没有使用 return 语句返回数据,那么函数有返回值吗?

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


函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。


变量作用域指的是变量的作用范围 (变量在哪里可用,在哪里不可用)
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效

testA 函数内部的变量,在函数外部访问则立即报错所谓全局变量,指的是在函数体内、外都能生效的变量

使用 global 关键字可以在函数内部声明变量为全局变量,如下所示
# 函数内的局部变量与全局变量重名时,局部变量视为独立的临时变量,不影响全局变量
num = 100
def testA():
num = 200
print(num)
def testB():
print(num)
testA()
testB()

# 如果函数内需要修改全局变量的值,需要使用 global 关键字
num = 100
def testA():
global num
num = 200
print(num)
def testB():
print(num)
testA()
testB()





print("欢迎来到 ATM 机")
name = input("请输入您的姓名")
money = 50000
def menu():
"""
主菜单,提示用户操作
:return: 用户输入的数字
"""
print("--------------------主菜单--------------------")
print(f"{name},您好,欢迎来到 ATM 机,请选择操作:")
print(f"查询余额\t[输入 1]")
print(f"存款\t\t[输入 2]")
print(f"取款\t\t[输入 3]")
print(f"退出\t\t[输入 4]")
return int(input("请输入您的选择:"))
def query_money(flag):
""" 余额查询
:param flag: 是否显示标题
:return: None
"""
if flag:
print("--------------------查询余额--------------------")
print(f"{name}您好,您的余额是:{money}元")
def add_money():
""" 用户存款
:return: None
"""
global money
print("--------------------存款--------------------")
num = int(input(f"{name},您要存入多少元:"))
money += num
print(f"{name},您存款{num}元成功")
query_money(False)
def take_money():
""" 用户取款
:return:
"""
global money
print("--------------------取款--------------------")
num = int(input(f"{name},您要取出多少元:"))
if num > money:
print(f"{name},您的余额不足{num}元")
query_money(False)
else:
money -= num
print(f"{name},您取款{num}元成功")
query_money(False)
while True:
# 主菜单
user_options_num = menu()
if user_options_num == 1:
query_money(True)
elif user_options_num == 2:
add_money()
elif user_options_num == 3:
take_money()
else:
print("欢迎下次光临,再见!")
break
如果一个函数要有多个返回值,该如何书写代码?

def func():
# 返回 (1,2) 的元组
return 1, 2
# 自动解包
x, y = func()
print(x, y)
# 接收元组
z = func()
print(z)

位置参数:调用函数时根据函数定义的参数位置来传递参数

注意:传递的参数和定义的参数的顺序及个数必须一致
关键字参数:函数调用时通过'键=值'形式传递参数。
作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值

不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数 (不传参也可以) 的场景。

传进的所有参数都会被 args 变量收集,它会根据传进参数的位置合并为一个元组 (tuple),args 是元组类型

参数是'键=值'形式的情况下,所有的'键=值'都会被 kwargs 接受,同时会根据'键=值'组成字典。
""" 不定长参数 """
# print() 函数的第一个形参,是一个*args 不定长参数
# 不定长参数的后面,必须通过关键字传参
print("你好", "我好", "大家好", end="\t")
# 多种形式的形参
def func2(name, age, *args, **kwargs):
print(f"普通参数:{name},{age}")
print(f"元组收集参数:{args}")
print(f"字典收集参数:{kwargs}")
func2("周杰伦", 11, 1, 2, 3, 4, 5, id=1, gender=2)

把函数作为参数进行传递


函数的定义中
""" 匿名函数 """
def func(callback):
result = callback(1, 2)
print(result)
# 这些函数只用一次,不需要重复使用,使用 lambda 快速实现
func(lambda x, y: x + y)
func(lambda x, y: x - y)
func(lambda x, y: x * y)
func(lambda x, y: x / y)
# 如果要重复利用,可以使用变量接收
# 变量名就是一个带名字的函数
add = lambda x, y: x + y
print(add(2, 2))

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online