鱼C-python之函数-变量、内置函数、闭包

#####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
>>> 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容