不同语言在函数内部定义函数

栏目: IT技术 · 发布时间: 4年前

内容简介:在 LeetCode 刷题的时候,题解有的大佬给出的答案很优秀,是 python 的,想抄作业发现有的功能函数都定义在答案函数的内部,主要是闭包操作外部变量方便。不同语言在函数内部定义函数稍有不同,于是记录下自己可能用到的语言在函数中定义函数的方式。python 定义内部函数加个 def 就行,和使用变量差别不大,可以在参数列表后跟->指定返回值。C++主要是使用 Lambda 函数来实现,可以在参数列表后跟->指定返回值。在函数前有个

在 LeetCode 刷题的时候,题解有的大佬给出的答案很优秀,是 python 的,想抄作业发现有的功能函数都定义在答案函数的内部,主要是闭包操作外部变量方便。不同语言在函数内部定义函数稍有不同,于是记录下自己可能用到的语言在函数中定义函数的方式。

python

python 定义内部函数加个 def 就行,和使用变量差别不大,可以在参数列表后跟->指定返回值。

def outerFunc() -> None:
    a: int = 1
    def innerFunc(b: int) -> int:
        nonlocal a  #不加的话不会修改外部变量的值
        a = 2
        return a + b
    print("ans:{ans}, a:{a}".format(ans=innerFunc(3), a=a)) #不加nonlocal ans:5, a:1; 加上nonlocal ans:5, a:2

if __name__ == '__main__':
    outerFunc()

C++

C++主要是使用 Lambda 函数来实现,可以在参数列表后跟->指定返回值。在函数前有个 [] 的引出符,不同符号对于外部变量的处理方式不同:

  • [a],表示以值传递方式捕捉变量 a
  • [=],表示值传递捕捉所有父作用域变量,以值传递的形式捕获的变量如果要修改,需要在函数参数列表后面加上 mutable
  • [&a],表示以引用传递方式捕捉变量 a
  • [&],表示引用传递捕捉所有父作用域变量
  • [this],表示值传递方式捕捉当前的 this 指针
  • [=,&a],表示以引用传递方式捕捉 a,值传递方式捕捉其他变量
#include <iostream>
using namespace std;

void outerFunc() {
    int a = 1;
    auto innerFunc = [&a](int b)->int {
        a = 2;
        return a + b;
    };
    cout << "ans:" << innerFunc(3) << ", a:" << a;  //ans:5, a:2
}

int main(int argc, char* argv[]) {
    outerFunc();
    return 0;
}

golang

golang 和 python 差不多,函数返回值直接写在参数后边。不过内部定义不能写函数名,调用可以通过变量来使用。

package main
import "fmt"

func outerFunc() {
    a := 1
    // innerFunc := func innerFuncTest(b int) int { //error
    innerFunc := func (b int) int {
        a = 2
        return a + b
    }
    fmt.Printf("ans:%d, a:%d", innerFunc(3), a) //ans:5, a:2
}

func main(){
    outerFunc()
}

js

js 参数和返回值不用指定,箭头函数连接参数和返回的对象。

function outerFunc() {
    a = 1;
    innerFunc = (b) => {
        a = 2;
        return a + b;
    };
    console.log('ans:', innerFunc(3), ', a:', a); //ans: 5 , a: 2
}

outerFunc();

不同之处

  • 只有 python 需要加个 nonlocal 才能修改外部函数的变量,其他语言默认就是可以修改外部函数的变量的

以上所述就是小编给大家介绍的《不同语言在函数内部定义函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

运营攻略

运营攻略

陈辉 / 人民邮电出版社 / 2017-12 / 59

《运营攻略 移动互联网产品运营提升笔记》深入浅出地告诉大家什么是运营,梳理了移动互联网时代各类运营方向的工作重点与工作方法,结合实例指出了每类运营方向的提升要点;结合作者的亲身经历,解答了无数运营人与产品人纠结的运营与产品到底有什么异同的问题;指明了运营人的核心竞争力,并对处于不同阶段的运营人提出了相应的建议与要求;尤为难得的是,《运营攻略 移动互联网产品运营提升笔记》中还阐述了内容型产品与工具型......一起来看看 《运营攻略》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具