pyhton之作用域区别

2018.03.06*********************************Day09**********************************

author:wills

hello,everybody!

今天学习了python中,变量的作用域

首先明确python的语法中主要有两种变量,全局变量 and 局部变量。推荐使用局部变量,减少互相调用时的影响。先来看一段代码,然后再一一进行解释。

def foo():
    # local variable
    # 函数内的局部变量 离开foo 函数变量a无法访问
    # 搜索全局变量,使用global
    # global a  # 关键字global 将全局变量a修改了
    global a
    global b
    a = 200
    b = 100
    print(a,b)
    def bar():
        global a
        global b
        a = '111'
        b = '222'
        print(a,b)
    print(a, b)
    bar()
    print(a, b)

def main():
    a = 'hello'
    b = 'good'
    foo()


if __name__ == '__main__':
    main()

这段代码的运行结果是200,100,200,100,111,222,111,222。首先第一个200,100是刚开始就print的毫无疑问,在定义bar()函数的时候,使用global关键字调用了全局变量a,b并将a,b分别赋值为111,222字符串,但是为什么第一个打印不是111,222呢,注意看定义和调用bar()函数的位置,第二次print是在定义bar()函数之后调用bar()函数之前,那么bar()函数里面对(a,b)的修改还没生效,(a,b)仍然是200,100.但是第三次print是在调用了bar()函数之后,并且在bar()函数内部,此时(a,b)的值已经被修改,第四次print(a,b)的值与第三次相同
所以变量是有作用域的,这一点非常重要。

今天有个小程序,是关于儿童走楼梯,一次1-3阶,如果10阶楼梯,有多少中走法,我们假设有1阶楼梯,走法1种;2阶楼梯,走法2种;3阶楼梯,走法4种。程序如下

def goStairs(x):
    if x == 1:
        return 1
    elif x == 2:
        return 2
    elif x == 3:
        return 4
    else:
        return goStairs(x-3)+goStairs(x-2)+goStairs(x-1)
print(goStairs(10))

思路就是10阶楼梯,可以走1-3阶。第一次走一阶,剩9阶,有多少种走法;走2阶,剩8阶,有多少种走法;走3阶,剩7阶,有多少种走法。那么10阶的走法=(9阶走法+8阶走法+7阶走法)。同理9阶走法=(8…+7…+6…),8阶走法=(7…+6…+5…),就可以采用递归函数的方法求出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值