
前言此处将引领你, 以轻松的状态去理解, 进而掌握语言里核心特性, 也就是函数, 阐述其定义语法, 还有函数形式, 并且介绍函数参数传递的两种方式。函数含义函数, 它是那种执行特定任务的语句块, 是被允许程序员运用来进行重用的一部分代码, 其这种行为促进了软件程序的模块化概念。该方法背后所蕴含的主要思想是, 要对一个大的代码块实施划分, 使之成为更小的彼此独立的部分, 进而成为在实际上更容易进行管理的子块。其中存在着两种类型的函数:。编程时, 有一种函数, 叫内置函数Build-in。一开始学习时, 经常用这种函数, 使用时, 无需定义它们, 可以在程序中直接用的。比如说, print()、input()、sum()等, 都属于此种类型哦。程序员被允许创建自己的函数, 这是一种特定的函数类型, 接下来会重点介绍它, 它被称作是用户定义函数User-。简单来讲, 函数是那种定义好了的, 能够重复去调用的, 具有结构化的语句块。函数的名称是唯一的, 它能够接收参数, 并且会按照需求给调用者返回相应的结果值或者是不返回值呀。函数定义在中定义函数的主要规则如下:概括起来有四种类型的函数函数定义的语法格式如下def functionName (var1, var2, … etc.): Statements依照实参是否存在, 以及考虑输入和或者输出值的有无状况, 可以把函数据列为上面所述的四种可能的类型, 接下来会分别予以介绍。无参无返回值型函数处于这种类型里, 函数并不接纳变量当作参数, 并且也不返回任何的数据。就像以下的脚本演示就是这样子的函数, 它仅仅是于屏幕之上打印预先定义好的字符串。代码清晰可见, 定义里头的形参, 调用之际并无实参, 语句块当中也不存在语句。该种结构仅仅是调用print()函数用以展现所需之消息。在主程序里调用这般一个函数是一件颇为简单直接之事, 如下所示:。# 定义一个既无参数也无返回值的函数 def printSomething(): print(Hello world) # 在主程序中直接调用 printSomething()运行程序后输出结果为Hello world有参无返回值型函数有另外一种函数类型, 它会把变量当作参数来接受, 然而却不会返回任何数据。在下面所给出的示例里, 是依照声明的名称去调用函数的, 并且在调用的函数括号当中要包含一些值。那一些值会被传递给函数的主体以供使用, 它们能够被视作为普通变量。# 定义接收参数但无返回值的函数 def printMyName(fName, lName): print(Your name is:, fName, lName) # 提示用户输入姓名 firstName input(Enter your first name: ) lastName input(Enter your last name: ) # 在主程序中调用所定义的函数 printMyName(firstName, lastName)运行程序结果类似如下3.14.23.14.2, 为编程语言于2025年12月5日所发布的稳定版本, 归属于3.14系列的第二个维护更新, 该版本涵盖18项修复, 着重处理了多进程、数据类以及正则表达式等模块的回归问题, 且修复了CVE - 2025 - 12084等安全漏洞, 此版本标志着自由线程模式移除GIL正式得到官方支持, 是发展的重要里程碑。下载Enter your first name:Solo Enter your last name: Cui Your name is: Solo Cui无参有返回值型函数第三种类型是函数, 这种函数不接受参数, 却有返回数据。重要的是, 得记住这一点, 由于这种类型的函数会返回一个值给调用代码, 所以这个值在被使用或者被处理之前, 必须要赋值给一个变量。示例如下:# 定义无参数但有返回值的函数 def returnFloatNumber(): inputFloat float(input(输入一个数字其将返回给主程序)) return inputFloat # 主程序调用函数并显示输入结果 x returnFloatNumber() print(输入的数字为:, x)运行程序结果类似如下输入一个数字其将返回给主程序: 5.7 输入的数字为:: 5.7有参有返回值型函数这种函数类型既要接纳参数, 又会把值回传给调用代码。来看下面的示例情形。处于这种状况时, 函数调用之中一定要纳入一个参数清单, 并且还要把返回的值指派给某个特定变量, 以便后续使用:。# 有参有返回值函数 def calculateSum(number1, number2): print(计算两个数字和.) return(number1 number2) # 接受用户输入的两个数字 num1 float(input(输入第一个数字: )) num2 float(input(输入第二个数字: )) # 调用函数计算俩个数字和 addNumbers calculateSum(num1, num2) # 输出两个数字和 print(两个数字和为:, addNumbers)运行程序结果类似如下输入第一个数字: 3 输入第二个数字: 5 计算两个数字和... 两个数字和为:: 8.0函数参数传递方式对于给函数传递参数, 存在着两种不一样的方法。究竟该如何去确定选择这两者当中的哪一个方法呢, 这应当依据原来变量的值是不是能够在函数内部被更改来决定。把参数值传递给函数存在着两种方式, 一般会被称作按值调用或者传递, 以及按引用调用或者传递。概要来说函数参数传递第一, 以按值的方式来讲, 参数属于原始变量的副本, 会维持副本的状态, 并且不会对原始值作出改变。其二, 按照引用方式, 改变会直接作用于原始变量, 所以就把原始值给改变了。按值调用/传递于这类情形之下, 实际参数也就说比如形式参数那样的数值, 当作是原始变量所存在的副本而去进行处理。这样子, 当程序运行的控制返回到进行调用的那个人或者程序那里的时候, 那个调用所在范围里的原始变量就会保持于原本那样不会被改变。在中, 要是把不可变参数, 像整数以及字符串, 传递给函数, 一般的做法是按值来调用或者传递参数。下面的示例借助介绍id()函数阐述了这种情形。它会拿一个对象当作参数, 也就是id(), 然后返回这个特定对象的标识。Id()返回的值是一个整数, 它在对象的生命周期里是唯一且永久的。如同示例所展示的, 在调用函数以前, 变量x的id是。要留意的是, 只要x的值没有被更新, x的id在函数当中就不会发生改变。可是, 一旦那个值被更新成20, 其相对应的id就会变更为。要留意的最为关键的一点是, x的id在调用函数之后不会发生改变, 它的初始值维持原样()。这意味着针对x值的变动施加到变量的复制品上, 而非调用者作用域之内的原始变量。示例代码如下#按值传递参数 # 定义函数checkParameterID带参且按值传递 def checkParameterID(x): print(在checkParameterID函数内x值改变之前其值为 , x, n其id 为, id(x)) # 在函数范围内改变参数x的值 x 20 print(checkParameterID中x的值改变后为, x, n 其id为, id(x)) # 在主程序声明变量x并赋予初始值 x 10 print(调用checkParameterID函数之前x的值是, x, n 其id为, id(x)) # 调用checkParameterID函数 checkParameterID(x) # 函数调用后在主程序中显示关于x的信息 print(调用checkParameterID函数后x的值为, x, n 其id为, id(x))运行输出结果类似如下调用checkParameterID函数之前x的值是 10 其id为 2570870194704 在checkParameterID函数内x值改变之前其值为 10 其id 为 2570870194704 checkParameterID中x的值改变后为 20 其id为 2570870195024 调用checkParameterID函数后x的值为 10 其id为 2570870194704按引用调用/传递在此种情形之下, 函数取得实参也就是初始变量的引用, 并非它的副本。倘若函数内部出现了改变, 那么调用者作用域里原始变量的值同样也会被改动。在其中, 要是可变参数像是列表被传递给函数, 那么调用/传递是经由引用达成的。如下予以展示, 把值5添加到名为y的列表之中。也就是原始可变变量x的值产生了变化, 这证实函数调用/传递参数按照引用达成的特性: 示例代码于下:# 定义函数upDateList 其改变列表内的值 def updateList(y): y y.append(5) return y # 声明列表x 有四个元素值 x [1, 2, 3, 4] print(在调用updateList函数之前x的内容是:, x) # 调用函数updateList print(调用函数updateList) updateList(x) print(调用updateList函数后x的内容为:, x)运行程序输出结果类似如下在调用updateList函数之前x的内容是: [1, 2, 3, 4] 调用函数updateList 调用updateList函数后x的内容为: [1, 2, 3, 4, 5]本文小结本期内容讲解了函数的基础要点, 阐述了其实现的语法规则, 说明了参数传递的情况, 介绍了拥有参数与没有参数的函数形式, 还提到了包含返回值的函数形式, 提及了函数调用以及函数传递是如何实现的。