python函数的参数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def my_abs(x): 2 if x >= 0: 3 return x 4 else: 5 return -x
调用模块中的函数:
1 from abstest import my_abs
Python中没有内容的空函数:
def nop(): pass
参数数据类型检查,可以用内置函数isinstance()实现,如果传入错误的参数类型,函数就可以抛出一个错误。
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
默认参数必须指向不变对象!
def add_end(L=None): if L is None: L = [] L.append('END') return L
位置参数,只能传入一个参数:
1 def calc(numbers): 2 sum = 0 3 for n in numbers: 4 sum = sum + n * n 5 return sum 6 7 calc([1,2,3]) 8 calc((1,2,3))
可变参数,可以传入多个参数,这些可变参数在函数调用时自动组装为一个tuple:
1 def calc(*numbers): 2 sum = 0 3 for n in numbers: 4 sum = sum + n * n 5 return sum 6 7 calc(1,2,3) 8 calc(*[1,2,3]) 9 calc(*(1,2,3))
关键字参数,可以传入多个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict:
1 def person(name, age, **kw): 2 print('name:', name, 'age:', age, 'other:', kw) 3 4 person('Jack', 24, city='Beijing', job='Engineer') 5 person('Jack', 24, **{'city': 'Beijing', 'job': 'Engineer'})
命名关键字参数,可以限制关键字参数的名字,命名关键字参数必须传入参数名,命名关键字参数可以有缺省值:
1 def person(name, age, *, city='Beijing', job): 2 print('name:', name, 'age:', age, 'city:', city, 'job:', job) 3 4 person('Jack', 24, city='Beijing', job='Engineer') 5 person('Jack', 24, job='Engineer')
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
了:
1 def person(name, age, *args, city, job): 2 print('name:', name, 'age:', age, args, 'city:', city, 'job:', job)
请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。