Python函数全解析:从定义到调用,一文掌握
Python的函数都有哪些?
Python函数
函数是结构化的、可重用的代码段,用于实现单个或相关的函数。
函数可以提高应用程序的模块化和代码的可重用性。
您已经知道Python提供了许多内置函数,例如print()。
但您也可以创建自己的函数,称为用户定义函数。
定义函数
你可以用你想要的函数定义一个函数,以下是简单的规则:
函数代码块以关键字def开头,后跟函数标识符名称和括号()。
任何传入参数和实参都必须用括号括起来。
参数可以在括号中定义。
函数的第一行可以选择使用文档字符串-用于存储函数描述。
函数的内容以冒号开头并缩进。
return[表达式]结束函数并可选择向调用者返回一个值。
不返回任何表达式相当于什么也不返回。
语法
deffunctionname(parameters):"function_docstring"function_suitereturn[表达式]
默认情况下,参数值和参数名称的顺序为函数声明中的定义匹配。
示例
下面是一个简单的Python函数,它将字符串作为输入参数并将其打印到标准显示设备。
示例(Python2.0+)
defprintme(str):"将传入的字符串打印到标准显示"printstrreturn
函数调用
函数定义仅给出函数的名称、定义函数中的参数以及代码块的结构。
完成该函数的基本语法后,您可以通过调用另一个函数或直接从Python提示符来执行它。
以下示例调用printme()函数:
示例(Python2.0+)
#!/usr/bin/python#-*-表示法:UTF-8-*-#defpfunctionrintme(str):"打印任何传入的字符串"printstrreturn#调用函数printme("我想调用一个用户定义的函数!")printme("调用同一个函数一次其他”)
以上示例输出结果:
我想调用用户定义的函数!再次调用同一个函数传递参数
Python中,类型属于对象,变量没有类型:
a=[1,2,3]a="ronop"
上面的代码中,[1,2,3]是一个列表类型,“Runob”是一个字符串类型,而变量a没有类型,它只是一个对对象的引用(指针)。
它可以是一个List对象,也可以引用一个String对象。
可变和不可变对象
在Python中,字符串、元组和数字是不可变对象,而列表、字典等可以是不可变对象。
修改的。
不可变类型:变量设置为a=5后,又设置为a=10。
这里实际上创建了一个新的int值对象10,记为a,忽略5,它并没有改变a的值,相当于新创建了a。
变量类型:设置变量la=[1,2,3,4],然后设置la[2]=5,改变了listla中第三个元素的值,但la本身并没有移动,仅修改了其部分内部值。
向Python函数传递参数:
不可变类型:类似于C++值传递,例如整数、字符串和元组。
例如,fun(a)只传输a的值,并不影响对象本身。
例如,修改内部fun(a)的值只会修改另一个复制对象,不会影响该对象本身。
变量类型:类似于C++中的移动引用,例如列表和字典。
比如fun(la),la其实是修改后传给它的,外部的fun也会受到影响
Python中的一切都是严格意义上的对象,我们无法决定是传还是传不是值或通过引用它,我们应该讨论传递不可变对象和传递可变对象。
Python传递不可变对象实例
实例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-defChangeInt(a):a=10b=2ChangeInt(b)printb#结果为2
实例中有一个int对象2,它指向的变量为b。
通过变量b的值来复制它,其中a和b都指向同一个Int对象,当a=10时,创建一个新的int值对象10,点指向它。
移动可变对象的实例
实例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defchangeme(mylist):"修改传入的列表值"mylist.append([1,2,3,4])print"函数内部:",mylistreturn#调用更改功能mylist=[10,20,30]changeme(mylist)print"externalfunctionvalue:",mylist
实例中传递给函数的对象和最后添加新内容的对象使用相同的引用,所以输出结果如下:
函数内的值:[10,20,30,[1,2,3,4]]函数外的值:[10,20,30,[1,2,3,4]]参数
以下是调用函数时可以使用的形参类型:
必选参数
关键字参数
默认参数
可变长参数
必选参数
必选参数必须以正确的顺序传递给作业。
致电时的数量必须与广告时的数量相同。
调用printme()函数时,必须传递参数,否则会出现语法错误:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defprintme(str):"打印任何传入的字符串"printstrreturn#调用printme函数printme()
上例的结果输出:
Traceback(mostrecentcalllast):File"test.py",line11,in关键字参数
关键字参数与函数调用密切相关。
函数调用使用关键字parameters来指定传递的参数的值。
使用关键字参数允许以与声明不同的顺序调用函数,因为Python解释器可以将参数名称与参数值进行匹配。
以下示例在调用printme()函数时使用参数名称:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defprintme(str):"打印任何传入的字符串"printstrreturn#调用printme函数printme(str="Mystring")
输出结果举例上图:
Mystring下面的示例可以让不重要的关键字参数的排名显示得更加清晰:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defprintinfo(name,age):"打印任何传入的字符串"print"Name":,"打印姓名"age",agepeturn#调用用printinfo函数printinfo(age=50,name="miki")
上例输出结果:
Name:mikiAge50默认参数
函数调用时,如果未传递默认参数值,则视为默认,下面的示例将在未传递生存期时打印默认生存期:
示例。
(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defprintinfo(name,age=35):"打印任何传入的string"print"Name:",nameprint"Age",agereturn#调用printinfo函数printinfo(age=50,name="miki")printinfo(name="miki")
结果上面示例的输出:
Name:mikiAge50Name:mikiAge35可变长度参数
您可能需要一个能够处理比最初声明时更多参数的函数。
这些参数称为变长参数,与上面提到的两个参数不同,它们在声明时不会被命名。
基本语法如下:
deffunctionname([formal_args,]*var_args_tuple):"function_documentationstring"function_suitereturn[expression]
添加星号(*)的变量名称将存储所有未命名的变量参数。
变长参数示例如下:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#函数说明可写defprintinfo(arg1,*vartuple):"打印任何传入参数"print"输出:"printarg1forvarinvartuple:printvarreturn#调用printinfo函数printinfo(10)printinfo(70,60,50)
上例输出结果:
输出:10输出:706050匿名函数
Python使用lambda创建匿名函数。
lambda只是一个表达式,函数体比def简单“多”。
lambda主体是一个表达式,而不是代码块。
有限逻辑只能封装在lambda表达式中。
lambda函数有自己的命名空间,无法访问其参数列表之外或全局命名空间中的参数。
虽然lambda函数看起来只能写一行,但它并不等同于C或C++中的内置函数,后者的目的是调用小函数而不占用堆栈内存,从而提高运行效率。
语法
lambda函数的语法仅包含一个表达式,如下所示:
lambda[arg1[,arg2,.....argn]]:expression以下示例:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-#Writable职位描述总和=lambdaarg1,arg2:arg1+arg2#调用sum函数print"相加的值为:",sum(10,20)print"相加的值为:"sum(20,20)
输出结果上例中:
增加的值为:30添加的值为:40返回语句
返回语句[表达式]退出函数并有选择地返回调用者返回的表达式。
没有参数值的return语句不会返回任何内容。
前面的示例没有解释如何返回值。
以下示例将告诉您如何执行此操作:
示例(Python2.0+)
#!/usr/bin。
/python#-*-coding:UTF-8-*-#Writable函数说明defsum(arg1,arg2):#返回两个参数的和。
"Total=arg1+arg2print"函数内部:,"返回总计#调用total函数=sum(10,20)
上面例子的结果:
函数内部:30变量范围
所有程序变量都是不在哪个位置的访问权限取决于变量设置的位置
变量的作用域决定了你可以访问程序的哪一部分,具体变量的名称如下:全局变量
局部变量<.p>
定义全局变量和局部变量
函数内部定义的变量具有局部作用域,函数外部定义的变量具有全局作用域
局部变量变量只能在声明它们的函数内部访问,而全局变量可以通过函数访问。
整个程序调用函数时,所有变量名称都在函数内声明,名称将添加到作用域中,如下所示:
示例(Python2.0+)
#!/usr/bin/python#-*-coding:UTF-8-*-total=0#这是局部变量sum#可写函数说明defsum(arg1,arg2):#返回两个参数的和。
"Total=arg1+arg2#total是局部变量这里print"是变量Localinfunction:"totalreturntotal#调用sumfunctionsum(10,20)print"函数外的全局变量:",total
上例输出结果:
函数内的局部变量:30函数外变量的全局性:0python中类内部的函数可以互相调用吗?
例如可以这样调用:common_func被多个函数调用。classMyClass:def__init__(self):passdeffunc1(self):#dosomethingselfcommon_func()deffunc2(self):#dosomethingselfcommon_func()defcommon_func(self):passPasspython中类内的函数可以互相调用吗?
python函数有哪些
这还是有点大了。大的肯定有很多,比如它的艺术功能,或者上面提到的总结,然后还有不同的类型。