我有两个C函数f1
和f2
,它们接受相同的参数。根据条件,我需要使用相同的参数调用其中一个函数:
if (condition) {
result = f1(a, b, c);
} else {
result = f2(a, b, c);
}
我知道可以使用以下语法:
result = condition ? f1(a, b, c) : f2(a, b, c)
是否有可能使用DRY语法,只需写一次参数?
我有两个C函数f1
和f2
,它们接受相同的参数。根据条件,我需要使用相同的参数调用其中一个函数:
if (condition) {
result = f1(a, b, c);
} else {
result = f2(a, b, c);
}
我知道可以使用以下语法:
result = condition ? f1(a, b, c) : f2(a, b, c)
是否有可能使用DRY语法,只需写一次参数?
是的,它像你建议的那样很好地工作。
函数调用运算符()
只需要一个左操作数,该操作数计算为函数指针,函数名就是函数指针。
调用时不需要解引用函数指针,()
运算符会自动解引用。
此示例程序演示:
#include <stdio.h>
static int foo(int x) {
return x + 1;
}
static int bar(int x) {
return x - 1;
}
int main(void) {
for (int i = 0; i < 10; ++i)
printf("%d -> %d\n", i, (i & 1 ? foo : bar)(i));
return 0;
}
它会打印出:
0 -> -1
1 -> 2
2 -> 1
3 -> 4
4 -> 3
5 -> 6
6 -> 5
7 -> 8
8 -> 7
9 -> 10
这里没有什么奇怪的。
考虑到 C 语言比 Python 先发明了很多,也许是 Python 的语义更像 C 语言。当然,或许只是更加明智而已。 :)
? .. :
,而是使用if .. else
运算符),机制也不同。与C++不同,Python是完全成熟的面向对象编程语言,函数和类都是一等对象。 - too honest for this siteint (*f)(int, int, int, ...);
f = condition ? f1 : f2;
result = (*f)(a, b, c, ...);
result = (condition ? f1 : f2)(a, b, c, ...)
也能够正常工作。 - The Paramagnetic Croissant
condition
既为真又为假,调用相同的函数f1
是什么意思?如果这是一个打字错误,请纠正它。 - user3078414f1
和f2
,它就能正常工作(但你不会尝试编译未在使用前声明或定义函数的代码,对吧——那已经是上个千年的事情了!)。 - Jonathan Leffler? ...:
,因此不清楚您所说的“pythonic syntax”是什么意思。而且两种语言的语义非常不同。 - too honest for this site