【Python基础入门】第四课: 函数
大家好欢迎来到Python基础第四课前三节课我们学习了变量、数据类型、运算符、流程控制和容器类型。今天我们要进入编程中最重要的概念之一——函数。如果说变量是数据的容器那么函数就是代码的容器。学会函数你就能告别重复代码写出更优雅、更高效的程序。一、为什么需要函数想象一下你每天早上都要刷牙拿牙刷→挤牙膏→刷上排牙→刷下排牙→漱口→清洗牙具。如果每次刷牙都要重复思考这些步骤那也太累了。所以你会把这套流程固化成一个习惯每天自动执行。编程也是如此。如果你有一段代码需要多次使用比如计算两个数的和难道每次都要重新写一遍当然不我们可以把它封装成函数需要时直接调用。函数的好处提高代码复用性写一次到处用。模块化编程把复杂问题拆分成小函数每个函数只做一件事调试和维护都更方便。二、函数的定义与调用2.1 定义函数的格式pythondef 函数名(参数1, 参数2, ...): 函数说明文档 函数体 return 返回值def关键字表示定义一个函数。函数名要见名知意比如calculate_sum、print_info。参数函数需要的数据可以有多个也可以没有。函数体函数要执行的代码块。return返回值告诉调用者执行结果。如果没有返回值可以省略。2.2 调用函数的格式python变量 函数名(实参1, 实参2, ...)2.3 生活中的例子模拟打电话python# 定义函数 def call(): print(----------------(拨号方)拨号----------------) print((拨号方)手机会发送信号包到就近的基站) print((拨号方)就近的基站 会通过 地下电缆发送信号包到 运营商) print((拨号方)运营商会通过互联网将信号包发送给 (接收方)的运营商) print((接收方)运营商会通过互联网将信号包发送给 (接收方)就近的基站) print((接收方)就近的基站 会发送信号包到 (接收方)手机) print(---------(接收方)盲音等待, 嘟嘟嘟...--------) print( * 10) # 调用函数 call() # 第一次拨号 call() # 第二次拨号是不是很简单一次定义无限次调用。三、函数的四种形态根据有没有参数和返回值函数可以分为四种形态。我们以计算两个整数的和为例来演示。3.1 无参无返回值这种函数不需要外部数据也不返回结果只是执行一段代码。pythondef get_sum(): a, b 10, 20 result a b print(f和是{result}) get_sum() # 输出和是30缺点功能固定不够灵活。3.2 有参无返回值通过参数接收外部数据但不返回结果。pythondef get_sum(a, b): # a, b 是形参形式参数 result a b print(f和是{result}) get_sum(11, 22) # 11, 22 是实参实际参数 get_sum(100, 200) # 可以传入不同的值形参定义函数时写的参数相当于占位符。实参调用函数时传入的具体值。3.3 无参有返回值函数不需要外部数据但返回计算结果让调用者自己处理。pythondef get_sum(): a, b 10, 20 result a b return result # 返回结果 my_sum get_sum() print(f和是{my_sum})3.4 有参有返回值最常用灵活接收数据并返回结果。pythondef get_sum(a, b): return a b result get_sum(111, 222) print(f和是{result})总结参数让函数更灵活。返回值让函数的结果可以被外部使用。四、函数的说明文档写函数就像生产工具别人包括未来的自己要用这个工具得知道它是干什么的、需要什么参数、返回什么。这就需要说明文档docstring。4.1 如何写说明文档在函数内部第一行用三引号括起来。pythondef get_sum(a, b): 计算两个整数的和。 :param a: 第一个整数 :param b: 第二个整数 :return: 两个整数的和 return a b4.2 如何查看说明文档在PyCharm中把鼠标悬停在函数名上或者按Ctrl QWindows就能看到。养成写文档的好习惯让代码更具可读性。五、函数的嵌套调用一个函数里可以调用另一个函数这叫嵌套调用。程序执行时会按照顺序结构先执行外层函数遇到内层函数就跳进去执行执行完再回来继续。5.1 简单示例pythondef fun1(): print(---------- func1函数 start ----------) print(♥️♥️♥️ 我是 func1 函数 ♥️♥️♥️) print(---------- func1函数 end ----------) def fun2(): print(---------- func2函数 start ----------) fun1() # 调用 func1 print(♣️♣️♣️ 我是 func2 函数 ♣️♣️♣️) print(---------- func2函数 end ----------) if __name__ __main__: fun2()执行顺序进入 fun2打印 start。调用 fun1进入 fun1打印内容。fun1 执行完返回 fun2继续打印剩余内容。5.2 内存中的“栈”为了更好理解嵌套调用需要了解内存中的栈概念栈是一种后进先出的数据结构。每次调用函数系统会把函数的局部变量等信息压栈放入栈顶。函数执行完毕会弹栈从栈顶移除。这样就能保证嵌套调用时能正确返回到调用位置。六、函数实战案例案例1奇偶数求和需求定义一个函数calculate_sum接收一个数字列表分别计算偶数和奇数的和最后返回一个列表[偶数和, 奇数和]。pythondef calculate_sum(numbers_list): 计算列表中偶数和奇数的和。 :param numbers_list: 数字列表 :return: [偶数和, 奇数和] even_sum 0 odd_sum 0 for num in numbers_list: if num % 2 0: even_sum num else: odd_sum num return [even_sum, odd_sum] # 调用 numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even, odd calculate_sum(numbers) # 拆包接收 print(f偶数和{even}奇数和{odd})输出text偶数和30奇数和25注意函数可以返回多个值Python会自动把它们打包成一个元组。我们也可以用拆包直接接收。案例2模拟计算器需求定义一个函数my_calculate接收两个整数返回它们的加、减、乘、除结果。pythondef my_calculate(a, b): 模拟计算器返回两个整数的加减乘除结果。 :param a: 第一个整数 :param b: 第二个整数 :return: (和, 差, 积, 商) 元组 return a b, a - b, a * b, a / b # 调用 result my_calculate(10, 5) print(result) # (15, 5, 50, 2.0) print(type(result)) # class tuple如果返回多个值函数会返回一个元组。你可以用一个变量接收也可以直接用拆包pythonadd, sub, mul, div my_calculate(10, 5) print(f和{add}差{sub}积{mul}商{div})七、总结与作业今天我们学习了函数的概念、定义与调用。函数的四种形态无参无返回值、有参无返回值、无参有返回值、有参有返回值。形参和实参的区别。说明文档的写法。函数的嵌套调用和栈的概念。两个实用案例奇偶数求和、模拟计算器。函数是模块化编程的基础掌握它你就能写出结构清晰、易于维护的代码。课后作业编写一个函数is_prime(n)判断一个数是否为质数返回True或False。编写一个函数max_of_three(a, b, c)返回三个数中的最大值。编写一个函数factorial(n)计算 n 的阶乘用递归或循环实现。结合今天学的嵌套调用写一个程序定义两个函数input_numbers()负责让用户输入一组数字以空格分隔process_numbers()负责调用calculate_sum计算奇偶数和并打印结果。欢迎在评论区分享你的代码或疑问 预告下一节课我们将学习变量作用域敬请期待
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2432601.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!