当前位置: 首页 > 科技观察

Python编程:轻松掌握函数定义、类型及其参数传递方式

时间:2023-03-14 21:23:32 科技观察

前言方式。函数含义函数是执行特定任务的语句块,是允许程序员重用的代码的一部分,它促进了软件程序中模块化的概念。这种方法背后的主要思想是将一个大代码块分成更小的独立子块,从而更易于管理。Python中有两类函数:内置函数(Build-in):这些函数可以在程序中直接使用,而无需在编程时定义它们。这类函数在刚开始学习时经常用到(例如print()、input()、sum()等)。用户自定义函数(User-defined):Python允许程序员创建自己的函数。接下来将突出显示此特定功能类型。简而言之,函数是定义好的结构化语句块,可以重复调用。函数具有唯一的名称,可以接收参数,并根据需要将相应的结果(值)返回给调用者,或者不返回任何值。函数定义Python中定义函数的主要规则如下:函数块以关键字def开头,后跟函数名和括号。请注意,您必须使用def而不是Def,因为Python区分大小写。与变量名一样,函数名可以包含字母或数字,但不能包含空格或特殊字符,也不能以数字开头。可选的输入参数(称为参数)应括在括号中-参数的数量和类型根据需要提供。函数名后跟一个冒号,通常函数内的语句块以冒号后的换行符开头并缩进。返回数据的函数必须在其代码块中包含关键字return。总结起来,函数有四种类型:无参数无返回值的函数;有参数无返回值的函数;没有参数和返回值的函数;有参数和返回值的函数。函数定义的语法格式如下:deffunctionName(var1,var2,…etc.):语句根据实际参数的存在与否以及输入和/或返回值的存在,函数可以分为以上四种可能的类型。下面将分别对其进行介绍。无参数不返回函数在这种类型中,函数不接受变量作为参数并且不返回任何数据。例如,下面的脚本演示了这个函数,它只在屏幕上打印一个预定义的字符串。代码很明显,定义中有形参,调用时没有实参,语句块中也没有return语句。该结构简单地调用print()函数来显示所需的消息。在主程序中调用这样的函数相当简单,如下:#定义一个既不带参数也不返回值的函数defprintSomething():print('Helloworld')#在主程序中直接调用printSomething()运行后该程序,输出结果为:Helloworldfunctionwithparametersandnoreturnvalue另一种函数接受变量作为参数,但不返回任何数据。在下面的示例中,函数通过其声明的名称调用,同时将一些值包含在被调用函数的括号中。这些值被传递给函数的主体使用,可以被视为普通变量:#定义一个接受参数但不返回值的函数defprintMyName(fName,lName):print('你的名字是:',fName,lName)#TipsTheuserenterthenamefirstName=input('Enteryourfirstname:')lastName=input('Enteryourlastname:')#调用主程序中定义的函数printMyName(firstName,lastName)来运行程序,结果类似如下:Enteryourfirstname:SoloEnteryourlastname:CuiYournameis:SoloCui没有参数和返回值的函数第三种是不接受参数但返回数据的函数。重要的是要记住,因为这种类型的函数会向调用代码返回一个值,所以必须先将此值分配给一个变量,然后才能使用或处理它。例子如下:#定义一个没有参数但有返回值的函数defreturnFloatNumber():inputFloat=float(input('请输入一个数字,返回给主程序:'))returninputFloat#Themain程序调用该函数并显示输入结果x=returnFloatNumber()print('输入的数字是:',x)程序运行结果类似如下:输入一个数字,返回给main程序:5.7输入数为::5.7有带参数和返回值的函数。这种类型的函数既接受参数又向调用代码返回一个值。以下情况的示例。在这种情况下,函数调用必须包含参数列表并将返回值分配给特定变量以供以后使用:#hasparametersandreturnsfunctiondefcalculateSum(number1,number2):print('Calculatetwonumbersand.')return(number1+number2)#接受用户输入的两个数num1=float(input('请输入第一个数:'))num2=float(input('请输入第二个数:'))#调用函数计算两个numbersandaddNumbers=calculateSum(num1,num2)#Outputtwonumbersandprint('Thesumoftwonumbersis:',addNumbers)程序运行结果类似如下:输入第一个数:3输入第二个数number:5计算两个数之和...两个数之和为::8.0函数参数传递函数参数传递有两种不同的方式。确定选择两者中的哪一个应取决于原始变量的值是否可以在函数内更改。给函数传递参数值有两种方式,俗称按值调用/传递和按引用调用/传递。综上,函数参数传递:一是按值:参数是原变量的副本,保持副本不变,不改变原值;二、通过引用:改变直接作用于原变量,从而改变原变量值。按值调用/传递在这种情况下,实际参数(形式参数)的值被视为原始变量的副本。因此,当程序控制返回给调用者时,调用者范围内的原始变量保持不变。在Python中,如果将不可变参数(例如,整数和字符串)传递给函数,通常的做法是按值调用/传递参数。下面的例子通过引入id()函数来说明这种情况。它以一个对象作为参数(即id(object))并返回这个特定对象的标识。Id()返回值是一个整数,该整数在对象的生命周期内是唯一且永久的。如示例所示,在调用checkParameterID函数之前,变量x的ID为4564813232。需要注意的是,只要x的值不更新,函数中x的id就不会改变。但是,一旦值更新为20,其对应的id将变为4564813552。最需要注意的是调用函数后x的id没有改变,其原始值保持不变(4564813232)。这意味着对x值的更改将应用??于变量的副本,而不是调用者作用域中的原始变量。示例代码如下:#传值传参#定义函数'checkParameterID'带参数传值defcheckParameterID(x):print('checkParameterID函数中x的值为',x,'\nbeforeitchangesidis',id(x))#在函数范围内改变参数x的值x=20print('checkParameterID中x的值改为',x,'\n它的id是',id(x))#在主程序中声明变量x并赋初值x=10print('调用checkParameterID函数前x的值为',x,'\n其id为',id(x))#调用'checkParameterID'函数checkParameterID(x)#调用函数后在主程序中显示'x'的信息print('调用checkParameterID函数后x的值',x,'\nitsidis',id(x))运行输出类似如下:调用checkParameterID函数之前,x的值为10,其id为2570870194704x的值之前changes在checkParameterID函数中,其值为10,其id为2570870194704checkParameterID中x的值发生变化后,其id为20,其id为2570870195024调用checkParameterID函数后,x的值为10。id2570870194704通过引用调用/传递在这种情况下,函数获取对实际参数的引用(即原始变量),而不是它的副本。如果函数内发生变化,调用者范围内的原始变量的值也将被修改。在Python中,如果将可变参数(如列表)传递给函数,则调用/传递是通过引用。如下所示,updateList将值5附加到名为y的列表。也就是说,原来的可变变量x的值发生了变化,证明了函数通过引用调用/传递参数的特性。示例代码如下:#定义函数'upDateList'改变列表中的值defupdateList(y):y=y.append(5)returny#声明列表'x'有四个元素Valuex=[1,2,3,4]print('调用updateList函数前,x的内容为:',x)#调用函数'updateList'print('调用函数updateList')updateList(x)print('调用updateList函数后x的内容运行程序的输出为:',x)类似如下:在调用updateList函数之前,x的内容为:[1,2,3,4]之后调用函数updateList,x的内容为:[1,2,3,4,5]本文总结了本期内容,介绍了函数的基本内容和实现语法,以及参数传递、函数形式与并且没有参数和返回值,以及函数调用/传递的实现。