所有 C 类型都可用于类型声明:整数和浮点类型,复数,结构,联合和指针类型。 Cython 可以在分配时自动和正确地转换类型。这还包括 Python 的任意大小整数类型,其中转换为 C 类型时溢出的值将在运行时引发 Python `OverflowError`。 (但是,在进行算术运算时,它不会检查溢出。)在这种情况下,生成的 C 代码将正确且安全地处理 C 类型的平台相关大小。
...
...
@@ -46,13 +46,13 @@ def integrate_f(double a, double b, int N):
```
由于迭代器变量`i`是用 C 语义键入的,因此 for 循环将被编译为纯 C 代码。键入`a`,`s`和`dx`非常重要,因为它们涉及 for 循环中的算术运算;键入`b`和`N`会产生较小的差异,但在这种情况下,要保持一致并输入整个函数并不是一件额外的工作。
由于迭代器变量`i`是用 C 语法定义的,因此 for 循环将被编译为纯 C 代码。键入`a`,`s`和`dx`非常重要,因为它们涉及 for 循环中的算术运算;键入`b`和`N`会产生较小的差异,但在这种情况下,要保持一致并输入整个函数并不是一件额外需要做的工作。
请注意,Cython 根据其赋值(包括作为循环变量目标)推断出局部变量的类型,这也可以减少在任何地方显式指定类型的需要。例如,将`dx`声明为 double 类型是不必要的,就像在最后一个版本中声明`s`的类型一样(其中`f`的返回类型已知为 C double。)一个值得注意的例外然而,算术表达式中使用的是 _ 整数类型,因为 Cython 无法确保不会发生溢出(因此在需要 Python 的 bignums 时会回退到`object`)。要允许推断 C 整数类型,请将`infer_types`[指令](../userguide/source_files_and_compilation.html#compiler-directives) 设置为`True`。对于熟悉此语言功能的读者,此指令的工作类似于 C ++中的`auto`关键字。减少输入所有内容的需求可能会有很大帮助,但也可能导致意外。特别是如果一个人不熟悉 c 类型的算术表达式。这些可以在[中找到](https://www.eskimo.com/~scs/cclass/int/sx4cb.html)[的快速概述。](https://www.eskimo.com/~scs/cclass/int/sx4cb.html)_
\ No newline at end of file
请注意,Cython 根据其赋值(包括作为循环变量目标)推断出局部变量的类型,这也可以减少在任何地方显式指定类型的需要。例如,将`dx`声明为 double 类型是不必要的,就像在最后一个版本中声明`s`的类型一样(其中`f`的返回类型已知为 C 语言的double类型。)一个值得注意的例外然而,算术表达式中使用的是整数类型,因为 Cython 无法确保不会发生溢出(因此在需要 Python 的 bignums 时会回退到`object`)。要允许推断 C 整数类型,请将`infer_types`[指令](../userguide/source_files_and_compilation.html#compiler-directives) 设置为`True`。对于熟悉此语言功能的读者,此指令的工作类似于 C ++中的`auto`关键字。减少输入所有内容的需求可能会有很大帮助,但也可能导致意外。特别是如果一个人不熟悉 c 类型的算术表达式。这些可以在[中找到](https://www.eskimo.com/~scs/cclass/int/sx4cb.html)[的快速概述。](https://www.eskimo.com/~scs/cclass/int/sx4cb.html)_