侧边栏壁纸
  • 累计撰写 197 篇文章
  • 累计收到 496 条评论

Python学习笔记之闭包

2019-9-20 / 0 评论 / 69 阅读
# 内部函数
# 函数本身是可以互相嵌套的
# example
def whyBlogName():
    def thisIsName():
        print('张宇童博客')

whyBlogName()

# nonlocal 用来修饰局部变量
# nonlocal 寻找当前作用域的上一级作用域的变量
# name = '123'
def blogName() :
    name = '张宇童blog'
    def sayTitle():
        nonlocal name
        name = 'www.zyt8.cn'
    sayTitle()
    print(name)
blogName()

def listvarset():
    a = 1
    listvar = [a, 2, 3]
    def setlist():
        listvar[0] = 10
    setlist()
    print(a)
listvarset()

# 闭包函数
'''
    定义:内函数使用外函数的局部变量,并且外函数将内函数返回出来的方法
        而里面的内函数叫闭包
'''
# example 
def zhangyutong_blog():
    name = '原创'
    def url():
        print('张宇童说过一句话,%s才是最好的经验' % (name))
    return url
res = zhangyutong_blog()
res()
# 递归
def digui(a):
    if a <= 0:
        return 0
    return digui(a-1) + a
res = digui(3)
print(res)

# example2
def blog_function():
    name = '张宇童'
    title = '%s - 前沿技术博客' % (name)
    url = 'http://www.zyt8.cn'
    pv = 1000
    ip = 500
    blog_number = 60
    def writeBlog(new_blog_number):
        nonlocal pv,ip,blog_number
        blog_number += new_blog_number
        pv += new_blog_number*300
        ip += new_blog_number*100
    def delBlog(del_blog_number):
        nonlocal pv,ip,blog_number
        blog_number -= del_blog_number
        pv -= del_blog_number*200
        ip -= del_blog_number*50
    def moodGood(number):
        writeBlog(number)
        print('%s今天心情不错,写了%d篇博文,现在一共%d篇博文啦,pv增加到%d,ip增加到%d' % (name, number, blog_number, pv, ip))
    def moodBad(number):
        delBlog(number)
        print('%s今天心情很糟糕,删除了%d篇博文,当前还剩%d篇博文,pv减少到了%d,ip减少到了%d' % (name, number, blog_number, pv, ip))
    def behavior():
        return (moodGood, moodBad)
    return behavior
res = blog_function()
func = res()
func[0](3)
func[1](1)
blog_function()()[0](1)

评论一下?

OωO
取消