我总是认为 Callable 相当于拥有 dunder__call__但显然也有__name__,因为以下代码是正确的mypy --strict:
def print_name(f: Callable[..., Any]) -> None:
print(f.__name__)
def foo() -> None:
pass
print_name(foo)
print_name(lambda x: x)
Run Code Online (Sandbox Code Playgroud)
python Callable 的实际接口是什么?
我挖出了什么functools.wraps。AFAIU 设定('__module__', '__name__', '__qualname__', '__doc__', '__annotations__')- 这与Callable预期的相同吗?
冒号前面必须有空格,如果类型不存在,则省略。
并举了一个例子:
Parameters
----------
x : type
Description of parameter `x`.
y
Description of parameter `y` (with type not specified)
Run Code Online (Sandbox Code Playgroud)
另一方面, PEP8字面意思是冒号前的空格是错误的:
# Wrong:
code:int # No space after colon
code : int # Space before colon
Run Code Online (Sandbox Code Playgroud)
我知道这适用于代码,而不适用于文档字符串,但为什么不保持一致?
在冒号前放置一个空格的动机是什么?
它似乎违反了排版规则和 python 约定(或至少是直觉)。
我在 conda 中创建了一个新环境并安装了 yaml。
$ conda list | grep yaml
yaml 0.1.7 had09818_2
Run Code Online (Sandbox Code Playgroud)
但我无法导入它:
$ python -c 'import yaml'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'yaml'
Run Code Online (Sandbox Code Playgroud)
Python 指向带有 env 的正确目录:
$ which python
/home/xxx/.conda/envs/tf2/bin/python
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
我检查了类似的问题:在 这个问题是由坏磁盘扇区引起的,而在 这个单一的答案并没有真正解释任何事情。
如果重要的话,我的 python 在 Ubuntu 16.04 上是 3.7.4。
我刚刚阅读了PEP 586。在动机中,作者这样说:
numpy.unique 将返回单个数组或包含两个到四个数组的元组,具体取决于三个布尔标志值。
(...)
目前无法表达这些函数的类型签名:PEP 484 不包含任何用于编写签名的机制,其中返回类型根据传入的值而变化。
我们建议添加文字类型来解决这些差距。
但我真的不明白添加Literal类型对此有什么帮助。而且我也不同意这样的说法
PEP 484 不包含任何用于编写签名的机制,其中返回类型根据传入的值而变化。
据我所理解,Union可以在这种情况下使用。
返回类型如何numpy.unique注释Literal?
我在 makefile 中遇到了这种构造:
clean:
@echo "Cleaning"
ifeq "DEV" "$(VERSION)"
$(MAKE) clean -C bin/
else
@echo "Unsupported"
@false
endif
Run Code Online (Sandbox Code Playgroud)
在@false做什么?
附注
谷歌搜索把我带到了这里——他们使用它,但他们没有解释它。