前文里, 我们已娴熟掌握流程控制的三种关键语句, 即if判断、for循环跟while循环, 能编写具备简单逻辑的程序, 像学生成绩管理系统的基础版本。然而在实际开发之际, 我们会发觉, 好多代码会被重复运用, 像成绩等级判断及输入验证等情况,如果每次运用时都再度编写一回, 不但会增添代码量, 还会致使后期修改不方便, 也就是修改一处就得修改所有重复的代码。
本节课我们要学习函数, 它是解决这一问题的核心工具, 这个函数能够把重复的代码进行封装, 以此形成一个可调用的 “代码模块, 后期使用的时候只用很简便地调用就行, 不需要再次重复编写, 这样做, 一方面提高了代码复用的性能, 另外一方面也让代码变得更加简洁, 更加容易维护, 更加容易修改。
本文会延续这样的风格, 即基础讲解加上实操案例以及易错点总结, 贴合新手学习的节奏, 从函数的核心概念起始, 再到基础语法、定义与调用, 此外, 讲述函数的参数、返回值以及常用场景, 并且, 还涉及函数与前文所言流程控制、数据类型的综合运用, 以此帮你快速掌握函数的核心用法, 真正达成封装重复代码、提升开发效率的目的。
一、函数的核心概念:什么是函数?
简而言之, 函数乃是一段被封装起来的代码块, 此代码块是能够重复调用的, 其会接受输入(这是可选的), 接着执行特定逻辑并返回输出(也是可选的), 如同生活里的“工具”。就好比一把剪刀, 我们并不需要知晓它的制作原理, 仅仅拿起它便能够做完“裁剪”操作。函数情况同样如此, 我们不用去关心它里边的代码逻辑, 单是调用它, 便可以完成对应的功能。
参考前文所举案例, 像“成绩等级判断”这一功能, 于学生成绩管理系统里是要予以运用的, 要是后续有编写“学生成绩排名”程序的打算, 还有编写“成绩报表生成”程序的需求, 同样也是要用到此功能的。到了这个时候, 我们能够把“成绩等级判断”的代码封装成一个函数, 往后不管是在哪个程序当中使用, 只要调用这个函数就行, 用不着再次编写判断逻辑了。
函数的核心价值:
1. 提高代码复用的程度, 重复出现的代码, 仅需编写一回, 而后进行多次调用, 以此来减少存在重复的代码。
2. 对代码维护予以简化, 在进行功能修改之际, 只要对函数内部的代码作出修改, 那么所有调用这个函数的地方, 均会实现同步更新。
3. 使代码的可读性得到提升, 把复杂逻辑进行封装, 使之成为函数, 如此一来, 代码的结构会变得更为清晰, 从而方便他人去理解, 也方便自己在后续进行查看。
4. 削弱开发困难程度, 把大问题分解成多个小函数, 一个一个去进行实现, 由此减低编程时候的复杂程度。
二、函数的基础语法:定义与调用(必学)
函数的使用在中是分为两步的, 第一步是定义函数, 也就是封装代码块, 第二步是调用函数, 即使用封装好的功能。其语法简洁, 严格遵循缩进规则, 新手需要重点掌握定义以及调用的基础格式。
(一)定义函数的基础语法
def关键字(也就是其缩写形式)用于定义函数, 函数名紧跟在其后, 接着是括号(括号以内可以包含参数), 括号过后是冒号, 缩进的那部分代码块便是函数的核心逻辑(也就是函数体)。
# 基础语法格式 def 函数名(参数1, 参数2, ...): # 参数可选,根据需求添加 函数体(缩进4个空格,封装的重复代码逻辑) (可选)return 返回值 # 返回值可选,用于返回函数执行的结果 # 说明: # 1. 函数名:自定义,遵循Python命名规范(字母、数字、下划线组成,不能以数字开头,区分大小写) # 2. 参数:括号内的内容,用于接收外部传入的数据(相当于函数的“输入”),可无参数 # 3. 函数体:必须缩进,是函数的核心逻辑,执行具体的操作 # 4. return:用于返回函数执行的结果(相当于函数的“输出”),无return则返回None(二)调用函数的基础语法
语法格式为: 函数名, 参数值1, 并且同时还有参数值2, 以及其他依次罗列的参数值, 括号之内的这些参数值, 是需要和定义函数的时候所对应的参数, 当调用之后, 函数就会去施行内部逻辑, 要是存在返回值, 那么能够把返回值赋予给变量, 以此方便后续的使用。
(三)实操案例:从简单到复杂,掌握函数的定义与调用
以前文所涉及的知识点为依据, 去编写3个呈现递进关系的案例, 以此助力你能够迅速掌握函数的定义这个行为以及调用这个动作, 进而体会函数所具备的复用性。
案例1:无参数、无返回值函数(最简单)
情境是: 对“打印欢迎语”的那部分代码进行封装, 既不需要输入参数, 也不需要返回结果, 仅仅只需去调用函数就能够执行打印这个操作。
# 定义函数:打印欢迎语(无参数、无返回值) def print_welcome(): print("="*50) print("欢迎使用Python函数入门系统!") print("="*50) # 调用函数:直接写函数名+括号 print_welcome() # 第一次调用,执行打印操作 print_welcome() # 第二次调用,重复执行,无需重复编写代码 print_welcome() # 第三次调用要知道, 这个函数呢它是没有参数的, 也就是括号里面是空空如也的, 并且没有语句, 当其被调用之后呢会直接去执行函数体内所存在的打印逻辑, 达成了一次编写之后能够进行多次调用的情况, 最终避开了重复去编写三遍打印代码这种状况。
案例2:有参数、无返回值函数(常用)
在所给定的场景当中, 要对“成绩等级判断”的代码进行封装, 此封装衔接前文流程控制知识, 在该封装过程里, 需要将成绩参数传入进去, 之后执行判断操作, 最后打印出等级, 且不需要返回结果。
# 定义函数:判断成绩等级(有参数、无返回值) def judge_score_level(score): # score是参数,用于接收外部传入的成绩 if score >= 90: print(f"成绩:{score}分,等级:优秀") elif score >= 80: print(f"成绩:{score}分,等级:良好") elif score >= 60: print(f"成绩:{score}分,等级:及格") else: print(f"成绩:{score}分,等级:不及格") # 调用函数:传入不同的成绩参数,重复使用函数 judge_score_level(88) # 传入88,打印对应等级 judge_score_level(75) # 传入75,打印对应等级 judge_score_level(59) # 传入59,打印对应等级 judge_score_level(92) # 传入92,打印对应等级特此注意, 该函数存在着一个参数score, 在进行调用这个函数的时候, 是需要传入具体的成绩数值的, 函数内部会依据传入的成绩去执行判断的逻辑并且进行打印, 要是后续有需要对100个学生的成绩等级进行判断, 仅仅调用100次函数就行, 并不需要重复去编写100遍if - elif - else判断的逻辑, 这极大地提升了效率。
案例3:有参数、有返回值函数(核心常用)
给定这样的情形, 需对“成绩等级判断”相关代码予以封装, 当传入成绩这个参数时, 其能够回馈与之对应的等级, 且并非直接进行打印, 在后续阶段, 能够依据返回的这个值开展其他的操作, 像是统计各个等级的人数, 如此一来灵活性会更高。
# 定义函数:判断成绩等级(有参数、有返回值) def get_score_level(score): if score >= 90: return "优秀" # 返回等级“优秀” elif score >= 80: return "良好" # 返回等级“良好” elif score >= 60: return "及格" # 返回等级“及格” else: return "不及格" # 返回等级“不及格” # 调用函数:将返回值赋值给变量,便于后续使用 level1 = get_score_level(88) print(f"成绩88分,等级:{level1}") # 输出:成绩88分,等级:良好 level2 = get_score_level(59) print(f"成绩59分,等级:{level2}") # 输出:成绩59分,等级:不及格 # 结合for循环,批量处理成绩(衔接前文for循环知识) scores = [88, 75, 92, 59, 68, 95] for score in scores: level = get_score_level(score) print(f"成绩:{score}分,等级:{level}")须明晰, 那个函数存在名为score的参数, 具备返回值,在调用之后会把返回的等级赋予变量, 接下来能按照需求灵活运用(像是打印、统计之类)。相较于没有返回值的函数而言, 有返回值的函数灵活性更为高些, 属于日常开发里最为常用的函数形式。
(四)函数定义与调用的核心注意事项(新手必看)
函数的界定跟调用好像显得简易, 然而刚入门的新手极易于细微之处踏入陷阱, 归纳出4个关键留意要点, 协助你避开陷阱:
1. 缩进有着这样的规范, 函数体务必要进行缩进, 通常推荐是4个空格, 要是缩进出现不一致的情况, 就会报出缩进错误, 没有进行缩进的代码并不属于函数体, 它不会被函数调用从而执行。
2. 函数名的规范要求是, 要遵循命名的相应规范, 采用小写字母以及下划线来进行命名, 就像这样, 并且要避开使用关键字, 诸如def、if、for此类, 还得达成“见名知意”的效果, 也就是当看到函数的名字时, 就能知晓该函数所具备的功能。
3. 进行这一操作时, 当你调用函数之际, 你所传入的参数的数量, 以及参数的类型, 务必要都与定义函数的时候所包含的参数形成对应关系, 不然的话就会报出(参数不匹配错误)这样的情况。
4. 具有这样的作用: 它是用来返回函数执行之后的结果的, 只要执行相关语句, 那么函数就会马上终止, 后续的那些代码是不会再执行的;而对于没有语句的函数而言, 它会默认返回None(能够通过print(函数调用)这种方式去查看)。
# 易错点示例1:参数不匹配 def add(a, b): # 定义函数时,有2个参数 return a + b # add(10) # 报错:TypeError(缺少1个参数) # add(10, 20, 30) # 报错:TypeError(多1个参数) print(add(10, 20)) # 正确:传入2个参数,返回30 # 易错点示例2:return终止函数 def test(): print("执行函数开始") return "结束" # 执行return,函数终止 print("执行函数结束") # 不会执行 print(test()) # 输出:执行函数开始 结束三、函数的参数:让函数更灵活(核心重点)
函数的参数, 是函数所谓的“输入”, 其作用用来接收来自外部传入的数据。有了它, 函数得以处理不同的输入情况, 进而实现更具灵活性的功能。依据参数的传递方式以及作用而言分类, 当下函数的参数主要被区分为4种: 位置参数、关键字参数、默认参数 , 以及不定长参数。对于新手来讲, 重点需要掌握的则是前3种, 也就是最常用的那3种。至于不定长参数, 有所了解即可。
(一)位置参数(最基础、最常用)
位置参数, 体现在调用函数之际, 所传入的参数值, 其必须要与在定义函数时候的参数位置保持一一对应这种关系, 顺序还绝对不可以颠倒, 而且数量也要保持一致, 是这样的情况。
# 定义函数:计算两个数的和(位置参数) def add(a, b): # a、b是位置参数,顺序固定 return a + b # 调用函数:传入的参数值与位置对应 print(add(10, 20)) # 正确:a=10,b=20,返回30 print(add(20, 10)) # 正确:a=20,b=10,返回30(顺序不同,结果可能不同) # print(add(10)) # 错误:缺少位置参数b # print(add(10, 20, 30)) # 错误:多位置参数有一种被称作位置参数的, 它当属最为基础的参数类型, 在日常进行开发期间, 其使用频率是最高的情况, 并且它的核心是这样一个概念, 即位置对应以及数量一致这套说法。
(二)关键字参数(更灵活,避免位置混淆)
参数为关键字形式: 在调用函数这个行为之时, 以“参数名=参数值”这样的方式去传入相关参数, 并不需要去考虑参数之间的排放位置, 仅仅只要保证参数当中定义的名称是正确无误的就行, 这种情况是比较匹配参数数量较多的那些场景的。
# 定义函数:打印学生信息(多个参数) def print_student_info(name, age, score): print(f"姓名:{name},年龄:{age}岁,成绩:{score}分") # 1. 纯位置参数调用(需注意顺序) print_student_info("张三", 18, 88) # 正确:顺序对应name、age、score # 2. 纯关键字参数调用(无需考虑顺序) print_student_info(age=18, name="张三", score=88) # 正确:参数名对应即可 # 3. 混合调用(位置参数在前,关键字参数在后,不可颠倒) print_student_info("张三", score=88, age=18) # 正确:位置参数name在前 # print_student_info(age=18, "张三", score=88) # 错误:关键字参数不能在位置参数前面要说明的是, 关键字参数具有这样的优势, 那就是“无需记忆参数位置”, 在函数参数数量较多那种情况下, 运用关键字参数能够避免因位置方面的混淆从而引发错误, 进而提升代码的可读性。
(三)默认参数(简化调用,常用)
定义函数之际, 给参数设定一个默认值, 此为默认参数, 调用函数之时, 要是没有传入那个参数, 那就使用默认值, 倘若传入了该参数, 便使用传入的值, 这种情况适合“参数值经常不变”的场景。
# 定义函数:打印学生信息(默认参数) def print_student_info(name, age=18, score=60): # age默认18,score默认60 print(f"姓名:{name},年龄:{age}岁,成绩:{score}分") # 调用函数:未传入默认参数,使用默认值 print_student_info("张三") # 输出:姓名:张三,年龄:18岁,成绩:60分 # 调用函数:传入部分默认参数,其余使用默认值 print_student_info("李四", 19) # 传入age=19,score使用默认值60 print_student_info("王五", score=88) # 传入score=88,age使用默认值18 # 调用函数:传入所有参数,覆盖默认值 print_student_info("赵六", 20, 92) # 输出:姓名:赵六,年龄:20岁,成绩:92分要留意, 默认参数得放置在位置参数的后面才行(就好比 def (name, age=18, score=60) 这样是正确的;而 def (age=18, name, score=60) 这种则是错误的), 不然的话将会报出语法错误呢。
(四)不定长参数(了解即可,按需使用)
不定长参数, 是用来接收不确定数量参数的, 它主要存在两种表现形式, 一种是*args, 这种形式能够接收任意数量的位置参数, 并且返回一个元组, 另一种是** , 借此形式能够接收任意数量的关键字参数, 还会返回一个字典。它适用于那样一些场景, 也即参数数量并不确定的情况, 就比如说批量传入多个数字去进行求和操作的场景。
# 示例1:*args 接收任意数量的位置参数 def add_all(*args): sum_result = 0 for num in args: sum_result += num return sum_result print(add_all(10, 20)) # 传入2个参数,返回30 print(add_all(10, 20, 30, 40)) # 传入4个参数,返回100 print(add_all()) # 传入0个参数,返回0 # 示例2:**kwargs 接收任意数量的关键字参数 def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}:{value}") print_info(name="张三", age=18, score=88) # 传入3个关键字参数 print_info(name="李四", gender="男") # 传入2个关键字参数四、函数的嵌套调用:实现复杂逻辑(进阶)
函数进行嵌套调用, 于一个函数的函数体当中, 去调用另外一个函数, 借由嵌套调用, 能够把复杂逻辑拆解成多个简单函数, 达成“分工协作”, 使得代码变得更清晰, 更易于维护。
参照之前所讲述的知识点, 撰写一个存在嵌套调用情况的实例, 达成“学生成绩统计”这般复杂的功能:
# 案例:函数嵌套调用,实现学生成绩统计 # 1. 定义函数1:判断成绩等级(有参数、有返回值) def get_score_level(score): if score >= 90: return "优秀" elif score >= 80: return "良好" elif score >= 60: return "及格" else: return "不及格" # 2. 定义函数2:统计各等级的学生人数(嵌套调用函数1) def count_score_levels(scores): # 初始化各等级人数 excellent = 0 # 优秀 good = 0 # 良好 pass_score = 0 # 及格 fail = 0 # 不及格 # 遍历成绩,调用函数1判断等级,统计人数 for score in scores: level = get_score_level(score) # 嵌套调用函数1 if level == "优秀": excellent += 1 elif level == "良好": good += 1 elif level == "及格": pass_score += 1 else: fail += 1 # 返回统计结果(多个返回值,用逗号分隔,返回一个元组) return excellent, good, pass_score, fail # 3. 定义函数3:打印统计结果(嵌套调用函数2) def print_score_statistics(scores): if not scores: print("无成绩数据可统计!") return # 嵌套调用函数2,获取统计结果 excellent, good, pass_score, fail = count_score_levels(scores) total = len(scores) print("\n" + "="*50) print("学生成绩等级统计结果") print("="*50) print(f"总人数:{total}人") print(f"优秀:{excellent}人,占比:{excellent/total*100:.1f}%") print(f"良好:{good}人,占比:{good/total*100:.1f}%") print(f"及格:{pass_score}人,占比:{pass_score/total*100:.1f}%") print(f"不及格:{fail}人,占比:{fail/total*100:.1f}%") print("="*50) # 4. 调用函数3,执行统计功能 scores = [88, 92, 75, 59, 68, 95, 82, 78, 55, 90] print_score_statistics(scores)案例说明如下: 此案例借助3个函数之间的嵌套调用, 达成了复杂的成绩统计功能, 具体为: 函数3会去调用函数2, 函数2又会调用函数1, 并且每个函数仅仅负责一项简单的功能, 分别是判断等级、统计人数以及打印结果, 它们分工清晰明确, 代码表述清晰。假如后续有需要对“成绩等级判断”的逻辑作出修改, 那么只需要修改函数1就行, 函数2与函数3均不需要进行修改, 这充分体现了函数所具备的可维护性。
留意, 当函数进行嵌套调用之际, 务必要确保所调用的函数已然被定义好(比如说函数1肯定得在函数2的定义之前便已存在, 函数2当然得在函数3的定义之前已然存在), 不然就会泛起(未定义这类错误)。
五、函数与流程控制、数据类型的综合实战案例
把前文之中所涉及的流程控制, 也就是 if、for、while 用到, 同时把数据类型, 即列表、字典也融入进来, 再组合上本节课程有关函数的相关知识, 去编写这么一个综合实战例证, 具体为“学生成绩管理系统(升级版本)”, 从而实现数据进入系统、计算成绩总计数值、判定成绩所处等级、查找相关信息等功能, 以此来加固所学到的知识内容, 提高综合运用的能力水平。
# 综合实战案例:学生成绩管理系统(升级版本) # 需求:1. 循环录入学生姓名和成绩(while循环);2. 验证输入合法性(if判断); # 3. 封装函数实现成绩等级判断、成绩统计、信息查询;4. 批量处理数据(for循环) # 1. 定义函数1:验证姓名合法性 def is_valid_name(name): # 姓名不为空,且仅包含中文或字母 if not name: return False return any('\u4e00' <= c <= '\u9fff' for c in name) or name.isalpha() # 2. 定义函数2:验证成绩合法性 def is_valid_score(score): # 成绩是0-100之间的整数 if not score.isdigit(): return False score = int(score) return 0 <= score <= 100 # 3. 定义函数3:判断成绩等级 def get_score_level(score): if score >= 90: return "优秀" elif score >= 80: return "良好" elif score >= 60: return "及格" else: return "不及格" # 4. 定义函数4:统计成绩等级 def count_score_levels(student_list): excellent = 0 good = 0 pass_score = 0 fail = 0 for student in student_list: level = get_score_level(student["score"]) if level == "优秀": excellent += 1 elif level == "良好": good += 1 elif level == "及格": pass_score += 1 else: fail += 1 return excellent, good, pass_score, fail # 5. 定义函数5:查询学生信息 def search_student(student_list, name): for student in student_list: if student["name"] == name: level = get_score_level(student["score"]) print(f"\n查询结果:") print(f"姓名:{student['name']},成绩:{student['score']}分,等级:{level}") return print(f"\n未找到姓名为{name}的学生!") # 6. 主程序:循环录入数据,调用函数实现功能 def main(): student_list = [] # 存储学生信息(列表嵌套字典) while True: print("\n" + "="*50) print("学生成绩管理系统(升级版本)") print("1. 录入学生信息") print("2. 查看所有学生信息") print("3. 成绩等级统计") print("4. 查询学生信息") print("5. 退出系统") print("="*50) choice = input("请输入操作序号(1-5):").strip() # 操作判断(if-elif-else) if choice == "1": # 录入学生信息 name = input("请输入学生姓名:").strip() if not is_valid_name(name): # 调用函数1,验证姓名 print("姓名输入错误,请输入中文或字母!") continue score_input = input("请输入学生成绩(0-100):").strip() if not is_valid_score(score_input): # 调用函数2,验证成绩 print("成绩输入错误,请输入0-100之间的整数!") continue score = int(score_input) student_list.append({"name": name, "score": score}) print("录入成功!") elif choice == "2": # 查看所有学生信息 if not student_list: print("未录入任何学生信息!") continue print("\n所有学生信息:") for i, student in enumerate(student_list, start=1): # enumerate函数,获取索引 level = get_score_level(student["score"]) # 调用函数3 print(f"{i}. 姓名:{student['name']},成绩:{student['score']}分,等级:{level}") elif choice == "3": # 成绩等级统计 if not student_list: print("未录入任何学生信息!") continue excellent, good, pass_score, fail = count_score_levels(student_list) # 调用函数4 total = len(student_list) print("\n成绩等级统计结果:") print(f"总人数:{total}人") print(f"优秀:{excellent}人({excellent/total*100:.1f}%)") print(f"良好:{good}人({good/total*100:.1f}%)") print(f"及格:{pass_score}人({pass_score/total*100:.1f}%)") print(f"不及格:{fail}人({fail/total*100:.1f}%)") elif choice == "4": # 查询学生信息 if not student_list: print("未录入任何学生信息!") continue name = input("请输入要查询的学生姓名:").strip() search_student(student_list, name) # 调用函数5 elif choice == "5": # 退出系统 print("感谢使用,退出系统!") break else: print("输入错误,请输入1-5之间的序号!") # 调用主函数,启动程序 if __name__ == "__main__": main()下面来说这个案例, 此案例属于上一篇“学生成绩管理系统(基础版)”的升级版本, 其核心在于透过函数去封装重复代码, 像是输入验证、等级判断、统计、查询这些, 达成了更完备的功能。整个程序借助函数嵌套调用、流程控制以及数据类型的搭配, 落成了一个完整的小系统, 新手能够运行代码, 测试不同操作, 巩固本节课的函数知识, 与此同时提升多知识点综合运用的能力。
六、函数高频易错点总结(新手必看)
入门重点在于函数, 它还是后续学习模块以及面向对象的基础, 新手在参数、嵌套等细节方面容易陷入困境, 现将5个高频易错点进行总结, 以助你完全避开错误:
1. 当出现参数顺序错误时, 存在这样的情况, 默认参数是必须放置在位置参数之后的, 不然就会有语法错误出现, 而在混合调用的态势下单, 位置参数势必要位于关键字参数之前的。
2. 要是函数未经定义就去进行调用, 在嵌套调用这种情况之下, 那参与被调用的那个函数, 必须得是在调用它的函数之前就已经完成定义才行, 不然的话, 就会出现报错这一状况。
3. 语句存在这样一种误解: 是能够返回多个值的, 这些值是以逗号进行分隔的方式来获得返回元组;但是一旦运行该语句中的那种执行情况出现, 那么函数就会直接马上停止运行, 紧接着后面相应的代码是不会依次接着运行的。
4. 发生参数传递错误, 是在调用函数之际, 所传入的参数数量, 以及类型, 和定义函数时的参数并不匹配, 进而会报出相应问题。
5. 因全局变量跟局部变量错乱所致混淆情况: 于函数内部所定义的变量属于局部变量, (此局部变量仅限于函数内部才能够使用)。在函数外部所定义的变量则為全局变量, (此全局变量在全局范围均能使用)。一旦想要于函数内部去修改全局变量, 那就必须借助关键字予以声明。
# 易错点示例:全局变量与局部变量 num = 10 # 全局变量 def test1(): num = 20 # 局部变量,仅在函数内部可用,不影响全局变量 print("函数内部num:", num) # 输出:20 test1() print("函数外部num:", num) # 输出:10(全局变量未被修改) def test2(): global num # 声明num是全局变量,可在函数内部修改 num = 30 print("函数内部num:", num) # 输出:30 test2() print("函数外部num:", num) # 输出:30(全局变量被修改)总结与后续学习指引
本文着力对函数的主要用法予以重点讲解, 先是涉及函数的概念, 接着是函数的定义, 随后为函数的调用, 而后是函数的参数, 再往后是函数的嵌套调用, 最后是综合实战的案例, 全面涵盖了新手入门所必需的函数知识, 助力你掌握“将重复代码进行封装, 以此提高代码复用性”的关键技巧, 与此同时, 与前文的流程控制, 以及与数据类型知识相互衔接, 从而构建成了完整的入门知识体系。
回顾本文核心内容:
1. 函数具备的核心价值在于, 能够对重复代码予以封装,进而提高复用以及可维护的性能, 并且还能将编程逻辑进行简化。
2. 函数基础用法包含, 定义, 其借助def关键字, 还有调用, 通过函数名加括号来达成, 要重点掌握那种有参数同时又有返回值的函数。
3. 函数的参数, 重点要掌握位置参数, 关键字参数也得掌握, 默认参数同样要掌握, 还得按需去使用不定长参数。
4. 函数进行嵌套调用, 把复杂的逻辑, 拆解為多个简单的函数, 以此实现分工协作, 进而提升代码的可读性。
5. 通过综合运用, 将流程控制与数据类型相结合, 进而编写有实用功效的程序, 以此提升多知识点搭配起来的能力。
后续学习指引:
1. 多动动手去练习, 把本文当中的案例反复地去运行一番, 再进行修改, 试着去添加新增加的功能, 比如说成绩排序, 还有修改学生的信息, 以及删除学生的信息, 以此来加深对于函数的理解。
2. 要熟练地去掌握参数的用法, 那就得多进行练习, 练习不同种类类型的参数, 像位置参数、关键字参数以及默认参数, 要能够依据需求去挑选合适的参数类型, 以此来避免出现参数传递方面的错误。
3. 要去学习函数进阶的相关知识, 其中包括掌握函数的作用域, 这里面有全局变量和局部变量, 还要掌握递归函数, 也就是函数运行时调用自身, 以此为后续学习模块以及面向对象打下基础。
4. 来实验着去编写具备实用性的小型工具, 将函数、流程控制以及数据类型相互集合运用, 去编制简易的具有实用性的小型工具, 像计算器、待办事项清单, 文本统计工具这类, 以此来提高编程方面的实战能力。
需知函数乃是编程里面的“核心工具”也, 更是从“编写没啥难度的代码”往“编写既规范且高效的代码”方面去跨进一大步的关键之所在。只要做到多多地练习, 多多做完练习去总结经验, 熟练把函数的封装以及调用全都掌握住, 便必然能够轻轻松松地去妥善应对后续会出现的更为复杂的编程场景, 进而为成功成为开发者筑牢坚实无比的基础哟。