Python中的函数
1.函数定义
1.1 定义一个函数
python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中参数和冒号:然后在缩进中编写函数体,函数的返回值用return 语句返回.
def my_abs(x):
if x>=0:
return x
else:
return -x
注意:没有return语句,函数执行完毕后也会返回None
1.2 定义一个空函数
定义一个什么也不做的函数就是空函数,空函数中使用pass,作为占位符,确保代码能运行起来
def nop():
pass
1.3 函数中的参数检查
函数中参数数据类型检查可以用内置函数isinstance()实现.
def my_abs(x):
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
if x>=0:
return x
else return -x
1.4 返回多个值
python函数返回多个值,实际上是返回一个tuple,在语法上,返回一个tuple可以省略括号,并且,多个变量可以同时接收一个tuple,按位置赋给对应的值.
def multiple_return (x,y):
return x+1,y+1
2.函数的参数
Python中的函数参数定义简单,但非常灵活,除了正常定义的必选参数外,还可以使用默认参数、可变参数、关键字参数等
2.1 位置参数
# 计算x的平方值
def power(x,n):
s = 1
while n > 0 :
n = n -1
s = s*x
return s
上例函数,x,n两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋值给x,n
2.2 默认参数
默认参数给参数赋予默认值
def power(x ,n=2):
s = 1
while n>0:
n = n-1
s = s*x
return s
默认参数注意事项
- 默认参数在必须参数后,否则容易造成歧义
- 当有多个默认参数的时候,可以按顺序提供默认参数,当不按照顺序提供默认参数时,需要把参数名带上.
- 默认参数必须指向不可变对
# 错误示例 def add_end(L = []): L.append('End') return L # 正确 def add_end(L = None): if L is None: L = [] L.append('End') return L
2.3 可变参数
定义一个可变参数只需要在参数前面加一个*,而在函数内部,参数接收的是一个tuple
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n*n
return sum
calc(1,3,5,7)
已有list或者tuple,可以在他们前面加一个星号 list,tuple的元素变成可变参数传进去
nums = [1,3,5]
calc(*nums)
2.4 关键字参数
可变参数允许传入0 或任意个参数,这些可变参数在函数调用时自动组装成一个tuple.而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person (name,age,**kw):
print(name,age,kw)
person('Bob',35,city="BeiJing")
# Bob 35 {'city':'BeiJing'}
**和可变参数类似,也可以先组装一个dict,然后把dict转换关键字参数传入
extra = {'city':'beijking','job':'IT'}
person('Jack',24 ,**extra)
2.5 命名关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数.而命名关键字参数可以限制关键字参数的名字.
# 限制关键字参数只接收city和job作为关键字参数
def person (name,age,*,city,job)
注意事项
-
和命名关键字**kw不同,命名关键字参数需要一个特殊分隔符*, *后面的参数被视为命名关键字参数.
-
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
def person(name,age,*args,city,job) -
命名关键字参数必须传入参数名,和位置参数不同,如果没有传入参数名,调用将会报错
2.6 参数组合
必选参数、默认参数、可变参数、 关键字参数和命名关键字参数,这物种参数都可以组合使用.
但参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
# a = 1 b = 2 c = 4 args = (5, 6) kw = {'city': 'beijing', 'addr': 'chaoyang'}