python中定义函数
定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用return
随时返回函数结果;
函数执行完毕也没有return
语句时,自动return None
。
函数可以同时返回多个值,但其实就是一个tuple。
函数定义
在Python中,定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
</pre><pre name="code" class="python">def f(x):
if x>0:
print('P')
else:
print('n')
return
#对参数类型进行检查
def f(x):
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
if x>0:
print('P')
else:
print('n')
return
如果想定义一个什么事也不做的空函数,可以用pass
语句,pass
语句什么都不做,用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。缺少了pass
,代码运行就会有语法错误。
def nop():
pass
if age >= 18:
pass
函数返回值
Python函数的返回值是一个tuple,tuple可以包含多个值,python可以有多个返回值。
>>> def sub_sum(x,y):
sub=x-y
sums=x+y
return sub,sums
>>> sub_sum(4,2)
(2, 6)
函数别名
#
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
>>> mm=abs
>>> mm(-1)
1
函数参数
Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
定义默认参数
默认参数可以简化函数的调用。设置默认参数时,有几点要注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错
二是如何设置默认参数。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
三是有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
>>> def pows(x,y=2):
s=1
whiley>0:
s=s*x
y=y-1
returns
>>> pows(9)
81
>>> pows(9,3)
729<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
需注意,定义默认参数要牢记一点:默认参数必须指向不变对象。如:
>>>def Lp(l=[]):
l.append('END')
return l
>>>Lp()
['END']
>>>Lp()
['END','END']
>>>Lp()
['END', 'END', 'END']
原因解释如下:
Python函数在定义的时候,默认参数L
的值就被计算出来了,即[]
,因为默认参数L
也是一个变量,它指向对象[]
,每次调用该函数,如果改变了L
的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]
了。
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
对上边例子的修改:
>>>def lp(l=None):
if l is None:
l=[]
l.append('END')
return l
>>>lp()
['END']
>>>lp()
['END']
>>>lp()
['END']
定义可变参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。如对未知个数的元素求和
>>>def Sum(*s):
sums=0
for i in s:
sums=sums+i
return sums
>>>Sum(2,3,4,5,6,7,8,8)
43
定义关键字参数。键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
>>> def Sinfor(**kw):
print(kw)
return
>>> Sinfor(a='1',b='2',c='3')
{'c': '3','b': '2', 'a': '1'}
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
#定义函数接收多种参数类型
deffunc(a,b,c=0,*args,**kw):
print (a,b,c)
print (args)
print (kw)
return
#调用函数 参数先满足最前边的使用
>>>func(1, 2, c=3)
1 23
()
{}
#*args 参数表示可变参数个数
>>>func(1, 2, 3, 'a', 'b')
1 23
('a','b')
{}
#**kw接收dict类型的参数
>>>func(1, 2, 3, 'a', 'b', x=99)
1 23
('a','b')
{'x':99}
#可以定义args和kw 调用函数
>>>args=('a','b','c','d')
>>>kw={'x':1,'y':2,'z':3}
#直接将 tuple 和dict 作为参数传递给函数进行调用
>>>func(1,2,3,*args,**kw)
1 23
('a','b', 'c', 'd')
{'z':3, 'y': 2, 'x': 1}
#在省略前边的参数时,会用后边的参数补到前边的参数中
>>>func(*args,**kw)
a bc
('d',)
{'z':3, 'y': 2, 'x': 1}