#####1.局部变量&全局变量
局部变量是在函数内部定义的,全局变量是在函数的外部定义的,在函数的内部可以访问全局变量,但是不要试图去修改全局变量,这样函数会在函数体内创建一个和全局变量名字一样的局部变量。
例子程序:
def discouts(price,rate):
final_price = price * rate
old_price = 50
print('修改后的old_price的值是1:',old_price)
return final_price;
old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discouts(old_price,rate)
print('修改后的old_price 的值是2:',old_price)
print('打折后的价格是:',new_price)
结果:
==================== RESTART: D:/Python35/c/function1.py ====================
请输入原价:100
请输入折扣率:0.8
修改后的old_price的值是1: 50
修改后的old_price 的值是2: 100.0
打折后的价格是: 80.0
>>>
根据程序运行的结果可得到,在函数的内部修改全局变量是不起作用的。
如果你真想在函数内修改全局变量,那就在修改前加一句
global 变量
2.内嵌函数
即在函数1的内部定义一个函数2,但是函数2只能在函数1里面调用,出了函数1就不能调用啦。
3.闭包
闭包需满足2点:
1.在函数1的内部定义一个函数2
2.函数2引用了函数1 定义的参数
注意:闭包是在内置函数基础上的,所以函数2也不能在函数1的外部被调用
例子:
>>> def FunX(x):
def FunY(y):
return x * y
return FunY
>>> i=FunX(8)
>>> i
<function FunX.<locals>.FunY at 0x0000000003593840>
>>> type(i)
<class 'function'>
>>> i(5)
40
>>> FunX(8)(5)
40
>>>
如果变量在函数1里面被赋值,在函数2里面又想使用,要在 函数2使用变量前 对变量进行
nonlocal 变量
>>> def Fun1():
x = 5
def Fun2():
x *= x
return x
return Fun2()
>>> Fun1()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
Fun1()
File "<pyshell#6>", line 6, in Fun1
return Fun2()
File "<pyshell#6>", line 4, in Fun2
x *= x
UnboundLocalError: local variable 'x' referenced before assignment
>>> def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
>>> Fun1()
25
>>>