目录
1. 局部作用域
在函数内赋值的变量和变元都,处于'局部作用域',属于局部变量;
定义在函数内部的变量是局部变量,局部变量的作用范围只能在函数内部生效,不能在函数外被引用;
局部变量除了在函数代码块声明的变量意外,还包括函数的形参。
#示例代码如下
def funx(price,rate):
final = price * rate
return final
input_price = float(input("输入价格:"))
input_rate = float(input("输入折扣:"))
newprice = funx(input_price,input_rate)
print(f'最终价格为:{newprice}')
print(f'直接去函数结果,最终价格为:{final}')
#不使用局部变量部分执行成功
输入价格:>? 85
输入折扣:>? 0.9
最终价格为:76.5
#直接调用局部变量,报错变量未定义
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "D:\PyCharm\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "D:\PyCharm\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "D:/PycharmProject/python代码/044test.py", line 11, in <module>
print(f'直接去函数结果,最终价格为:{final}')
NameError: name 'final' is not defined
2. 全局作用域
在函数外赋值的变量,处于全局作用域,属于全局变量;一个变量肯定是局部/全局变量其中一种,不可能既是属于全局作用域又是属于局部作用域;
全局变量拥有更大的作用域,在函数中可以访问全局变量;
#函数中直接访问全局变量
input_price = float(input("输入价格:"))
input_rate = float(input("输入折扣:"))
def funx():
final = input_price * input_rate
return final
newprice = funx()
print(f'最终价格为:{newprice}')
#成功执行,并返回正确结果
输入价格:>? 80
输入折扣:>? 0.7
最终价格为:56.0
如果在函数中修改全局变量值,那么Python实际生成一个新的同名但不同id的局部变量,函数中使用新生成的局部变量赋值;
跳出函数后,同名局部变量失效,全局变量值不改变。
#测试代码如下:
input_price = float(input("输入价格:"))
input_rate = float(input("输入折扣:"))
print(f'input_price全局变量id为:{id(input_price)}')
print(f'input_rate全局变量id为:{id(input_rate)}')
def funx():
input_price = 50
input_rate =0.5
final = input_price * input_rate
print(f'函数中,input_price值为:{input_price},input_rate值为:{input_rate}')
print(f'input_price函数内局部变量id为:{id(input_price)}')
print(f'input_rate函数内局部变量id为:{id(input_rate)}')
return final
newprice = funx()
print(f'最终价格为:{newprice}')
print(f'函数结束时,input_price值为:{input_price},input_rate值为:{input_rate}')
print(f'函数结束时,input_pri