作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tuto...本文地址:http://www.showmeai.tech/article-detail/81声明:版权所有保留,转载请联系平台和作者并注明出处1.Python函数函数是用于实现单个或相关功能的有组织的、可重用的代码段。函数可以提高应用程序的模块化和代码的重用率。您已经知道Python提供了许多内置函数,例如print()。但您也可以创建自己的函数,称为用户定义函数。2.定义一个函数你可以定义一个你想要的函数。以下是一些简单的规则:函数代码块以def关键字开头,后面是函数标识符名称和圆括号()。任何传入的参数和自变量都必须放在括号之间,可以用来定义参数。函数的第一条语句可以选择使用文档字符串——用于存储函数描述。函数内容以冒号:开头并缩进。return[expression]结束函数,可选地返回一个值给调用者,returnwithoutexpression等同于返回None。(1)语法Python使用def关键字定义函数,一般格式如下:def函数名(参数列表):函数体默认情况下,参数值和参数名按照函数中定义的顺序进行匹配宣言。下面是一个示例代码(代码可以在在线python3环境下运行):让我们用一个函数来输出“HelloWorld!”:defhello():print(“HelloWorld!”)hello()比较复杂applications,function把参数变量放在中间:defmy_max(a,b):ifa>b:returnaelse:returnba=4b=5print(my_max(a,b))上面例子的输出结果:5计算面积函数,举例代码(代码可在在线python3环境下运行):#计算面积函数defcal_area(width,height):returnwidth*heightdefmy_welcome(name):print("Welcome",name)my_welcome("ShowMeAI")w=4h=5print("width=",w,"height=",h,"area=",cal_area(w,h))上面例子的输出:WelcomeShowMeAIwidth=4height=5area=203.函数调用定义了一个Function:给函数起一个名字,指定函数包含的参数,指定代码块结构。完成此函数的基本结构后,您可以通过另一个函数调用或直接从Python命令提示符执行它。以下代码调用print_myself()函数:#定义函数defprint_myself(str):#打印任何传入的字符串print(str)return#调用函数print_myself("Calltheuser-definedfunction!")print_myself("Call又是同一个函数”)上面例子的输出:调用用户自定义函数!再次调用同样的函数》上面代码中,[1,2,3]是List类型,“ShowMeAI”是String类型,变量a没有类型,只是一个an的引用(指针)object,可以指向List类型的对象,也可以是String类型对象的指针(1)可变和不可变对象在python中,strings,tuples,numbers是不可变对象,而list,dict等。是可修改的对象,不可变类型:变量赋值a=10,然后赋值a=5,这里其实是新生成一个int值对象5,然后让a指向它,10被丢弃,而不是改变a的值,相当于新生成一个.变量类型:变量赋值l=[1,2,3,4]然后赋值l[2]=5是改变listl的第三个元素的值,l本身做的没有移动,只是修改了一部分内部值python函数的参数传递:不可变类型:C++-likevaluepassing,suchasintegers,strings,tuples.例如,func(a)、只传递a的值,不影响a对象本身。如果在func(a)中修改了a的值,则新生成一个a的对象。可变类型:类似于C++的引用传递,例如列表、字典。比如func(l)就是把l传过去。修改后,loutsidefunc也会受到影响。python中的一切都是对象。严格来说,我们不能说是按值传递还是按引用传递。我们应该说传递不可变对象和传递可变对象。(2)Python通过id()函数传递不可变对象实例,查看内存地址变化:defmy_change(a):print(id(a))#指向同一个对象a=10print(id(a))#Anewobjecta=5print(id(a))my_change(a)上面例子的输出为:978873697887369788896可以看出调用函数前后,形参和实参指向同一个对象(对象id相同),在函数内部修改形参后,形参指向不同的id。(3)传递一个可变对象实例如果可变对象修改了函数中的参数,那么在调用这个函数的函数中,原来的参数也被改变了。下面是示例代码(代码可以在在线python3环境下运行):defchange_list(mylist):"修改传入的列表"mylist.append([1,2,3,4])print("Thevalueinthefunction:",mylist)return#调用changeme函数mylist=[10,20,30]change_list(mylist)print("valueoutsidethefunction:",mylist)传入函数的对象和添加的对象最后使用相同的参考。因此,输出结果如下:函数内的值:[10,20,30,[1,2,3,4]]函数外的值:[10,20,30,[1,2,3,4]]5.Parameters以下是调用函数时可以使用的官方参数类型:必需参数关键字参数默认参数可变长度参数(1)必需参数必需参数必须传入函数中正确的顺序。通话时的号码必须与申报时的号码相同。调用print_myself()函数,必须传入参数,否则会出现语法错误:defprint_myself(str):"Printanystringpassedin"print(str)return#调用print_myself函数,不带参数,会报错print_myself()上面例子的输出:Traceback(mostrecentcalllast):File"test.py",line10,inprint_myself()TypeError:print_myself()missing1requiredpositionalargument:'str'(2)keyWordParameters关键字参数与函数调用密切相关,函数调用使用关键字参数来确定传入参数的值。使用关键字参数允许参数的顺序在调用函数时与声明时不同,因为Python解释器能够将参数值与参数名称匹配。以下示例使用函数print_myself()调用时的参数名称:defprint_myself(str):"Printanyincomingstring"print(str)return#Calltheprint_myselffunctionprint_myself(str="ShowMeAIKnowledgeCommunity")的输出上面例子的结果:ShowMeAI知识社区下面的示例代码(在线python3环境)演示函数参数的使用不需要按顺序指定:defprint_info(name,age):"Printanyincomingstring"print("name:",name)print("age:",age)return#调用print_info函数print_info(age=30,name="ShowMeAI")上面的例子输出结果:name:ShowMeAIage:30(3)当使用默认参数调用函数,如果没有传递参数,将使用默认参数。以下代码中(在线python3环境),如果不传入age参数,则使用默认值:defprint_info(name,age=35):"打印任何传入的字符串"print("name:",name)print("Age:",age)return#调用print_info函数print_info(age=30,name="ShowMeAI")print("------------------------")print_info(name="ShowMeAI")上面例子的输出:姓名:ShowMeAI年龄:30-------------------------姓名:ShowMeAI年龄:35(4)不定长度参数您可能需要一个可以处理比最初声明的参数更多的函数。这些参数称为可变长度参数。与上面两类参数不同的是,它们在声明时不会被命名。基本语法如下:deffunction_name([formal_args,]*var_args_tuple):"function_documentstring"function_suitereturn[expression]带有星号*的参数将以元组的形式导入,存储所有未命名的Variable参数。defprint_info(arg1,*vartuple):"Printanyincomingparameters"print("Output:")print(arg1)print(vartuple)#调用print_info函数print_info(100,90,80)上面例子的输出结果:output:100(90,80)如果在函数调用中没有指定参数,它是一个空元组。我们也不能将未命名的变量传递给函数。如下代码(在线python3环境):defprint_info(arg1,*vartuple):"Printanyincomingparameters"print("Output:")print(arg1)forvarinvartuple:print(var)return#调用printinfo函数print_info(100)print_info(90,80,70)上面例子的输出:Output:100Output:908070还有一个带两个星号的参数**基本语法如下:deffunction_name([formal_args,]**var_args_dict):"function_docstring"function_suitereturn[expression]带有两个星号**的参数将作为字典导入。defprint_info(arg1,**vardict):"Printanyincomingparameters"print("Output:")print(arg1)print(vardict)#调用print_info函数print_info(1,a=2,b=3)以上示例输出结果:output:1{'a':2,'b':3}声明函数时,参数中的星号*可以单独出现,例如:deff(a,b,*,c):returna+如果b+c单独出现,星号*后面的参数必须带关键字传入。deff(a,b,*,c):returna+b+cf(1,2,c=3)#正常f(1,2,3)#错误6.匿名函数python使用lambda创建匿名函数.所谓匿名,就是一个函数不再以def语句这样的标准形式定义。lambda只是一个表达式,函数体比def要简单的多。lambda的主体是一个表达式,而不是代码块。lambda表达式只能封装有限的逻辑。lambda函数有自己的命名空间,不能访问自己的参数列表之外或全局命名空间中的参数。虽然看起来lambda函数只能写一行,但并不等同于C或C++的内联函数。后者的目的是通过在调用小函数时不占用栈内存来提高运行效率。(1)语法lambda函数的语法只包含一条语句,如下所示:lambda[arg1[,arg2,.....argn]]:expression如下示例:my_sum=lambdaarg1,arg2:arg1+arg2#调用my_sum函数print("相加的值为:",my_sum(10,20))print("相加的值为:",my_sum(20,20))上例输出结果为:相加的值是:30添加的值为:407.returnstatementreturn[expression]语句用于退出函数并有选择地返回一个表达式给调用者。没有参数值的return语句返回None。前面的示例都没有演示如何返回值。下面的例子演示了return语句的使用:defmy_sum(arg1,arg2):#返回两个参数的和。"total=arg1+arg2print("Insidethefunction:",total)returntotal#调用sumfunctiontotal=my_sum(10,20)print("Outsidethefunction:",total)上面例子的输出:Insidethefunction:30Outsidethefunction:308.强制位置参数Python3.8+新增了一个函数参数语法/用于表示函数参数必须使用指定位置的参数,不能使用关键字参数的形式。在下面的例子中,参数a和b必须指定位置参数,c或d可以是位置参数或关键字参数,e和f必须是关键字参数:deff(a,b,/,c,d,*,e,f):print(a,b,c,d,e,f)正确使用:f(10,20,30,d=40,e=50,f=60)会报错使用以下方法时出现:f(10,b=20,c=30,d=40,e=50,f=60)#b不能使用关键字参数形式f(10,20,30,40,50,f=60)#e必须使用关键字参数的形式9.视频教程也可以点这里查看B站有【中英文字幕】的版本https://www.bilibili.com/视频。..https://www.bilibili.com/video...资料及代码下载本教程系列代码可在ShowMeAI对应的github上下载。它可以在本地python环境中运行。会上网的宝宝也可以直接用GoogleColab一键操作互动操作学习!本系列教程涉及的Python备忘单可在以下地址下载:Python备忘单扩展参考资料Python教程-Python3文档Python教程-廖雪峰官网ShowMeAI相关文章推荐python基本数据类型python运算符python条件控制和if语句python循环语句pythonwhile循环pythonfor循环pythonbreak语句pythoncontinue语句pythonpass语句python字符串和操作pythonlistpythontuplepython字典pythonsetpython函数python迭代器和生成器Python数据结构Python模块Python文件读写Python文件和目录操作Python错误和异常处理Python面向对象编程PythonNamespaceandScopePythonTimeandDateShowMeAI系列教程推荐图Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程ls图解AI数学基础:从入门到大师系列教程图解大数据技术:从入门到大师系列教程