031-局部变量与全局变量

局部变量

所谓局部变量是指仅能在函数内部生效的变量。这里设计一个python变量作用域(function domain)的问题。

def discount(price,rate):
    final_price = price * rate
    return final_price

previous_price = float(input('请输入初始价格:'))
rate = float(input('请输入折扣率:'))
current_price = discount(previous_price,rate)

print('打折后的价格是%.2f' % (current_price))

-----------程序执行结果如下-----------
请输入初始价格:80
请输入折扣率:0.75
打折后的价格是60.00

改一下,我们在最后加入一条print语句,用它来调用final_price这个局部变量,看会得到什么结果。

def discount(price,rate):
    final_price = price * rate
    return final_price

previous_price = float(input('请输入初始价格:'))
rate = float(input('请输入折扣率:'))
current_price = discount(previous_price,rate)

print('打折后的价格是%.2f' % (current_price))
print('尝试在全局环境下调用局部变量final_price的值:%.2f' % (final_price))


----------程序运行结果如下----------
请输入初始价格:80
请输入折扣率:0.75
打折后的价格是60.00
Traceback (most recent call last):
  File "f:\python\local_var.py", line 10, in 
    print('尝试在全局环境下调用局部变量final_price的值:%.2f' % (final_price))
NameError: name 'final_price' is not defined

根据报错信息得知,虽然final_price这个变量在函数中已经定义过了,但当我们在函数以外去调用它的时候,仍然提醒我们,not defined,这说明它只是一个局部变量,在局部环境以外并未被定义。

在python中,你可以在函数内部访问全局变量,但是如果你试图在函数内部修改全局变量,那么你的修改将不会成功,而是会生成一个相同名称的局部变量,而真正的全局变量则是没有变化的。

previous_price = 80

def discount(price,rate):
    final_price = price * rate
    previous_price = 50
    return final_price

rate = float(input('请输入折扣率:'))
current_price = discount(previous_price,rate)

print('打折后的价格是%.2f' % (current_price))
----------代码运行结果如下----------

请输入折扣率:0.75
打折后的价格是60.00

当然了,如果你仍然坚持要在函数中修改全局变量,也不是不可以,那就需要在变量前面做一个全局声明,也就是加上global:

>>> a = 5
>>> def test_global():
    a = 10
    return a

>>> test_global()
10
>>> a
5

-----加上全局声明以后----
>>> a = 5
>>> def test_global():
    global a = 10
    
SyntaxError: invalid syntax
>>> 
>>> 
>>> a = 5
>>> def test_global():
    global a
    a = 10
    return a

>>> test_global()
10
>>> a
10

你可能感兴趣的:(031-局部变量与全局变量)