||
C语言及Python中出现两括号并一起的情况,如 pfun(-5)(20),都是合法的表示,其实就是函数调用中又用另外的函数做了参数,C语言中涉及函数指针的概念。写如下两示例协助理解:
//C语言
#include "stdafx.h"
int rfun1(int x)
{ printf("rfun1:\n");
return x+x;
}
int rfun2(int x)
{ printf("rfun2:\n");
return x*x;
}
int (*pfun(int r))(int x)
{ printf("%d\n",r);
if(r>0)
return rfun1;
else
return rfun2;
return 0;
}
int main(int argc, char* argv[])
{
printf("%d\n", pfun(-5)(20));
printf("%d\n", pfun(5)(20));
return 0;
}
#python示例:
def pfun(r):
print(r)
def rfun1(x):
print("rfun1:")
return x+x
def rfun2(x):
print("rfun2:")
return x*x
if r>0:
return rfun1
else:
return rfun2
print(pfun(-5)(20))
print(pfun(5)(20))
运行结果都是:
-5
rfun2:
400
5
rfun1:
40
在C语言中,int (*pfun(int r))(int x){ ... }表示定义了一个函数pfun,其返回类型是指向函数的指针型,其自身参数是int型r。由pfun返回的值是函数,这个返回的函数应该int型并且需要有int型参数x。
这些机制在编写复杂程序时可能用得上。如人工神经网络中连接两个层可能用到:x=Dense(,...)(inputs)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-1 08:49
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社