2Guy's Blog

[python]深入学习函数

Author:
by: sliuqin
Date:
10. October 2009 07:54
Tagged in:
,
Comments:
0

定义函数

python用 def 关键字来定义一个函数:

PY
def sayHello():
    print 'hello python'
    
sayHello()

函数参数

和Javascript一样,可以指定传入的参数,

PY
def printMax(a,b):
    if a > b : 
        print a ,"is maximum"
    else:
        print b,'is maximum'
 
printMax(1,34) #==> 34 is maximum

默认参数

比JavaScript方便的是,python中可以在参数上就直接指定默认值:

PY
def say(msg,time=1):
    print msg * time
 
#使用time的默认值
say('hello') #==> hello
say('hello',3) #==> hellohellohello

关键参数

如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。

这一点和JavaScript中的定义是很不一样的,在JavaScript的函数中,我们只能通过位置来指定。

python中这样做有两个 优势 ——一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。

PY
def func(a,b=1,c=3):
    print 'a=',a,'   b=',b,'   c=',c
 
func(1,2,3)
func(1,c=23)
func(b=3,a=12)

局部变量

和JavaScript一样,python也有局部变量

py
x = 10
 
def changX(num):
    x = num
changX(13)
print x #==>10

由于python中定义变量不需要象JavaScript中那样用 var 来定义,所以上例中 changX 函数中的 x 相当于是重新定义了一个变量,并不会和changX外的 x = 10 这个变量搞混。那可不可以指定使用 x = 10 这个变量呢?

使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

PY
x = 10
 
def changX(num):
    global x 
    x = num
changX(13)
print x #==>13

return语句

和JavaScript中的return有相同的功能,唯一的不同是如果我们没有指定return,那么python将在函数最后暗含一个 return None

DocStrings

注释总是那么重要,Python有一个很奇妙的特性,称为 文档字符串 ,它通常被简称为 docstrings 。DocStrings是一个重要的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用它。你甚至可以在程序运行的时候,从函数恢复文档字符串!

文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。

一个例子:

py
def changX(num):
    """ 修改x。
    
    修改全局中x的值
    """
    global x 
    x = num

我们可以使用 help(changX)来打印注释,也可以通过 changX.__doc__来获得。

概括

上述讲的这些已经覆盖了大多数的日常使用,但这并不是全部,后续会慢慢更新。

Add comment