这个知识点我大概会用好几个课来讲,内容涉及得很多。这个也是我们考纲当中四阶段的内容,重点考察项目。话不多说开讲。Python中的自定义函数,就是由程序员自己编写、用来完成特定任务的代码块。它和 Python 内置的函数(比如 print()、len()、range())相对,是你根据自己的需求“量身定制”的功能单元。一、为什么需要自定义函数?
- 避免重复代码:把常用逻辑封装起来,哪里需要就调用哪里。
- 提高可读性:用函数名表达意图,比如
calculate_tax() - 便于调试和维护:修改功能只需改函数内部,不影响其他地方。
- 支持模块化编程:把大问题拆成小函数,逐个解决。
def 函数名(形式参数1, 形式参数2, ...): # 函数体:实现具体逻辑 return 返回值 # 可选
def my_max(x, y) : # 返回一个表达式return x if x > y else y# 定义一个函数,声明一个形参def say_hi(name) :print("===正在执行say_hi()函数===")return name + ",您好!"a = 6b = 9# 调用my_max()函数,将函数返回值赋值给result变量result = my_max(a , b) print("result:", result)# 调用say_hi()函数,直接输出函数的返回值print(say_hi("猪八戒"))
如果你的函数写出来想加入一些功能说明,怎么调用等,就可以提供说明文档。def my_max(x, y) : ''' 获取两个数值之间较大数的函数。 my_max(x, y) 返回x、y两个参数之间较大的那个 ''' # 定义一个变量z,该变量等于x、y中较大的值 z = x if x > y else y # 返回变量z的值 return z# 使用help()函数查看my_max的帮助文档help(my_max)print(my_max.__doc__)
如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值。如果 Python 函数直接返回多个值,Python 会自动将多个返回值封装成元组
def sum_and_avg(list): sum = 0 count = 0 for e in list: # 如果元素e是数值 if isinstance(e, int) or isinstance(e, float): count += 1 sum += e return sum, sum / countmy_list = [20, 15, 2.8, 'a', 35, 5.9, -1.8]# 获取sum_and_avg函数返回的多个值,多个返回值被封装成元组tp = sum_and_avg(my_list)print(tp)# 使用序列解包来获取多个返回值s, avg = sum_and_avg(my_list)print(s)print(avg)
关键字(keyword)参数
按照形参位置传入的参数被称为位置参数,则必须严格按照定义函数时指定的顺序来传入参数值。根据参数名来传入参数值,则无须遵守定义形参的顺序,这种方式被称为关键字(keyword)参数
# 定义一个函数def girth(width , height): print("width: ", width)print("height: ", height)return 2 * (width + height)# 传统调用函数的方式,根据位置传入参数print(girth(3.5, 4.8))# 根据关键字参数来传入参数print(girth(width = 3.5, height = 4.8))# 使用关键字参数时可交换位置print(girth(height = 4.8, width = 3.5))# 部分使用关键字参数,部分使用位置参数print(girth(3.5, height = 4.8))
如果希望在调用函数时混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后。(考点)
参数默认值(default parameter value)# 为两个参数指定默认值def say_hi(name = "孙悟空", message = "花果山水帘洞学校"):print(name, ", 您好")print("消息是:", message)# 全部使用默认参数say_hi()# 只有message参数使用默认值say_hi("唐僧")# 两个参数都不使用默认值say_hi("唐僧", "欢迎学习Python")# 只有name参数使用默认值say_hi(message = "欢迎学习Python")
如果只传入一个位置参数,由于该参数位于第一位,系统会将该参数值传给name参数。(考点)python规定:关键字参数必须位于位置参数的后面。 say_hi("白骨精", message="欢迎学习Python")——正确 say_hi(name="白骨精", message="欢迎学习Python")——正确定义函数时指定了默认值的参数(关键字参数)必须在没有默认值的参数之后。(考点)# 定义一个打印三角形的函数,有默认值的参数必须放在后面def printTriangle(char, height = 5) : for i in range(1, height + 1) : # 先打印一排空格 for j in range(height - i) : print(' ', end = '') # 再打印一排特殊字符 for j in range(2 * i - 1) : print(char, end = '') print()printTriangle('@', 6)printTriangle('#', height=7)printTriangle(char = '*')
Python 要求将带默认值的参数定义在形参列表的最后。好了今天就分享到这里,好好消化今天的内容。有任何问题,给我留言,关注我。