Python之路-Day07局部变量与全局变量,递归函数

局部变量和全局变量的含义

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.
当全局变量于局部变量同名时:
在定义局部变量的子程序内,局部变量起作用,在其它地方全局变量起作用.

name = "XGZ"
def change_name():
    print("wo de ming zi ",name)


change_name()#输出结果:wo de ming zi  XGZ

def new_name():
    name = "ZJL"
    print("wo de ming zi " ,name)

new_name()#输出结果:wo de ming zi  ZJL
print(name)#输出结果:XGZ,说明函数中的变量只作用于函数当中.

global关键字

如果在函数当中用这个关键字声明了局部变量,那么会覆盖全局变量的值

如果没有声明,会直接拿到全局变量的值.
在方法内部不用global关键字,虽然无法给全局变量赋值,但是我们可以通过全局变量的方法,对这个变量进行添加,删除等各种操作(全局变量也是对象,是对象就有方法)

全局变量名大写
局部变量名小写
def new_name():
    global name
    name = "ZJL"
    print("wo de ming zi " ,name)

new_name()#输出结果:wo de ming zi  ZJL
print(name)

nonlocal关键字

这个关键字是用于方法嵌套,指向上一级函数变量的功能.

name = "123"


def hai():
    name = "456"

    def hai1():
        nonlocal name
        name = "789"

    hai1()
    print(name)


print(name)
hai()
print(name)

递归

在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.

递归特性:

1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
def calc(n):
    print(n)
    calc()
calc(5)#这是一个死递归

我们在定义一个的递归函数时为了防止它是死递归,所以必须设置返回值和结束条件.

def calc(n):
    print(n)
    if n / 2 == 0:
        return n
    return calc(int(n / 2))


calc(10)

猜你喜欢

转载自blog.csdn.net/ztwsxgz/article/details/83180105