有没有办法用 Python (3.5+) 类型提示声明函数对象的签名?具体来说,有没有办法声明一个函数可以接受什么类型的函数对象或一个变量可以引用什么类型的函数对象。
我确定它可能会变得非常混乱(例如,它可以使用 C++11 lambda 类型),但是至少有某种方法可以检查函数类型吗?
例如:
def func1(x: int) -> int:
return x
def func2(x: int, y: int) -> int:
return x + y
# 'TwoArgFn' is a 'function type' that accepts two ints and returns an int
def takes_two(f: TwoArgFn) -> int:
return f(123, 456)
Run Code Online (Sandbox Code Playgroud)
func1作为参数传递到takes_two应该是一个错误,而传递func2是好的。
对于参数的数据类型,Haskell中的函数定义中的括号有什么意义.
例如:
doStuff Name -> Age -> String
doStuff (NameConstr a) (AgeConstr b) = "Nom: " ++ a ++ ", age: " ++ b
Run Code Online (Sandbox Code Playgroud)
预先在某处定义以下内容:
data Name = NameConstr String
data Age = AgeConstr Integer
Run Code Online (Sandbox Code Playgroud)
功能参数a和b是否可以在这里否定需要括号的方式捕获?
仅供参考,我正在努力:
我似乎无法掌握这个更精细的细节.
在C++ 11中,在给定一种请求循环(作为Web请求循环的一部分)的情况下,对被捕获的信号执行不安全代码的最安全(并且是最有效的)方法是什么?例如,从linux命令行捕获SIGUSR1时:kill -30 <process pid>
"不安全代码"可以在下一个被触发的请求上运行,如果在运行不安全代码之前多次触发信号,则不会丢失任何信息.
例如,我目前的代码是:
static bool globalFlag = false;
void signalHandler(int sig_num, siginfo_t * info, void * context) {
globalFlag = true;
}
void doUnsafeThings() {
// thigns like std::vector push_back, new char[1024], set global vars, etc.
}
void doRegularThings() {
// read filesystem, read global variables, etc.
}
void main(void) {
// set up signal handler (for SIGUSR1) ...
struct sigaction sigact;
sigact.sa_sigaction = onSyncSignal;
sigact.sa_flags = SA_RESTART | SA_SIGINFO;
sigaction(SIGUSR1, &sigact, (struct sigaction *)NULL); …Run Code Online (Sandbox Code Playgroud) c++ ×1
c++11 ×1
haskell ×1
linux ×1
posix ×1
python ×1
python-3.x ×1
type-hinting ×1
types ×1
unix ×1