小编Ner*_*xis的帖子

多方法和多重调度有什么区别吗?

我想在Python中使用重载。我知道这在设计上是不可能的(Python 是动态类型语言),这里有关于这个主题的很好的帖子。这就是为什么我可以使用诸如多重调度(多方法)之类的东西。我正在考虑最好的解决方案,即为任何函数或类方法实现多重分派。Python 中是否有原生包含的解决方案?

在我的例子中,使用 singledispatch (在 3.4 中添加到 Python 中)是不够的(因为只考虑第一个参数的类型,而我需要multiple)。

我还知道我可以使用关键字参数(即具有单个函数并通过检查所有参数来驱动行为),但是当您有很多参数和组合时,它会变得复杂。

到目前为止,我能够找到这两个库(不包含在Python标准库中):

基本用法如下:

from multimethod import multimethod

@multimethod
def add(x: int, y: int):
    ...

@multimethod
def add(x: str, y: str):
    ...
Run Code Online (Sandbox Code Playgroud)

或者

from multipledispatch import dispatch

@dispatch(int, int)
def add(x, y):
    ...

@dispatch(str, str)
def add(x, y):
    ...
Run Code Online (Sandbox Code Playgroud)

这个功能看起来非常相似。

我主要有两个问题:

  • 这些多重调度实现中的一种是否比另一种带来任何(不利)优势?(例如支持的类型,速度,性能,限制,...)它似乎具有可比性,但我对此不确定,因为后者(multipledispatch)似乎更受欢迎(检查 GitHub 星星)但维护较少(我什至会说不成熟)。
  • 是否还有其他解决方案(即使是包含在 Python 标准库中的解决方案)?

python multiple-dispatch multimethod

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

pandas:类型错误:不可散列的类型:“列表”

我有以下内容df

df = pd.DataFrame(
    [
        [["John Muller"], "person", [8866155845]],
        [["Innovation Division"], "company", np.nan],
        [["Carol Sway"], "person", [8866155845]],
    ],
    columns=["name", "kind", "phone"],
)

# Out:
#                     name     kind         phone
# 0          [John Muller]   person  [8866155845]
# 1  [Innovation Division]  company           NaN
# 2           [Carol Sway]   person  [8866155845]
Run Code Online (Sandbox Code Playgroud)

我想查找重复的电话号码。但其中的对象df是列表,因此使用:

df.duplicated('phone') 
Run Code Online (Sandbox Code Playgroud)

将生成错误:

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

python hash list duplicates pandas

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

在 PyCharm 启动时设置默认 Pandas 选项

希望为 Pycharm 中的任何项目创建我的 Pandas 启动选项。我有一个名为 Test 的项目,它包含三个模块。

Startup_Panda_Options.py用我需要的设置创建,然后创建__init__.py它以便在测试项目启动时加载。当我运行一些测试数据时,test.py它失败了,因为我得到NameError: name 'pd' is not defined这意味着__init__.py从未运行过。

第二个选项是将 Startup_Panda_Options.py 放入文件夹,C:\Users\peter\Documents\PyCharm\venv\Lib\site-packages\IPython\core\profile但出现了同样的问题。

第三个选项,在 PyCharm 中通过 File | 设置 | 工具 | 启动任务 | 我参考了该Startup_Panda_Options.py文件。

因此,根据此处的建议和文档进行了三次尝试。关于如何使这些选项起作用的任何想法?三个模块如下:

Startup_Panda_Options.py:
        
import pandas as pd
    
def Panda_Options():
        options = {
            'display': {
                'max_columns': None,     # used in __repr__() methods ‘None’ value means unlimited.
                'max_colwidth': 25,     # sets the maximum width of columns. Cells of this length or …
Run Code Online (Sandbox Code Playgroud)

python pycharm pandas

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