定义函数
普通函数定义
通过def关键字定义函数,之后跟函数名称和小括号包裹的参数列表,之后跟一个冒号,在其后编写函数体。
函数体的第一行内容 ,可以直接是一个字符串,此字符串不影响函数体的内容,相当于是该方法的文档声明,用来描述函数的功能,可以在后续查看。
函数内容需要缩进。
通过return关键字在函数内部返回,并可以选择性返回一个返回值,如果return后没有明确的返回值,则默认返回的是一个None。
def functionname( parameters ): "函数_文档字符串" function_suite return [expression] |
|
示例:
#定义函数 def sumx(n1,n2): "两数求和函数" return n1 + n2 |
函数直接量定义函数
通过lambda表达式来声明一个函数,lambda关键字之后跟参数列表,再跟冒号,之后是函数的体,这种方式声明的函数函数体只能是一个表达式,如果函数体有多条语句,则无法通过此方式定义。
funcx = lambda arg1, arg2: arg1 + arg2; |
|
案例:
#函数直接量定义函数 sumx = lambda n1,n2:n1+n2; print(sumx(2,3)) |
函数的调用
通过函数名之后跟小括号传入参数值就可以用调用函数了
函数调用过程中,也可以在实参列表中明确的指定实参要赋值给哪一个形参,从而实参 列表的顺序可以和形参列表不同
#调用函数 r = sumx(2,3) print(r) r = sumx(n2 = 2,n3 = 3) |
|
缺省参数
在定义函数的过程中,可以为全部或部分函数参数指定默认值,则在调用函数的过程中可以 选择性的不传入这些参数,则这些参数采用默认值执行函数。
#缺省参数 def sumx2(n1,n2=10): return n1 + n2 print(sumx2(2,3)) print(sumx2(2)) |
|
不定长参数
类似于java中的可变参数,python中的函数也可以具有不定长的参数,未来再调用时可以传入0个或多个实参,而在函数的内部可以按照使用数组的方式使用该不定长参数。
可以通过在形参名称之前加*号,将参数设定为不定长参数。
一个函数中,不定长参数最多只能有一个,且必须出现在函数参数列表的最后一位。
#不定长参数 def sumx4(*nums): sum = 0 for n in nums: sum += n return sum r = sumx4(2,3,4) print(r) r = sumx4(2,3,4,5,6) print(r) |
函数是一等公民
在python中函数是一等公民,具有完整的能力,属性能做的函数都可以做。
赋值给引用
def sumx1(n1,n2): return n1 + n2; sumx2 = lambda n1,n2:n1+n2; sumx3 = sumx2 sumx4 = sumx1 sumx1 = None sumx2 = None |
作为类的成员
#函数作为类的成员 class Person: name="zs" age=19 def eat(self,food): print("吃。。。"+food) def sleep(self): print("睡。。。") |
作为局部成员
#函数作为局部成员 def eat(food): zl = "孜然" def cook(food): return "做熟"+food +"加" + zl print("吃"+cook(food)) |
高阶函数作为方法参数
#高阶函数 将函数作为方法参数传递 def eatx(food,how2Cook): food2 = how2Cook(food) print("吃。。"+food2) def cookYRC(food): return "烤熟"+food eatx("羊肉串",cookYRC) eatx("涮羊肉",lambda food:"煮熟"+food) |
高阶函数作为方法返回值
#高阶函数 将函数作为另一个函数 的返回值返回 def lookUpCaiPu(cai): if cai == "羊肉串": def cookYRC(food): return "烤熟"+food return cookYRC elif cai == "涮羊肉": return lambda food:"煮熟"+food; else: return lambda food:"做熟"+food; cookFunc= lookUpCaiPu("涮羊肉") print(cookFunc("羊肉")) |