def discounts(price,rate):
final_price = price * rate#原价乘以折扣率
#old_price = 88 #这里试图修改变量
#print('修改后old_price的值是:',old_price)
return final_price
上面一段都是局部变量,下面打印不了局部变量
下面是全局变量,可以在上面打印全局变量,可以访问,但不能修改
old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
#print('修改后old_price的值是:', old_price)
new_price = discounts(old_price,rate)
print('打折后价格是:',new_price)
>>> count = 5 #全局变量
>>> def MyFun():
count = 10 #修改这里,不会影响全局变量
print(count)
>>> MyFun()
10
>>> print(count)
5
>>> def MyFun():
global count #用global关键字修改全局变量
count = 10
print(count)
>>> MyFun()
10
>>> print(count)
10
支持函数嵌套
>>> def fun1():
print('fun1()正在被调用...')
def fun2():
print('fun2()正在被调用...')
fun2()
>>> fun1()
fun1()正在被调用...
fun2()正在被调用...
只有fun1才能调用fun2
在函数1内部嵌套的函数2,除了函数1内可以调用,函数1外都不能调用
闭包
闭包就是能够读取其他函数内部变量的函数
>>> def FunX(x):
def FunY(y):
return x * y
return FunY
>>> i = FunX(8)>>>
i.FunY at 0x0000020063B3C840>>>>
type(i)>>> i(5)
40
>>> FunX(8)(5)
40
在外部,调用不了FunY
闭包中不能修改外部作用域的局部变量
试图修改时,内嵌函数内的相对局部变量值就会被屏蔽掉,没有初值
>>> def Fun1():
x = 5 #非全局变量的外部变量
def Fun2():
x *= x #局部变量没有定义不能引用
return x #
return Fun2()
>>> def Fun1():
x = [5]
def Fun2():
x[0]*= x[0] #列表不是存放在栈里面,不会出错
return x[0]
return Fun2()
>>> Fun1()
25