我通常会在 jupyter 笔记本中编写并需要函数签名/文档字符串,因此我会执行类似键入 print() 的操作,然后将光标放在括号之间按 Shift+Tab。pycharm中有类似的东西吗?
我打开了通用代码完成设置,当我在 pycharm 中输入“print”时,它会显示签名,但是一旦我输入左括号,签名/文档就会消失。我发现自己经常编写函数名称,查看文档,然后编写 () ,也许还有一个参数,然后必须转到换行符或其他内容并重写函数名称,以便再次获得文档字符串。对此,更好的工作流程是什么?
编辑:根据反馈,下面是一些额外的图像。建议使用 ctrl+space,但这并没有给我我所希望的。
这是完美的。但是,当我点击左括号时,描述就会消失,如果我按照建议点击 ctrl+space,我会得到:
按下 ctrl+space 后,然后:
两次 ctrl+space 之后。显然两者不一样,他们为其他事情提供自动完成功能。我需要更改一些设置吗?
另外,ctrl+P 对我没有任何作用 - 也许我在某个时候取消了默认设置?
我正在开发一个包并logging在开发过程中使用模块来记录我的调试/信息日志。有没有一种好方法可以只为我的包启用日志记录,而不为 root 以下的所有内容启用日志记录?
假设我有 my_package:
# Some package from elsewhere that I need but don't want to see logging from
import other_package
import logging
from logging import NullHandler
logger = logging.getLogger(__name__)
logger.addHandler(NullHandler())
def my_func():
logger.debug("a message")
Run Code Online (Sandbox Code Playgroud)
以及使用该包的主要函数:
import my_package
# Some package from elsewhere that I need but don't want to see logging from
import another_package
import logging
logging.basicConfig(level=logging.DEBUG)
my_package.my_func()
Run Code Online (Sandbox Code Playgroud)
此设置将让我看到my_func()对 的调用logger.debug(),但它也会显示logger.debug()来自 other_package 和 another_package 的任何调用,这是我不想看到的。如何设置只能看到 my_package 中的日志记录?
我可以做一些奇怪的事情,比如硬编码禁用彼此的包logging.propagate或类似的东西,但这感觉应该有更好的方法。
我正在使用Pandas存储一个系统生成列名的大型数据集.像这样的东西:
import numpy as np
import pandas as pd
df = pd.DataFrame([[0,1,2],[10,11,12],[20,21,22]],columns=["r0","r1","r2"])
Run Code Online (Sandbox Code Playgroud)
这些系统名称也有更有意义的名称,用户实际可以理解.到目前为止,我一直使用如下字典映射它们:
altName = {"Objective 1":"r0", "Result 5":"r1", "Parameter 2":"r2"}
Run Code Online (Sandbox Code Playgroud)
这样就可以像这样访问它们:
print(df[altName["Objective 1"]])
Run Code Online (Sandbox Code Playgroud)
这有效,但它导致很难读取代码(想想带有多个变量的绘图命令等).我不能简单地将列重命名为友好名称,因为有时我需要访问这两个列,但我不确定如何在没有字典的情况下同时支持这两个列.
是否可以为列分配多个名称,或者执行某种允许我使用这两种访问方法的隐式映射:
print(df["r0"])
print(df["Objective 1])
Run Code Online (Sandbox Code Playgroud)
我已经想过制作我自己的子类来检测一个keyerror,然后无法使用备用名的辅助字典并试试,但我不确定我是否能够在保留所有其他DataFrame功能的同时做到这一点(我'自我评估我的Python初学者接近中级).
非常感谢您的建议.
我发现自己有时会迭代地构建布尔值/掩码,例如:
mask = initialize_mask_to_true()
for condition in conditions:
mask = mask & condition
df_masked = pd.loc[mask, my_cols]
Run Code Online (Sandbox Code Playgroud)
其中条件可能是单独的布尔掩码或比较的列表,例如df[some_col] > someVal
是否有一个好的方法来执行initialize_mask_to_true()?有时我会做一些感觉丑陋的事情,例如:
mask = ~(df.loc[:, df.columns[0]] == np.nan)
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它something == np.nan总是错误的,但感觉有一种更干净的方法。
假设我有以下多列Pandas DataFrame:
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', ],
['one', 'two', 'one', 'two', 'one', 'two', ]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 6), columns=arrays)
bar baz foo
one two one two one two
0 1.018709 0.295048 -0.735014 1.478292 -0.410116 -0.744684
1 1.388296 0.019284 -1.298793 1.597739 0.044640 -0.040337
2 -0.151763 -0.424984 -1.322985 -0.350483 0.590343 -2.189122
3 -0.221250 -0.449578 -1.512640 0.077380 -0.485380 -0.687565
4 -0.334315 1.790056 0.245414 -0.236784 -0.788226 0.483709
5 -0.943732 1.437968 -0.114556 -1.098798 …Run Code Online (Sandbox Code Playgroud)