# 内部函数
# 函数本身是可以互相嵌套的
# 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)