函数嵌套
1.函数的嵌套调用:在函数内又调用了其他函数
def max2(x,y)
   if x>y
      return x
   else:
      return y

 

def max3(x,y,z):
   resl=max2(x,y)
   res2=max2(res1,z)
   return res2
print(max3(11,111,21)


2.函数的嵌套的定义:在函数内又定义其他函数
def func1()
   print('from func')
   def func2(() func2=内存地址
       print('from func2')
   print(func2)
   func2()
func1()
print(func2)

 


def f1()
   print('f1')
   def f2()
      print('f2')
      def f3()
         print('f3')
      f3()
   f2()
f1()

 

名称空间:
存放名字与值绑定关系的地方

名称空间分为三类:
1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效
2.全局名称空间:文件级别的名字,在执行的时候失效。
def func():
    name='egon'
def func
print('====')

3.局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部名称空间)在函数调用时临时生效,在函数结束则失效。
def func(x)
    y=2
func(1)

加载顺序:内置名称---》全局名称空间--》局部名称空间
查找名字:局部名称空间--》全局--》内置

 

作用域

全局作用域:包含的是内置名称空间与全局名称空间的名字
特点:在任何位置都能够访问的到,该范围内的名字会伴随程序整个生命周期

局部作用域:包含的是局部名称空间的名字
特点:只能在函数内使用;调用函数时生效,调用结束时失


函数对象
1.可以被引用
x=1
y=x
def bar():
   print('from bar')
f=bar
f=()

2.可以当参数传入
x=1
def func():
   print(a)
func(x)

3.可以当函数的返回值
x=1
def foo()
   return x
res=foo()
print(res)

4.可以当容器类型的元素
x=1
l=[x]
print(l)
def get():
   print('from get')
def put():
   print('from put')
l=[get,put]

l[0]()

 


闭包函数:
闭:定义在函数内部的函数
!!!作用域关系,在函数定义阶段就规定死了,与调用位置无关。
def outter():
    x=2
    def inner():
        x=1
        print('from inner',x)
    return inner
f=outter
def foo():
    x=121212121
    f()
foo()

闭包函数:
定义在函数内部的函数,并且该函数包含对外部函数作用域只名字的引用,该函数就称为闭含函数
def outter():
      name='egon'
      def inner
      print('my name is %s'%name)
      return inner
f=outter()

 

posted on 2018-03-31 10:25  muzinianhua  阅读(58)  评论(0编辑  收藏  举报