内容简介:在 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 才能修改外部函数的变量,其他语言默认就是可以修改外部函数的变量的
以上所述就是小编给大家介绍的《不同语言在函数内部定义函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Python 函数调用&定义函数&函数参数
- Shell编程—【04】函数的定义、参数、变量作用域、函数库
- Laravel 增加自定义全局函数
- 在 Go 语言中定义函数
- Golang中的自定义函数
- HIVE自定义函数的扩展
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coming of Age in Second Life
Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95
The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!