鱼C论坛

 找回密码
 立即注册
查看: 2118|回复: 0

[技术交流] python入门L20

[复制链接]
发表于 2017-6-30 05:46:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
global关键字,全局变量的作用域是整个文件的代码段,也就是代码段内所有函数都可以访问到全局变量。需要注意的是在函数体内仅仅访问全局变量就好不要试图去修改它,如果这样做,python 就会用屏蔽的方式(shadowing)去保护全局变量。
屏蔽:一旦在函数体内试图修改全局变量,python就会在函数内部创建一个相同名称的变量,这样修改只会影响到函数内创建出来的变量。
>>> count=5
>>> def myfune():
        count=10
        print(count)
>>> myfune()
10
>>> print(count)
5
如果想要在函数内对全局变量进行修改,使用global关键字对全局变量定义一下
>>> def myfune():
        global count
        count=10
        print(count)

>>> myfune()
10
>>> print(count)
10
内嵌函数(内部函数)
允许在一个函数体内创建另外一个函数
>>> def fun1():
        print('fun1 is being invoked ')
        def fun2():
                print('fun2 is being invoked')
        fun2()

       
>>> fun1()
fun1 is being invoked
fun2 is being invoked
内部函数整个都在外部函数之内的,只能在外部函数之内调用此函数,在全局不能调用

闭包(closure)
闭包是函数式编程 的一个重要的语法结构。函数式编程是一种编程范式(面向对象,面向过程编程都是一种编程范式)编程范式就是对代码进行提炼抽象和概括,使得代码的重用性可用性变高        lisp--著名的函数式编程语言,主要用于CAD绘图和人工智能
不同的编程语言实现闭包的方式不同
python中闭包的表现形式为,如果在一个内部函数里对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就会被认为是闭包。
>>> def funx(x):
        def funy(y):
                return x*y
        return funy

>>> i=funx(8)
>>> i
<function funx.<locals>.funy at 0x0402DD20>
>>> type(i)
<class 'function'>

>>> i(5)
40
>>> funx(8)(5)
40
由于闭包是在内部函数的定义演变而来,同样的不能在全局调用闭包
在内部函数中只能对外部函数的局部变量进行访问但不能修改
>>> def fun1():
        x=5
        def fun2():
                x*=x
                return x
        return fun2()

>>> fun1()
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    fun1()
  File "<pyshell#45>", line 6, in fun1
    return fun2()
  File "<pyshell#45>", line 4, in fun2
    x*=x
UnboundLocalError: local variable 'x' referenced before assignment
>>>
解决方案:
        1. 容器类型:像字符串,列表和元组什么都可以往里 放的类型为容器类型
>>> def fun1():
        x=[5]
        def fun2():
                x[0]*=x[0]
                return x[0]
        return fun2()
>>> fun1()
25
------字符串不存放在栈里面,不会导致问题的出现
        2. 关键字 nonlocal
>>> def fun1():
        x=5
        def fun2():
                nonlocal x
                x*=x
                return x
        return fun2()

>>> fun1()
25

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 19:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表