1.4. 函数

1.4.1. 调用函数

abs(-10)

1.4.2. 定义函数

def my_abs(n):
   if n< 0:
      reutrn -n
   else:
      return n

1.4.3. 空函数

def f():
   pass

1.4.4. 参数校验

def my_abs(n):
   if not isinstance(x, (int, float)):
      raise TypeError('bad operand type')
   if n< 0:
      reutrn -n
   else:
      return n

1.4.5. 多返回值

返回值是一个元组默认, 当然可以自己封装为一个class或者字典等。

def move(x,y,x_offset,y_offset):
   return x + x_offset , y+y_offset

1.4.6. 函数默认值

def pow(x,n=2):
   return x ** n

1.4.7. 可变参数

def calc(numbers):
 sum = 0
 for n in numbers:
     sum = sum + n * n
 return sum

calc(1,2,3)
calc([1,2])

1.4.8. 关键字参数

def person(name, age, **kw):
   print('name:', name, 'age:', age, 'other:', kw)

1.4.9. 参数组合

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

def f1(a,b,c=0,*args,**kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

In [2]:    def f1(a,b,c=0,*args,**kw):
...:      print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
...:

In [3]: f1(1,2)
a = 1 b = 2 c = 0 args = () kw = {}

In [4]: f1(1,2,3)
a = 1 b = 2 c = 3 args = () kw = {}

In [5]: f1(1,2,3,4)
a = 1 b = 2 c = 3 args = (4,) kw = {}


In [7]: f1(1,2,3,4,5,aaa=1,bbbb=2)
a = 1 b = 2 c = 3 args = (4, 5) kw = {'aaa': 1, 'bbbb': 2}

In [8]: args=(1,2,4,5)

In [9]: kw={"age":20}

In [10]: f1(args,kw)
a = (1, 2, 4, 5) b = {'age': 20} c = 0 args = () kw = {}

In [11]: f1(*args,**kw)
a = 1 b = 2 c = 4 args = (5,) kw = {'age': 20}

1.4.10. 递归函数

def fact(n):
   if n==1:
      return 1
   return fact(n-1) * n