Oma Dt Asked:2020-08-10 15:58:13 +0000 UTC2020-08-10 15:58:13 +0000 UTC 2020-08-10 15:58:13 +0000 UTC python中.pyi模块扩展的含义及其内容 772 我是否正确理解这些模块代表(Java,С#)语言中的接口的类似物?或者他们的意思是别的什么。 python 1 个回答 Voted Best Answer hoefling 2020-08-10T17:06:01Z2020-08-10T17:06:01Z .pyi文件是存根,它们的用途和格式在PEP 484中描述。解释器根本不使用这些文件,它们的目的是提供有关代码类型的信息。例如,您有一个没有键入的第三方模块,它不是您的,您无法编辑它,但您想指定类型: # fizz.py def greet(who): return f'Hello {who}' 解决方案是在存根的帮助下找到的:您创建一个fizz.pyi包含类型签名greet但没有实现的文件: # fizz.pyi def greet(who: str) -> str: ... 现在 Pycharmmypy的静态类型输入实用程序或代码完成知道在哪里可以找到greet. 我是否正确理解这些模块代表(Java,С#)语言中的接口的类似物? 不,Python 中没有 Java/C# 所理解的接口。如果在 Java/C# 中接口是程序的一部分并直接影响其编译(例如:实现接口的类的签名与接口的签名不同) interface Fizz { public void buzz(); } class FizzImpl implements Fizz { public int buzz() { return 42; } } 并且代码不会编译。)Python 中的存根根本不会影响程序的运行,因为解释器不知道也看不到它们——它们可能不存在,包含不正确的代码,甚至是粗略的;代码编辑器中的类型检查会中断,但程序本身会继续运行,就好像什么都没发生一样。
.pyi文件是存根,它们的用途和格式在PEP 484中描述。解释器根本不使用这些文件,它们的目的是提供有关代码类型的信息。例如,您有一个没有键入的第三方模块,它不是您的,您无法编辑它,但您想指定类型:解决方案是在存根的帮助下找到的:您创建一个
fizz.pyi包含类型签名greet但没有实现的文件:现在 Pycharm
mypy的静态类型输入实用程序或代码完成知道在哪里可以找到greet.不,Python 中没有 Java/C# 所理解的接口。如果在 Java/C# 中接口是程序的一部分并直接影响其编译(例如:实现接口的类的签名与接口的签名不同)
并且代码不会编译。)Python 中的存根根本不会影响程序的运行,因为解释器不知道也看不到它们——它们可能不存在,包含不正确的代码,甚至是粗略的;代码编辑器中的类型检查会中断,但程序本身会继续运行,就好像什么都没发生一样。