Python基础入门之函数二

来源:互联网 发布:法国盐之花淘宝 编辑:程序博客网 时间:2024/05/21 20:29

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px 'Heiti SC Light'; color: #831100}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; min-height: 17.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #202427}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #14181e; background-color: #eeeeee}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #831100}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Heiti SC Light'; color: #14181e}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Heiti SC Light'; color: #14181e}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #14181e}p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Heiti SC Light'; color: #7a4a00}p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #7a4a00}p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; color: #7a4a00}p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; color: #7a4a00; min-height: 17.0px}span.s1 {font: 18.0px Helvetica}span.s2 {font-kerning: none; background-color: #edf1f2}span.s3 {font-kerning: none; color: #ff2500; background-color: #edf1f2}span.s4 {font-kerning: none}span.s5 {font-kerning: none; background-color: #d0d6d9}span.s6 {font: 12.0px 'Heiti SC Light'; font-kerning: none; background-color: #d0d6d9}

5.4、Python函数之返回多值


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

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

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

import math

def move(x, y, step, angle):

    nx = x + step * math.cos(angle)

    ny = y - step * math.sin(angle)

    return nx, ny

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

>>> x, y = move(100, 100, 60, math.pi / 6)

>>> print x, y

151.961524227 70.0

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

>>> r = move(100, 100, 60, math.pi / 6)

>>> print r

(151.96152422706632, 70.0)

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

但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以函数返回几个值就需要几个变量去接收(除了一个变量去接收函数时),接收变量多了或少了,代码都会报错ValueError。Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

任务4

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

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

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


p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px 'Heiti SC Light'; color: #831100}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; min-height: 14.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #202427}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #14181e; background-color: #eeeeee}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #831100}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #018000; background-color: #eeeeee}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Heiti SC Light'; color: #14181e}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; color: #14181e}p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; min-height: 17.0px}p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px 'Heiti SC Light'; color: #7a4a00}p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; color: #7a4a00}p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; color: #7a4a00; min-height: 17.0px}p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; color: #831100}span.s1 {font: 18.0px Helvetica}span.s2 {font-kerning: none; background-color: #edf1f2}span.s3 {font-kerning: none}span.s4 {font-kerning: none; background-color: #d0d6d9}span.s5 {font: 18.0px 'Heiti SC Light'}span.s6 {font-kerning: none; color: #ff2500}span.s7 {font-kerning: none; color: #ff2500; background-color: #edf1f2}

5.6、Python之定义默认参数


定义函数的时候,还可以有默认参数。

例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:

>>> int('123')

123

>>> int('123', 8)

83

int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。

可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。

我们来定义一个计算 x 的N次方的函数:

def power(x, n):

    s = 1

    while n > 0:

        n = n - 1

        s = s * x

    return s

假设计算平方的次数最多,我们就可以把 n 的默认值设定为 2:

def power(x, n=2):

    s = 1

    while n > 0:

        n = n - 1

        s = s * x

    return s

这样一来,计算平方就不需要传入两个参数了:

>>> power(5)

25

由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:

# OK:

def fn1(a, b=1, c=2):

    pass

# Error:

def fn2(a=1, b):

    pass

任务6

请定义一个 greet() 函数,它包含一个默认参数,如果没有传入,打印 'Hello, world.',如果传入,打印 'Hello, xxx.'


5.7Python之定义可变参数


如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:

def fn(*args):

    print args

可变参数的名字前面有个 号,我们可以传入0个、1个或多个参数给可变参数:

>>> fn()

()

>>> fn('a')

('a',)

>>> fn('a', 'b')

('a', 'b')

>>> fn('a', 'b', 'c')

('a', 'b', 'c')

可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数:

def average(*args):

    ...

这样,在调用的时候,可以这样写:

>>> average()

0

>>> average(1, 2)

1.5

>>> average(1, 2, 2, 3, 4)

2.4

任务7

请编写接受可变参数的 average() 函数。


任务答案:

任务4:

#提示:求根公式:x = (-b±√(b*b-4ac))/2a

import math


def quadratic_equation(a, b, c):

    t = math.sqrt(b * b - 4 * a * c)

    x1 = (-b + t) / (2 * a)

    x2 = (-b - t) / (2 * a)

    return x1,x2


print quadratic_equation(2, 3, 0)

print quadratic_equation(1, -6, 5)


任务6:

def greet(a = 'world'):

    print 'Hello,'+ a + '.'


greet()

greet('Bart')


任务7:

def average(*args):

    if len(args) <= 0:

        return 0.0

    sum = 0.0

    avg = 0.0

    for i in args:

        sum = sum + i

    avg = sum / len(args)

    return avg

print average()

print average(1, 2)

print average(1, 2, 2, 3, 4)


文章中缺少了5.5、函数之递归函数,为了更好的理解,我准备单列出一篇,用来讲,敬请期待!!!