Python学习笔记(9):函数调用与定义

来源:互联网 发布:wind资讯金融终端 mac 编辑:程序博客网 时间:2024/06/14 02:07

python一定程度上和matlab很类似,存在较多的内置函数,供用户直接调用。通常来说,调用函数需要知道函数的名称和需要传入的参数,比如绝对值函数abs,可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
调用abs函数:

>>>abs(100)>100>>>abs(-5)>5

调用函数时,如果传入参数不对,系统会报错。
这里写图片描述

数据类型转换
python内置的常用函数通常包括数据类型转换,比如int()函数可以把数据类型转化为整数。

>>>int('123')>123>>>float('1.23')>1.23>str(1.23)>'1.23'>bool(1)>True

韩树明其实对于一个函数对象的引用,可以使用如下方法,通过别的名称调用函数

>>>abs_new = abs>>>abs_new(-1)>1

函数的定义
和其他编程语言一样,用户可以定义自己写的函数,如下图所示自行定义一个简单的运算函数。

def my_function(x):    result = 5*x    return result

函数的运行结果使用return返回,如果没有return语句,函数的返回值为None。
函数可以返回多个值,可以采用多个变量进行接收,但函数返回多个值,通常是以tuple的形式保存,也就是说函数真正返回的是一个tuple,多个变量可以同时接收一个tuple,按位置对其进行赋值。定义函数的过程中,需要确定函数的名字和参数个数。

函数的参数设置

对于用户来说,在调用函数的时候,只需要向函数传递了正确的参数即可,函数内部被封装起来,调用的时候无需了解。python的参数除了必选参数外,还可以使用默认参数、可变参数和关键字参数。

默认参数
比如调用python的power()的函数,默认计算参数的平方,如果计算参数的立方、四次、五次方的时候,可以对函数进行如下定义。

def power(x,n):    s = 1    while n>0:        n = n - 1        s = s * x    return s

经过如此定义后的power()函数,可以计算任意n次方,但之前的计算参数平方的power()函数就不能正常使用了,因为之前的函数给定的是一个参数,直接计算参数的平方。但经过我们修改过后,函数要求调用的时候提供两个参数,这个时候我们可以使用默认参数解决这个问题,可以把函数的第二个参数默认值设置为2:

def power(x,n = 2):    s = 1    while n>0:        n = n - 1        s = s * x    return s

对函数进行这样的定义的话,当调用power(4)的时候,默认在调用power(4,2)。但如果想计算参数的其他次幂的话,就需要指明函数的参数。

在使用默认参数的时候,通常有以下几点需要注意:
1)函数的必选参数在前,默认参数在后,因为如果默认参数在前的话,系统会把你给定的第二个参数认定为第一个默认参数的给定值;
2)当函数由多个参数时,把变化大的参数放在前,变化小的参数放在后面。
默认参数降低了函数的调用难度,一旦需要复杂的调用时候,又可以传递更多的参数来实现,而不需要重新对函数进行定义。但有一点需要注意,默认参数必须只想不变对象。

可变参数

在python的函数调用中,传入的参数个数是可变的,可以是任意个。比如给定一组数A,B,C…,计算其平方的和。要定义出这个函数,必须确定输入参数,由于参数不确定,可以使用list将参数传进来,函数可以被定义如下。

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

使用这种方式调用函数,就需要先定义出一个list。

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

对于这种函数可变的参数,可以使用如下方式。

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

定义可变参数和定义list参数相比,仅在参数前加了一个*号,在函数内部,参数numbers接收的是一个tuple。因此,函数代码完全不变,调用该函数时,可以传入任意个参数,包括0个参数。

>>>calc(1,2)>5>>>cals()>0

关键字参数
可变参数允许你0个或任意个参数,这些可变参数在调用时候自动组装成一个tuple。使用关键字参数,允许你穿入0个或者人一个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

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

函数person除了必选参数name和age外,还接受关键字参数kw,在调用该函数时,可以只传入必选参数,也可以传入任意个数的关键字参数。

>>> person('Bob', 35, city='Beijing')>name: Bob age: 35 other: {'city': 'Beijing'}>>> person('Adam', 45, gender='M', job='Engineer')>name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer"}

使用关键字参数可以对函数进行拓展,在上例中,保证能够接收name和age两个参数,但是如果调用者提供更多的参数,同样可以接收。

参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

比如定义一个函数,包含上述4种参数:

def func(a, b, c=0, *args, **kw):    print 'a =', a, 'b =', b, 'c =', c, 'args =',   args,'kw =', kw
>>> func(1, 2)a = 1 b = 2 c = 0 args = () kw = {}>>> func(1, 2, c=3)a = 1 b = 2 c = 3 args = () kw = {}>>> func(1, 2, 3, 'a', 'b')a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}>>> func(1, 2, 3, 'a', 'b', x=99)a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
0 0