码迷,mamicode.com
首页 > 其他好文 > 详细

函数作用域说明

时间:2018-09-12 19:55:19      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:close   python3   嵌套   使用外部   request   isp   全局   bsp   函数   

#函数嵌套的定义

#内部函数可以使用外部函数的变量

global 方法可以在局部变量中声明一个全局变量,影响的是全局变量,对局部变量无效

eg

技术分享图片
a = 1

def outer():

  a = 1

  def inner():

    b = 2

    print(a)

    print(inner)

    def inner2():

      global a  #声明了一个全局变量

      a += 1

      print(inner2)

    inner2()

  inner()
      print(**a**,a)

outer()
print(全局a:,a)
View Code

Python3中新加入的一个方法nonlocal方法,对全局无效,对局部也只是对最近的一层有影响:

nonlocal 声明了一个上层局部变量,只能找离它最近的一个局部变量(inner或outer中去找),如果该变量不存在则报错

声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量

eg

技术分享图片
a = 1

def outer():

  a = 1

  def inner():

    b = 2

    print(a)

    print(inner)

    def inner2():

      nonlocal a  #声明了一个局部变量

      a += 1

      print(inner2)
                 print(##a##,a)

    inner2()

  inner()
      print(**a**,a)

outer()
print(全局a:,a)
View Code

函数名的本质

1、函数名可以被赋值

技术分享图片
def func()

  print(abc)

func2 = func

func2()
View Code

2、函数名可以作为容器类型的元素

技术分享图片
def func()

  print(abc)

func2 = func

l = [func,func2]

for i in l:

  i()
View Code

3、函数名可以作为函数的参数

技术分享图片
def func()

  print(abc)

def fun(f)

  f()

fun(func)
View Code

4、函数名可以作为函数的返回值

技术分享图片
def func()

  print(abc)

def fun(f)

  f()

  return f

qqxing = fun(func)

qqxing()
View Code

闭包:嵌套函数,内部函数调用外部函数的变量

技术分享图片
def outer():

  a = 1

  def inner():

    print(a)
      return inner    #函数名以返回值的形式被函数返回
    print(inner.__closure__)    #查看一个函数inner是不是一个闭包
inn = outer()
inn()    #闭包的作用:可以在函数外面调用里面的子函数
View Code

闭包的应用:每次调用内部函数的时候不用重复的生成外部的局部变量

技术分享图片
from urllib.request import urlopen

def get_url():

  url = http://www.xiaohuar.com/2014.html

  def get():

    ret = urlopen(url).read()
    print(ret)

  return get

get_func = get_url()

get_func()

get_func()
View Code

 

 

 

  

函数作用域说明

标签:close   python3   嵌套   使用外部   request   isp   全局   bsp   函数   

原文地址:https://www.cnblogs.com/hubangsheng/p/9636239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!