局部变量
所谓局部变量是指仅能在函数内部生效的变量。这里设计一个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 <module>
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