Python语言(四)函数

来源:互联网 发布:ipadair网络不稳定 编辑:程序博客网 时间:2024/05/16 09:01

函数是种抽象技术,将一组操作进行组合,并命名(也有匿名函数),然后在需要执行该组操作的地方,通过函数名调用该函数,执行组合操作。而输入通过形参传递,运算的结果通过返回值返回给调用。所以任何语言的“函数”概念都包括以下方面:函数定义,参数设定,返回值。

函数定义

Python函数定义通过关键字def,然后跟函数名,以及小括号括起来的形参,形参之间通过逗号分隔,最后接分号。函数体不同于java或C/C++,没有大阔号,而是通过缩进对齐表明块结构。

函数参数

Python的函数参数比较灵活,参数可以使用基本数据类型,也可以是list、dict等。还可以通过设置缺省参数,方便函数调用。

例如定义两个参数a、b,第二个参数有默认值0,当函数调用时,如果只给出一个参数,那么此值将赋给a,b的值认为0。如果调用时给定两个值,那么就分别赋给a和b。

#以求平方为例def power(x):    return x * x#power调用power(5)=>25#但是如果希望power函数可以计算其他幂运算可以定义power(x, n)def power(x, n):    s = 1    while n > 0:        n = n - 1        s = s * x    return s#但是这样一来,之前函数调用的地方power(5)因为参数个数不匹配而报错,为避免这样的问题定义n的默认值为2#def power(x, n=2):    s = 1    while n > 0:        n = n - 1        s = s * x    return s#当调用时只给一个参数power(5),其实调用的实际是power(5, 2)

可变参数

这也是Python比较有特色的地方,与普通参数不同的地方是,参数名前加*号:

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

调用时,calc(1, 3, 4)或者calc(4, 6, 7, 8)都能成功计算。如果存在list或tuple,如:

#将list或tuple作为可变参数传递>>>l = [1, 2, 3, 4]>>>calc(*l)30>>>t = (2, 4, 6)>>>calc(*t)56

关键字参数

可变参数允许传入0个参数,关键字参数也可以,但是如果确实要传入参数,那么必须给定参数的键与值。

#带有关键字参数的函数定义def person(name, age, **kw):    print 'name:', name, 'age:', age, 'other:', kw#只传入必选参数>>> person('Michael', 30)name: Michael age: 30 other: {}#传入任意个数的关键字参数>>> 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'}
实际上关键词参数是以字典方式dict传输的,因此可以直接将dict变量传递给带有关键词参数的函数。

>>> kw = {'city': 'Beijing', 'job': 'Engineer'}>>> person('Jack', 24, **kw)name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
返回值

Python函数可以返回多个值,然后可以在函数调用的左边放置多个变量,分别将返回值赋给这几个变量,要求变量个数和返回值数量相同。其实,Python将返回值作为tuple对象返回,如果调用只返回给一个变量,那么这个变量就是一个tuple对象,如果多个变量,那么就将tuple对象包含的元素取出分别赋给它们。

#Python函数可以返回多个值,是以tuple形式组织起来的>>> def foo(arg1, arg2):return arg1, arg2>>> foo(2,3)(2, 3)>>> x = foo(2,3)>>> x(2, 3)>>> y, z = foo(2, 3)>>> y2>>> z3>>> 

lambda

最强大功能的lambda表达式在lisp中,Python中进行了很大的功能简化,只支持简单的语句。它的语法形式如:

#语法形式lambda [arg1 [,arg2,.....argn]]:expression#lambda表示匿名函数,但它可以被赋值给一个变量,>>>f = lambda x: x * 2#调用时,f相当于带有一个参数的函数>>>f(3)6#或者如下方法调用>>>(lambda x: x * 2)(3)6






0 0
原创粉丝点击