函数的定义
在Python中定义函数要使用def
语句,语句如下:
def 函数名(参数列表):
然后在缩进块中编写函数体,返回值用return
def sum(n):
sum=0
m=n
while n>0:
sum=sum+n
n=n-1
print('1~%d相加的结果为:%d'% (m,sum))
sum(10)
执行结果如下:
1~10相加的结果为:55
空函数,可以使用pass语句
def nop():
pass
pass语句什么都不做,可以当作占位符,比如还没想好怎么实现函数,可以先用pass,让代码正确运行。
参数检查
当调用内置函数时,如果参数个数不对,则解释器会自动检查出来,抛出TypeError
但是如果参数类型不对,则检查不出来。
所以为了我们写的程序可以检查出参数类型错误,使用内置函数isinstance()
def sum(n):
if not isinstance(n,(int,float)):
raise TypeError('bad operand type')
sum=0
m=n
while n>0:
sum=sum+n
n=n-1
print('1~%d相加的结果为:%d'% (m,sum))
sum('a')
执行结果为:
返回多个值
在Python中可以返回多个值,如下:
def sum(n):
sum=0
m=n
while n>0:
sum=sum+n
n=n-1
return n, sum
print('1~%d相加的结果为:%d'% sum(100))
执行之后,在交互界面执行sum(100)
所以,返回多个值其实返回的是一个tuple
数据类型转换
int('123') #转换为整数
float(‘12.4’)#转换为浮点数
str('abc') #转换为str字符串类型
bool(1) #输出为True
参数
默认参数
有时候,我们传入不同个数的参数,此时就需要用到默认参数。
注意: 默认参数必须放在最后,因为若放在前面,调用时候,不知道实参放入哪个形参
默认参数列表应该从变化大的参数到变化小的参数。
默认参数应该指向不变对象
可变参数
在函数定义的参数前加上*
则表示使用可变参数,可变参数将函数调用时的参数自动组装成一个tuple。
当不适用可变参数时,实例如下:
def sum(n):
sum=0
m=0
for m in n:
sum=sum+m*m
return sum
执行情况如下:
调用该函数时,需要先组装出一个list或者tuple,而将参数改为可变参数时,我们可以将调用简化为:
def sum(*n):
sum=0
m=0
for m in n:
sum=sum+m*m
return sum
所以不需要先构造一个list,或者tuple。
当需要将一个list或者tuple作为实参,则需要在实参前面加上*
关键字参数
关键字参数在函数内部自动组装成一个dict
关键字参数允许传入0或者任意个含参数名的参数,比如:
def classmates(name,sex,**information):
print('name:',name,'sex:',sex,'other:',information)
从执行结果可以看到,关键字的key不需要加‘
,而value若为字符则需要加上’
关键字参数将传入的实参自动组装成了一个dict,其可以传入任意多的参数,当没有参数时,其为一个空dict。
将现有的一个dict作为实参,实例如下:
代码和上面一样,我们只新建一个dict,然后调用函数。
所以只需要在调用的时候,将dict名前面加上两个*
就ok了。
命名关键字参数
对于关键字参数,可以传入任何关键字参数,但是如果我们需要限制关键字参数的名字,则可以用命名关键字参数,进行限制。比如,如上实例中,只接受age
和city
这两个关键字参数,则可以定义函数如下:
1. 当参数列表中没有可变参数时
def classmates(name,sex,*,age,city):
print('name:',name,'sex:',sex,'other:',information)
命名关键字需要一个分隔符*
在其后面的参数就是命名关键字参数,关键字实参只能包含后面的参数。
调用执行结果如下:
2. 当参数列表中有可变参数时
def classmates(name,sex,*grade,age,city):
print('name:',name,'sex:',sex,'other:','age:',age,'city:',city)
也就是说不需要额外添加一个独立的*
。
调用执行结果如下:
从上面两种情况的执行结果可以看出,当有不是命名关键字中的参数时,会导致出错,而当参数缺少关键字参数时也会导致出错,所以,使用命名关键字,限制要比关键字参数大得多。
总结
在Python中,对于必选参数,默认参数,可变参数,关键字参数和命名关键字参数,可以组合使用,但是顺序必须是:必选参数-默认参数-可变参数-命名关键字参数-关键字参数
默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。