pyhton 函数





在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。如下为一个自己定义的绝对值函数:

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。

上面的代码在碰到接收值为非数字时,会导致IF判断出错,而出错信息和真正的ABS不一样:

>>> my_abs('x')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()

 

 

所以可以对代码稍加修改,增加一段对接收参数类型的判断:

 

def my_abs(x):

    if not isinstance(x, (int, float)):

        raise TypeError('bad operand type')

    if x >= 0:

        return x

    else:

        return -x

 

这样遇到错误的参数类型就能抛出正确的错误信息:

>>> my_abs('x')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "E:\python\test.py", line 3, in my_abs
      raise TypeError('bad operand type')
TypeError: bad operand type

 

python也支持接收多个参数,并且同时获得多个返回值:

def test(x,y):
       x=x+1
       y=y+2
       n=x*y
       m=x+y
       return n,m

 

>>> test(2,3)
(15, 8)

 

递归函数:

当我们设计一个阶乘的函数时,就可以使用递归函数:

 

def test(n)
    if n==1:
        return 1
    return test(n-1)

 

使用递归函数计算汉诺塔的移动:

 

def move(n,a,b,c):
    if n == 1: # 只有一个盘子时,直接从a移动到c
        print(a,'–>',c)
        return
    move(n-1,a,c,b) # 大于一个盘子时,开始递归,首先将第n-1个盘子从a移到辅助区b
    move(1,a,b,c) # 然后将最后一个大盘子从a移动到c
    move(n-1,b,a,c) # 最后将原来移动到b的盘子移动到c

测试:

>>>move(4,'A','B','C')
move A –> B
move A –> C
move B –> C
move A –> B
move C –> A
move C –> B
move A –> B
move A –> C
move B –> C
move B –> A
move C –> A
move B –> C
move A –> B
move A –> C
move B –> C

 




Related posts

coded by nessus
分享:  DeliciousGReader鲜果豆瓣CSDN网摘
Trackback

no comment untill now

Add your comment now

无觅相关文章插件