小编han*_*ans的帖子

Python Callable 的等效协议是什么?

我总是认为 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预期的相同吗?

python mypy python-typing

6
推荐指数
1
解决办法
424
查看次数

为什么定义在 NumPy 文档字符串部分的冒号前有一个空格?

Numpy 文档字符串指南说:

冒号前面必须有空格,如果类型不存在,则省略。

并举了一个例子:

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 约定(或至少是直觉)。

python restructuredtext numpy docstring numpydoc

5
推荐指数
1
解决办法
426
查看次数

Python yaml:ModuleNotFoundError

我在 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。

python yaml python-3.x anaconda

3
推荐指数
1
解决办法
384
查看次数

PEP 586:Literal 实际上如何帮助变量返回类型?

语境

我刚刚阅读了PEP 586。在动机中,作者这样说:

numpy.unique 将返回单个数组或包含两个到四个数组的元组,具体取决于三个布尔标志值。

(...)

目前无法表达这些函数的类型签名:PEP 484 不包含任何用于编写签名的机制,其中返回类型根据传入的值而变化。

我们建议添加文字类型来解决这些差距。

但我真的不明白添加Literal类型对此有什么帮助。而且我也不同意这样的说法

PEP 484 不包含任何用于编写签名的机制,其中返回类型根据传入的值而变化。

据我所理解,Union可以在这种情况下使用。

问题

返回类型如何numpy.unique注释Literal

python numpy pep python-typing

2
推荐指数
1
解决办法
160
查看次数

makefile 中的“@false”和“@true”是什么?

我在 makefile 中遇到了这种构造:

clean:
    @echo "Cleaning"
ifeq "DEV" "$(VERSION)"
    $(MAKE) clean -C bin/
else
    @echo "Unsupported"
    @false
endif
Run Code Online (Sandbox Code Playgroud)

@false做什么?

附注

谷歌搜索把我带到了这里——他们使用它,但他们没有解释它。

makefile

1
推荐指数
1
解决办法
6228
查看次数