|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lzb1001 于 2023-5-10 15:35 编辑
# p6_4.py
def discounts(price, rate):
final_price = price * rate
# print('在局部变量中修改后old_price的值:', old_price)
old_price = 50 # 函数内的是局部变量,和函数外的全局变量同名,是试图在这里修改全局变量的值!
print('修改后old_price的值是1:', old_price) # 增加此行代码!
return final_price
old_price = float(input('请输入原价:')) # 函数外的是全局变量
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price, rate)
print('修改后old_price的值是2:', old_price) # 增加此行代码!
print('打折后的价格是:', new_price)
运行后:
请输入原价:100
请输入折扣率:0.8
修改后old_price的值是1: 50 # 这里打印的是函数内局部变量old_price的值!
修改后old_price的值是2: 100.0 # 这里打印的是函数外全局变量old_price的值!
打折后的价格是: 80.0
【我的疑问】
1、上面代码中的局部变量不是我们自己在函数内定义并赋值的吗old_price = 50?为什么小甲鱼说当我们试图在函数内修改全局变量old_price,PYTHON会创建一个新的局部变量代替,它的名字跟全局变量一模一样,也就是新的局部变量名也叫old_price
2、上面代码中,局部变量old_price = 50、全局变量old_price(等于我们输入的100)两个变量的存放空间不同,其中哪个是存放在函数的栈空间内,哪个是存放在其他空间内?
1、在函数内部,如果使用了和全局变量同名的变量,Python会默认将其认为是一个局部变量,而不是全局变量。因此,当我们在函数内部修改old_price的值时,实际上是在修改一个新的局部变量old_price,而不是全局变量old_price。
2、局部变量和全局变量的存放位置确实不同。局部变量是存放在函数的栈空间中,而全局变量是存放在全局变量表中。在Python中,所有的变量都是对象,它们会被存放在内存中的不同位置。局部变量在函数调用时被创建,函数结束时被销毁,而全局变量则在程序运行期间一直存在,直到程序结束。
|
|