python入门五(函数)【5-1 python中函数的定义,调用,编写,返回多值】

5-1 python中函数的定义

Python之什么是函数

写计算机程序也是一样,函数就是最基本的一种代码抽象的方式。

Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。

 

Python之调用函数

Python内置了很多有用的函数,我们可以直接调用。

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数。

调用 abs 函数:

1 >>> abs(100)
2 100
3 >>> abs(-20)
4 20
5 >>> abs(12.34)
6 12.34

调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个:

>>> abs(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)

如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:

>>> abs('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'

比较函数 cmp(x, y) 就需要两个参数,如果 x<y,返回 -1,如果x==y,返回 0,如果 x>y,返回 1:

>>> cmp(1, 2)
-1
>>> cmp(2, 1)
1
>>> cmp(3, 3)
0

任务

sum()函数接受一个list作为参数,并返回list所有元素之和。请计算 1*1 + 2*2 + 3*3 + ... + 100*100。

1 L = []
2 x = 1
3 while x <= 100:
4     L.append(x * x)
5     x = x +1
6 print sum(L)

Python之编写函数

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

我们以自定义一个求绝对值的 my_abs 函数为例:

1 def my_abs(x):
2     if x >= 0:
3         return x
4     else:
5         return -x

请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。

如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。

return None可以简写为return。

任务

请定义一个 square_of_sum 函数,它接受一个list,返回list中每个元素平方的和。

1 def square_of_sum(L):
2     
3     sum = 0
4     for x in L:
5         sum = sum +x * x
6     return sum 
7 print square_of_sum([1, 2, 3, 4, 5])
8 print square_of_sum([-5, 0, 5, 15, 25])

 

Python函数之返回多值

函数可以返回多个值吗?答案是肯定的。

比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:

# math包提供了sin()和 cos()函数,我们先用import引用它:

1 import math
2 def move(x, y, step, angle):
3     nx = x + step * math.cos(angle)
4     ny = y - step * math.sin(angle)
5     return nx, ny

这样我们就可以同时获得返回值:

1 >>> x, y = move(100, 100, 60, math.pi / 6)
2 >>> print x, y
3 151.961524227 70.0

但其实这只是一种假象,Python函数返回的仍然是单一值:

1 >>> r = move(100, 100, 60, math.pi / 6)
2 >>> print r
3 (151.96152422706632, 70.0)

用print打印返回结果,原来返回值是一个tuple

但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

任务

一元二次方程的定义是:ax² + bx + c = 0

请编写一个函数,返回一元二次方程的两个解。

注意:Python的math包提供了sqrt()函数用于计算平方根。

1 import math
2 
3 def quadratic_equation(a, b, c):
4     x1 = (-b + math.sqrt(b*b - 4*a*c))/ (2*a)
5     x2 = (-b - math.sqrt(b*b - 4*a*c))/ (2*a)
6     return x1,x2
7 print quadratic_equation(2, 3, 0)
8 print quadratic_equation(1, -6, 5)

 

posted on 2019-09-26 10:47  ucas_python  阅读(575)  评论(0编辑  收藏  举报