# 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,函数能提高应用的模块性和代码的重复利用率
# 定义函数:
def: 关键字def (defined缩写)
python自动格式化快捷键:ctrl+alt+L
def get_money(job, money): # 形式参数job,money 定义函数时,函数名称后面括号中的参数
print(f"{job}一个月工资是{money}块")
# 打印函数的comments内容:
方法一: print(get_money.__doc__)
def get_money(job, money):
"""
这是一个用来计算工作薪水的函数
:param job:
:param money:
:return:
"""
print(f"{job}一个月工资是{money}块")
print(get_money.__doc__)
# 这是一个用来计算工作薪水的函数
# :param job:
# :param money:
# :return:
方法二: help(get_money)
def get_money(job, money):
"""
这是一个用来计算工作薪水的函数
:param job:
:param money:
:return:
"""
print(f"{job}一个月工资是{money}块")
help(get_money)
# get_money(job, money)
# 这是一个用来计算工作薪水的函数
# :param job:
# :param money:
# :return:
# 创建空函数
方法一: 创建函数后写注释;
def case_demo1():
"""
func comments
:return:
"""
方法二:使用pass占位;
def case_demo2():
pass
# 传参方法
位置传参 数量与位置都必须与定义时一致,否则会报错
get_money("程序员") # 例如左侧,少传参数,报错
get_money(100, "程序员") # 例如左侧,参数位置不对,会造成函数结果有误
def demo(name, job):
print(f"{name} is a {job}")
demo("程序员") # TypeError: demo() missing 1 required positional argument: 'job'
demo(100, "程序员") # 100 is a 程序员
关键字传参 使用形式参数的名字确定输入的参数值,不需要与形式参数的位置完全一致
get_money(job="老师", money=50)
def demo(name, job):
print(f"{name} is a {job}")
demo(job="teacher", name="marry") # marry is a teacher
# 为参数设置默认值
定义函数时可以指定形式参数的默认值,指定默认值的形式参数必须放在所有参数的最后,否则会报错;
def show_price(product, style="$", price="暂时保密"): # 形参style和price写在最后,"$" "暂时保密"为形式参数的默认值,默认值要用不可变对象,否则会随着调用发生变化
print(f"{product}的价格 {style}{price}")
show_price(product="红茶") # 红茶的价格 $暂时保密 当不给style、price传入值时,函数会使用默认值
show_price(product="绿茶", style="¥", price=3) # 绿茶的价格 ¥3 当给style、price传入值时,函数会使用传入值
# 函数返回值
def sum_0(a, b):
a + b
print(sum_0(1, 2)) # None 当函数中没有输出时,函数的调用结果是看不到的,函数调用完成后返回为None
def sum_1(a, b):
return a + b # 如果需要函数的调用结果做其他操作时,使用return将调用结果返回
print(sum_1(1, 2)) # 3 这时再打印出来就是函数的调用结果了
# 可变参数
可变参数也称为不定长参数,传入函数中的参数可以是任意多个,常见的可变参数一般写作: *args, **kwargs
*arg: 接收任意多的实际参数,并将其放入一个元组中;
def demo(args):
print(f"word{args}")
word = "a", "b", "c"
demo(word) # word('a', 'b', 'c')
**kwargs: 接收任意多个关键字参数一样显式赋值的实际参数,并将其放到一个字典中,使用已经存在的字典作为参数时,在字典名称前加**
def demo(**kwargs):
print(kwargs)
demo(weather="sunny", temperature=20) # {'weather': 'sunny', 'temperature': 20}
dict_1 = {"key": "value"}
demo(**dict_1) # {'key': 'value'}
# 匿名函数
没有名字的函数,用lambda表达式创建匿名函数 使用场景: 需要一个函数,但是又不想费神去命名这个函数,通常在这个函数只使用一次的场景下,可以指定短小的回调函数
result:调用 lambda 表达式
[arg1 [, arg2, …. , argn]]:可选,指定要传递的参数列表
expression:必选,指定一个实现具体功能的表达式,只能是具体表达式不支持for,if等
例1 计算圆面积
一般写法
def get_area(r):
area = math.pi * r ** 2
return area
print(f"半径为2的圆面积为{get_area(2)}")
lambda写法
area = lambda r: math.pi * r ** 2
print(f"半径为2的圆面积为{area(2)}")
例2 排序
book_info = [("python信息", 10), ("java知识", 20), ("php讲解", 5)]
book_info.sort(key=lambda x: x[1])
print(book_info) # [('php讲解', 5), ('python信息', 10), ('java知识', 20)]