我想在Python中使用重载。我知道这在设计上是不可能的(Python 是动态类型语言),这里有关于这个主题的很好的帖子。这就是为什么我可以使用诸如多重调度(多方法)之类的东西。我正在考虑最好的解决方案,即为任何函数或类方法实现多重分派。Python 中是否有原生包含的解决方案?
在我的例子中,使用 singledispatch (在 3.4 中添加到 Python 中)是不够的(因为只考虑第一个参数的类型,而我需要multiple)。
我还知道我可以使用关键字参数(即具有单个函数并通过检查所有参数来驱动行为),但是当您有很多参数和组合时,它会变得复杂。
到目前为止,我能够找到这两个库(不包含在Python标准库中):
multimeta为类提供特殊的命名空间基本用法如下:
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)
这个功能看起来非常相似。
我主要有两个问题:
我有以下内容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) 希望为 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)