025_函数返回值及变量作用域

# __author__:Nzkalhbxx
# __date__:17-10-30
print("函数的返回值".center(33, "-"))
def printName(name):
    print("my name is %s"%name)
    # None为默认返回值
    return None
printName("psj")

def add(x, y):
    result = x + y
    return result

print(add(3, 7))

def printMessage(name, age, hobby):
    # 当函数返回多个值时, python会将数据打包成元组作为return值
    return name, age, hobby
print(printMessage(name = "psj", age = 19, hobby = "passion fruit"))

print("变量的作用域".center(33, "-"))
# 定义在函数之外的全部变量在全局可用
count = 3
def fun1():
    print("局部变量".center(21, "-"))
    # 定义在函数内部的变量称为局部变量
    count = 7
    print(count)
    def fun2():
        print("嵌套在父集函数内的局部变量".center(21, "-"))
        count = 11
        print(count)
    fun2()
    return fun2
returnFun = fun1()
returnFun()


def use_define():
    # 语法报错: 由于在函数内有一个与全部变量同名的局部变量, 因此会使用局部变量, 但由于先使用后定义, 因此报错
    # print(count)
    # 语法报错: 由于函数内又定义了一个count, 而count在使用定义时使用了自身, 而自身又是未定义的, 因此报错
    # count = count + 1   # UnboundLocalError: local variable 'count' referenced before assignment
    # 当函数中要定义并使用一个与全局变量名相同的变量, 为了在未声明之前就可以使用变量而不报错, 可以使用global来声明函数中使用的变量是全部变量
    global count
    count += 1

    num = 1
    def use_define2():
        nonlocal num
        # 报错: 未声明即使用, 解决方法, 使用nonlocal关键字声明变量不是本地变量而是上一层函数中的变量
        num += 1
        print("num in def2: " + str(num))
    use_define2()
    print("num in def1: " + str(num))
    return "Can't use variates before definition"

message = use_define()
print("count of out: "+ str(count))
print(message)
025_函数返回值及变量作用域_第1张图片
运行结果

你可能感兴趣的:(025_函数返回值及变量作用域)