网站建设验收期,重庆渝北网站建设,免费软件app不收费的,typo3和wordpress1.Python3函数#xff1a;让代码“打包复用”
你是否发现自己在代码中反复写着一模一样的片段#xff1f;就像每次做饭都要从头切菜洗菜一样#xff0c;函数就是帮你把这些重复操作打包成固定流程的好帮手。
什么是函数#xff1f;
想象函数就像一个厨房小家电——你放入食…1.Python3函数让代码“打包复用”你是否发现自己在代码中反复写着一模一样的片段就像每次做饭都要从头切菜洗菜一样函数就是帮你把这些重复操作打包成固定流程的好帮手。什么是函数想象函数就像一个厨房小家电——你放入食材输入它按照预设程序工作然后给你成品输出。你不用关心内部怎么运转只需要知道怎么使用它定义你的第一个函数defsay_hello():print(你好世界)print(欢迎来到Python函数的世界)以上代码中def是定义函数的关键字意思是“定义”say_hello是函数名按你的需求起名括号()目前空着后面会放参数冒号:表示函数内容开始缩进的代码就是函数体是函数具体要做的事调用函数——让它真正工作# 定义函数defsay_hello():print(你好世界)print(欢迎来到Python函数的世界)# 调用函数三次say_hello()say_hello()say_hello()运行这段代码你会发现同样的问候语出现了三次但你只写了一次逻辑——这就是函数的复用价值让函数更灵活添加参数固定的问候太单调让我们个性化一点defgreet_person(name):print(f你好{name})print(今天过得怎么样)# 调用时传入不同名字greet_person(小明)greet_person(小美)现在每次调用都能问候不同的人name就是参数像函数的“输入插槽”函数返回值——得到结果很多时候我们需要函数计算后给我们一个结果defadd_numbers(a,b):resultabreturnresult# 接收返回值sum_resultadd_numbers(5,3)print(f5加3等于{sum_result})return就像函数的“输出口”把结果送出来供你使用初学者常犯的错误# ❌ 错误写法调用在前定义在后say_hello()# 这里会报错defsay_hello():print(你好)# ✅ 正确写法定义在前调用在后defsay_hello():print(你好)say_hello()# 这样才对记住Python是从上往下执行代码的所以函数定义要在调用之前动手试试现在轮到你了试着写一个函数函数名calculate_area参数length长width宽功能计算长方形面积返回面积值2.核心参数类型速览为了让你一目了然我整理了一个表格来概括这几种参数参数类型关键符号作用说明位置参数无最基础的参数按顺序传递必须传值。默认参数paramvalue调用时可以省略使用定义时的默认值。可变位置参数*args接收任意多个无名参数打包成元组。可变关键字参数**kwargs接收任意多个有名参数打包成字典。关键字参数*强制要求调用时必须使用“参数名值”的形式。 1. 详细解析与代码示例(1) 位置参数 (Positional Arguments)这是最常见、最简单的参数。你必须按照函数定义时参数的顺序依次传入对应数量的值。defgreet(name,greeting):returnf{greeting},{name}!# Alice 传给 name, Hello 传给 greetingprint(greet(Alice,Hello))第一个值给name第二个给greeting(2) 默认参数 (Default Arguments)在定义函数时给参数指定一个默认值。如果调用时不传这个参数就用默认值传了就用传入的值。注意默认参数必须放在必选参数之后。避坑尽量不要使用可变对象如列表[]或字典{}作为默认值否则可能会导致奇怪的副作用。defgreet(name,greetingHello):# greeting 有默认值returnf{greeting},{name}!print(greet(Bob))# 只传一个使用默认问候语print(greet(Charlie,Hi))# 两个都传覆盖默认值(3) 可变位置参数 (*args)当你不确定要传多少个参数时使用。在参数名前加一个星号*函数会把多余的位置参数收集到一个元组中。defsum_all(*numbers):# numbers 是一个元组 (1, 2, 3, 4)returnsum(numbers)print(sum_all(1,2,3,4))# 可以传任意多个数字(4) 可变关键字参数 (**kwargs)用来接收任意多个“关键字值”的参数。在参数名前加两个星号**函数会把这些参数收集到一个字典中。defuser_info(**details):# details 是一个字典 {name: Alice, age: 25}forkey,valueindetails.items():print(f{key}:{value})user_info(nameAlice,age25,cityBeijing)(5) 关键字参数 (Keyword-Only)在*args后面的参数或者单独使用*分隔的参数被称为“强制关键字参数”。调用时必须写明参数名否则会被当作位置参数处理导致报错。defcalculate(*,tax_rate,amount):# * 后面的参数必须用关键字传参returnamount*tax_rate# 必须这样调用calculate(tax_rate0.1,amount100)# 如果写成 calculate(0.1, 100) 会报错(6) 参数解包 (Unpacking)这不算是函数定义的参数类型但在传参时非常有用。你可以使用*或**将列表/元组、字典解开作为参数传入函数。deffunc(a,b,c):print(a,b,c)args_listfunc(*args_list)# 解包列表相当于 func(1, 2, 3)kwargs_dict{a:1,b:2,c:3}func(**kwargs_dict)# 解包字典相当于 func(a1, b2, c3)⚖️ 2. 组合使用的规则在一个函数定义中你可以混合使用上述参数但必须严格遵守以下顺序否则 Python 会报错位置参数(positional)默认参数(default)可变位置参数(*args)关键字参数(keyword-only)可变关键字参数(**kwargs)一个综合示例defexample_func(pos1,pos2,default10,*args,kw_only,**kwargs):print(f位置参数:{pos1},{pos2})print(f默认参数:{default1})print(f可变位置参数 (*args):{args})print(f强制关键字参数:{kw_only})print(f可变关键字参数 (**kwargs):{kwargs})# 调用示例example_func(1,2,3,4,5,kw_only必须指定,extra额外信息)3.匿名函数想象你需要一把一次性螺丝刀——只拧一颗螺丝后就扔掉不值得买整套工具。匿名函数就是这样的“一次性工具函数”没有正式名字定义后立即使用或传递给其他函数匿名函数使用lambda关键字定义语法lambda 参数: 表达式对比普通函数匿名函数的特点没有def和函数名只有一行表达式自动返回表达式结果无需return对比两种写法# 普通函数写法 def add_regular(x, y): return x y # 匿名函数写法 add_lambda lambda x, y: x y # 两种方式效果相同 print(add_regular(3, 5)) # 输出 8 print(add_lambda(3, 5)) # 输出 8函数让代码变得更简洁、更易维护就像把杂乱的工具整理进工具箱需要时随时取用Python 的参数是函数调用时被传进去的值匿名函数的限制# ❌ 不能有多条语句# lambda x: print(x); return x * 2 # 错误# ✅ 但可以使用条件表达式grade_checklambdascore:优秀ifscore90else及格ifscore60else不及格print(grade_check(95))# 输出 优秀print(grade_check(75))# 输出 及格匿名函数只能包含单个表达式但可以使用三元条件表达式实现简单逻辑总结1.用def定义函数、通过return返回值理解函数成为代码复用的基石2.参数篇深入探讨各种参数类型基础的位置参数、灵活的默认参数到强大的*args和**kwargs再到精确控制的关键字参数。记住那个关键顺序位置→默认→可变位置→关键字→可变关键字3.匿名函数则让我们看到了代码的另一种可能性——简洁的lambda表达式