zoukankan      html  css  js  c++  java
  • 函数作用域

    前景知识概要:python函数名代表的是函数名的地址,类似于c语言中的指针。如果需要调用python函数,则需要使用函数名()的形式调用。如果在函数中返回的是函数名,则返回的是函数名相应的内存地址,通过一个参数接受此内存地址,可运行返回的函数。

    如下代码

    1 name = "tiger"
    2 def foo():
    3     name = "tiger1"
    4     def bar():
    5         name = "tiger bar"
    6         print(name)
    7     return bar  #返回的是bar函数的内存地址
    8 a = foo()    #通过a变量接受bar函数的内存地址,如果运行a()则等同于bar()
    9 print(a
    <function foo.<locals>.bar at 0x0000027CB036FE18>
    

     如果函数有多次嵌套:

    1、函数foo()则表示运行一次foo函数,则得到bar的内存地址,可理解为bar=foo()

    2、函数foo()(),通过变量替换法,为bar(),运行结果为打印name,也就是"bar",并且返回tt的内存地址,tt=bar()

    3、函数foo()()(),同上tt(),打印name,也就是"tt"

    查看以下执行结果,为了获取到tt的内存地址,一次会执行foo(),bar(),tt(),通过执行这一系列函数来获取内层函数的内存地址,并直接以内存地址加上()的方式执行。

     1 def foo():
     2     name = "xxx"
     3     def bar():
     4         name = "bar"
     5         print(name)
     6         def tt():
     7             name = "tt"
     8             print(name)
     9         return tt
    10     return bar
    11 
    12 foo()()()

    执行结果为:

    bar
    tt
    
  • 相关阅读:
    NOIP2015 D1 解题报告
    2017.10.2 国庆清北 D2T2 树上抢男主
    2017.10.6 国庆清北 D6T3 字符串
    2017.10.1 国庆清北 D1T2 两个逗比捉迷藏
    电压驱动和电流驱动
    电子管
    点亮板载LED
    ESP8266——一般控制方法
    ESP8266——CPU频率更改和深度睡眠模式
    ESP8266——ADC
  • 原文地址:https://www.cnblogs.com/chrrydot/p/9784774.html
Copyright © 2011-2022 走看看