Python 3 教程 在线

1133Python3 函数

在这里补充一点关于 global 和 nonlocal 的知识:

nonlocal 只能修改外层函数的变量而不能修改外层函数所引用的全局变量,给一个例子如下:

x = 0
def outer():
    global x
    x = 1    
    def inner():
        nonlocal x
        x = 2        
        print(x)
    inner()

outer()
print(x)

结果会报错:

line 6
    nonlocal x
    ^
SyntaxError: no binding for nonlocal 'x' found

1132Python3 函数

1.内部函数,不修改全局变量可以访问全局变量

a = 10
def test():
    b = a + 2 #仅仅访问全局变量 a
    print(b)
test()

输出结果为:

12

2.内部函数,修改同名全局变量,则python会认为它是一个局部变量(同教程最后一个例子)

#!/usr/bin/python3
 
a = 10
def test():
    a = a + 1 #修改同名的全局变量,则认为是一个局部变量
    print(a)
test()

3.在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

1131Python3 函数

函数的装饰器

在不改变当前函数的情况下, 给其增加新的功能:

def log(pr):#将被装饰函数传入
    def wrapper():
        print("**********")      
        return pr()#执行被装饰的函数
    return wrapper#将装饰完之后的函数返回(返回的是函数名)
@log
def pr():
    print("我是小小洋")

pr()

回调函数和返回函数的实例就是装饰器。

更多内容可参考:Python 函数装饰器

1130Python3 函数

函数返回值的注意事项: 不同于 C 语言,Python 函数可以返回多个值,多个值以元组的方式返回:

def fun(a,b):    
    "返回多个值,结果以元组形式表示"
    return a,b,a+b
print(fun(1,2))

输出结果为:

(1, 2, 3)

1129Python3 函数

可以通过 函数名.__doc__ 的方式来显示函数的说明文档,感觉这个如果在阅读比较大的程序时应该会有用,同时也在提示自己在写函数时注意添加文档说明。

def add(a,b):
    "这是 add 函数文档"
    return a+b

print (add.__doc__)

输出结果为:

这是 add 函数文档

更多内容可参考:Python 文档字符串(DocStrings)