python 中的函数模板
Function templates in python
我想知道如何在 python 中使用与 template < typename T> 类似的代码,因为它在 C++ 代码示例中使用:
template <typename T>
unsigned int counting_bit(unsigned int v){
v = v - ((v >> 1) & (T)~(T)0/3); // temp
v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3); // temp
v = (v + (v >> 4)) & (T)~(T)0/255*15; // temp
return v;
}
我如何在 python 中以与 C++ 中提到的相同的方式对具有变量类型名的对象进行类型转换?
只需将类型传递给函数即可。
例如,看到这个(无用的)函数:
def converter(x, required_type):
return required_type(x)
converter('1', int)
converter('1', float)
DeepSpace 的答案可以通过使用 Python 的闭包来做类似下面的事情——有时称为 工厂函数 或a function factory — 通过应用模板为特定类型创建函数。它还显示了在 Python 中获取和使用另一个变量的类型是多么容易。
def converter_template(typename):
def converter(v):
t = typename(v) # convert to numeric for multiply
return type(v)(t * 2) # value returned converted back to original type
return converter
int_converter = converter_template(int)
float_converter = converter_template(float)
print('{!r}'.format(int_converter('21'))) # '42'
print('{!r}'.format(float_converter('21'))) # '42.0'
我想知道如何在 python 中使用与 template < typename T> 类似的代码,因为它在 C++ 代码示例中使用:
template <typename T>
unsigned int counting_bit(unsigned int v){
v = v - ((v >> 1) & (T)~(T)0/3); // temp
v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3); // temp
v = (v + (v >> 4)) & (T)~(T)0/255*15; // temp
return v;
}
我如何在 python 中以与 C++ 中提到的相同的方式对具有变量类型名的对象进行类型转换?
只需将类型传递给函数即可。
例如,看到这个(无用的)函数:
def converter(x, required_type):
return required_type(x)
converter('1', int)
converter('1', float)
DeepSpace 的答案可以通过使用 Python 的闭包来做类似下面的事情——有时称为 工厂函数 或a function factory — 通过应用模板为特定类型创建函数。它还显示了在 Python 中获取和使用另一个变量的类型是多么容易。
def converter_template(typename):
def converter(v):
t = typename(v) # convert to numeric for multiply
return type(v)(t * 2) # value returned converted back to original type
return converter
int_converter = converter_template(int)
float_converter = converter_template(float)
print('{!r}'.format(int_converter('21'))) # '42'
print('{!r}'.format(float_converter('21'))) # '42.0'