定义与用途
def 函数名(传入参数): 函数体 return 返回值 先定义函数,后调用函数 参数、返回值不需要可以省略
一般来说,要重复的写一段代码,可以将其写成函数
举个例子,我们要判断一系列数是否达到一定条件,可以使用函数
# 函数的定义
def check(num):
print("欢迎,请输入体温")
if num <= 37:
print(f"体温是{num}度,请进")
else:
print(f"体温{num}度,需要隔离")
# 函数的使用
check(36)
check(37)
check(37.5)
check(36.8)
就不用一遍遍的书写判断语句了 。
返回值
与Java和C语言相比,我认为Python的函数很便捷,因为不用定义函数返回值的类型,也就是说,这种写法在Python中是可行的
def add(a, b):
if a > 5:
result = a + b
return result
else:
return False
print(f"{add(10, 20)}")
print(f"{add(3, 20)}")
None
None用于声明没有初始内容的变量,没有return语句则默认返回None,None可以看作False
def say():
print("hello")
result = say()
print(result)
print(type(result))
def check(age):
if age > 8:
return "Success"
else:
return None
result = check(6)
if not result:
print("不可进入")
# None用于声明无初始内容的变量
# 无return则None
# None 可以看作 False
文档说明
在老wolf参与的实际项目开发中,对于函数的参数常常有一个文件说明,例如:
def select(a, b, c):
"""
:param a:
:param b:
:param c:
:return:
"""
这样就能让参与项目的朋友看明白这几个参数分别是什么意思
以PyCharm专业版举例,在打出def select(a,b,c):后换行,再打三次"再换行就可以自动生成一个文档说明。
嵌套
def fun_b():
print("2")
def fun_a():
print("1")
fun_b()
print("3")
fun_a()
运行结果为
1
2
3
作用域
def a():
num = 100
print(num)
a() # 输出: 100
# 出了函数就无法使用 num
def b():
global good
good = 200
print(good)
b() # 输出: 200
print(good) # 输出: 200
应用举例
money = 500000
name = None
name = input("请输入您的姓名")
def query(show_header):
if show_header:
print("查询余额")
print(f"{name},您好,您的余额剩余{money}元")
def saving(num):
global money
money += num
print(f"{name},您好,您存款{num}元成功")
query(False)
def get_money(num):
global money
money -= num
print("取款")
print(f"{name},您好,您取款{num}元成功")
query(False)
def main():
print("主菜单")
print(f"{name},您好,欢迎来到银行ATM,请操作:")
print("查询余额\t【输入1】")
print("存款\t\t【输入2】")
print("取款\t\t【输入3】")
print("退出\t\t【输入4】")
return input("请输入您的选择")
while True:
keyboard_input = main()
if keyboard_input == "1":
query(True)
continue
elif keyboard_input == "2":
num = int(input("请输入想存入的钱:"))
saving(num)
continue
elif keyboard_input == "3":
num = int(input("您想要取出多少钱:"))
get_money(num)
continue
else:
print("程序退出了")
break
多返回值
def test():
return 1, 2, True
x, y, z = test()
print(x)
print(y)
print(z)
多种传参方式
其中要特别说明的是,Python支持不定长数量的参数传入
def user(name, age, gender):
print(f"您的名字是{name},年龄是{age},性别是{gender}")
# 关键字传参
user(name="fhl", age="21", gender="male")
# 可以不按顺序
user(age=21, gender="male", name="fhl")
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user("fhl", 21, "male")
# 默认值必须在最后
def haha(name, age, gender="male"):
print(f"您的名字是{name},年龄是{age},性别是{gender}")
# 位置传递
def info(*args):
print(args)
info('fhl')
info('fhl', 21)
info(21, 'fhl')
# 关键字传递
def le(**kwargs):
print(kwargs)
le(name='fhl', age=21, id=212062074)
# 不定长-位置不定长
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def hahaha(*args):
print(f"args参数类型是:{type(args)},内容是{args}")
hahaha(1, 2, 3, '小明', 'male')
# 不定长-关键字不定长
def hahahaha(**kwargs):
print(f"args参数类型是:{type(kwargs)},内容是:{kwargs}")
hahahaha(name='小明',gender='男',addr='北京',id=212)
匿名函数
# 函数作为参数传递
def test(compute):
result = compute(1, 2)
print(type(compute))
print(result)
def compute(x, y):
return x + y
test(compute)
# 这叫代码的执行逻辑的传入
lambda匿名函数
def test(compute):
result = compute(1, 2)
print(result)
test(lambda x, y: x + y)
# lambda 传入参数:函数体(一行代码)
# lambda没有办法写多行
# 写一次只能用一次
def add(x, y):
return x + y
test(add)
test(lambda x, y: x + y)
# 用于临时构建一个函数,只用一次的场景