Можно использовать глобальную переменную в других функциях путем объявления этого как global
в каждой функции, которая присваивает ему:
globvar = 0
def set_globvar_to_one():
global globvar # Needed to modify global copy of globvar
globvar = 1
def print_globvar():
print(globvar) # No need for global declaration to read value of globvar
set_globvar_to_one()
print_globvar() # Prints 1
я предполагаю, что причина его состоит в том, что, так как глобальные переменные так опасны, Python хочет удостовериться, что Вы действительно знаете, что это - то, с чем Вы играете путем явного требования global
ключевое слово.
Видят другие ответы, если Вы хотите совместно использовать глобальную переменную через модули.
Вместо этого вы можете попробовать включить cmath
и использовать static_cast
(приведение необходимо для разрешения перегрузки double
).
В противном случае вы ограничите свою функцию до extern C
функции. Это будет работать как
extern "C" typedef double (*ExtCFuncPtr)(double);
double foo(double num, ExtCFuncPtr func) {
return 65.4;
}
Другой способ - сделать foo
функтором
struct foo {
typedef double result_type;
template<typename FuncPtr>
double operator()(double num, FuncPtr f) const {
return 65.4;
}
};
Затем вы можете передать foo ()
в boost :: bind
и поскольку это шаблон, он принимает любые ссылки. Он также будет работать с объектами функций, а не только с указателями функций.
Попробуйте использовать typedef:
extern "C" {
typedef double (*CDoubleFunc)(double);
}
double foo(double num, CDoubleFunc func) {
return 65.4;
}