1.定义函数:
在Python中,定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。如果一个函数什么也不做,需要用到pass语句(C,Java中可以直接不写代码,python必须要写pass占位,否则报错)。
def my_abs(x): if x >= 0: return x else: return -x
2.参数检查:
isinstance(object, classinfo),其第一个参数为对象,第二个为类型名或类型名的一个列表。其返回值为布尔型。若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError(‘bad operand type‘) if x >= 0: return x else: return -x
3.返回多个值:
python参数可以返回多个值,实质上是返回一个元组。多个变量可以同时接收一个元组,按位置赋值。
4. 关于参数:
4.1 默认参数:
python的函数参数可以设置一个默认值,当不传入相应的参数时,就按默认值处理。如下面的示例打印的都是25。
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s print power(5) print power(5, 2)
有多个默认参数时,可以按顺序传入,也可以使用“参数名=参数值”的形式传递。
def enroll(name, gender, age=6, city=‘Beijing‘): print ‘name:‘, name print ‘gender:‘, gender print ‘age:‘, age print ‘city:‘, cityenroll(‘Adam‘, ‘M‘, city = ‘Chengdu‘)enroll(‘Tom‘, ‘M‘, 7)
默认参数值一般来说为不可变对象,否则默认参数值可能会随着调用而改变。例如:
def add_end(L=[]): L.append(‘END‘) return Lprint add_end(),print add_end()
输出是[‘END‘]
[‘END‘, ‘END‘]。
4.2 可变参数:
可变参数就是传入的参数个数是可变的,其实也可以通过列表或元组来实现。可变参数如下所示:
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
print calc(1, 2, 3)print calc()
如果要传入的参数存储在列表中,可以 calc(*listname) 。
4.3 关键字参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。关键字参数前面加**,示例如下:
def person(name, age, **kw):
print ‘name:‘, name, ‘age:‘, age, ‘other:‘, kw
print person(‘Bob‘, 35, city=‘Beijing‘)kw = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
print person(‘Jack‘, 24, **kw)
4.4 参数组合:
4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
def func(a, b, c=0, *args, **kw): print ‘a =‘, a, ‘b =‘, b, ‘c =‘, c, ‘args =‘, args, ‘kw =‘, kw
args = (1, 2, 3, 4)
kw = {‘x‘: 99}
print func(*args, **kw) #对于任意函数,都可以通过func(*args, **kw)
的形式调用它
# 打印结果:a = 1 b = 2 c = 3 args = (4,) kw = {‘x‘: 99}