阿你爸爸 发表于 2021-2-20 00:13:17

为什么global oldprice没有生效?

学到函数时,里面有一部分是将局部变量和全局变量的。在书中有提到:

如果想要在函数中对全局变量进行修改,可以通过global关键字来达到目的。书中还举了一个例子:

>>> count = 5
>>> def myFun():
        global count
        count = 10
        print(count)

       
>>> myFun()
10
>>> count
10

这个倒也不难,所以我打算弄个例子试一下。于是我写了如下一段代码:

oldprice = float(input('请输入原价:'))
def zhekou(price,rate):
    global oldprice
    oldprice = 50
    finalprice = price * rate
    return finalprice

rate = float(input('请输入折扣:'))
newprice = zhekou(oldprice,rate)

print('最终的价格是:%.2f' % newprice)

按照我的设想,程序执行的步骤如下:

1、通过input获取了一个oldprice(假如等于80);

2、通过input获取了一个rate(假如等于0.5);

3、newprice调用了,zhekou这个函数,把80赋值给了price这个参数,把0.5赋值给了rate这个参数;

4、在函数的内部,又将oldprice改成了50;

5、函数将50复制给price;

6、函数return出finalprice这个结果,并将其赋值给newprice;

7、print命令将其打印。

按照以上步骤理解,最终输出的结果应该为50 *0.5 = 25. 然而结果却是40. 但我单独print(oldprice)却得出了50这么一个结果。那么按照结果推测,应该是第5步并未执行。可我想知道为什么?

按照从上到下的顺序,不就是应该先执行oldprice = 50,然后才执行finalprice = price * rate 的吗?

第二个问题,如果我就想通过在函数内部修改全局变量来实现最终的newprice是25,代码要怎么修改呢?

kogawananari 发表于 2021-2-20 01:25:25

第五行 改成finalprice = oldprice * rate

price这个参数没用可以删了
页: [1]
查看完整版本: 为什么global oldprice没有生效?