小编Pet*_*ter的帖子

Python:在单个文件中获取函数和所有依赖项的好方法?

我正在研究一个可以增长,增长和发展的庞大的Python代码库.这不是一个单一的应用程序 - 更多的是一些共享一些常见代码的实验.

我经常要公开发布一个给定的实验.我不想发布我的整个糟糕的代码库,只是发布运行给定实验所需的部分.所以基本上我想要抓取所有导入并将所调用的任何函数(或至少导入的所有模块)复制到单个文件中,我可以将其作为演示版本发布.我当然只想对当前项目中定义的文件执行此操作(不是像numpy这样的依赖包).

我现在正在使用PyCharm,并且无法找到该功能.有没有这样做的工具?

编辑:我创建了公共发布包来解决这个问题.给定一个主模块,它会遍历依赖模块并将它们复制到一个新的仓库中.

python automated-refactoring pycharm

6
推荐指数
3
解决办法
1894
查看次数

用pickle或dill序列化__main__中的对象

我有酸洗问题。我想在我的主脚本中序列化一个函数,然后加载它并在另一个脚本中运行它。为了证明这一点,我制作了 2 个脚本:

尝试 1:天真的方法:

dill_pickle_script_1.py

import pickle
import time

def my_func(a, b):
    time.sleep(0.1)  # The purpose of this will become evident at the end
    return a+b

if __name__ == '__main__':
    with open('testfile.pkl', 'wb') as f:
        pickle.dump(my_func, f)
Run Code Online (Sandbox Code Playgroud)

dill_pickle_script_2.py

import pickle

if __name__ == '__main__':
    with open('testfile.pkl') as f:
        func = pickle.load(f)
        assert func(1, 2)==3
Run Code Online (Sandbox Code Playgroud)

问题:当我运行脚本 2 时,我得到AttributeError: 'module' object has no attribute 'my_func'. 我明白为什么:因为当 my_func 在 script1 中被序列化时,它属于__main__模块。dill_pickle_script_2 不知道__main__那里引用了 dill_pickle_script_1 的命名空间,因此找不到引用。

尝试 …

python pickle dill

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

在 MacOS 中,Matplotlib 绘图始终隐藏在后台

每当我显示 matplotlib 图时,它都会在后台打开,实际上我必须在 IDE 窗口中移动才能找到它(它不会显示在 Command-Tab 上)。如果 IDE(PyCharm 或 Eclipse)处于全屏状态,它也不会显示“分解窗口视图”Fn-F3。每次我想看情节时都必须在窗口之间移动,这真的很烦人。我不确定这是 matplotlib 还是 OSX 的错误。

期望的行为是,一旦执行命令 plt.show(),绘图窗口就会弹出到前面。或者至少可以通过命令选项卡来实现。

有人有解决方案吗?

eclipse macos matplotlib pycharm

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

锁定 IPython 笔记本以进行编辑

我在服务器上运行 IPython 笔记本,我正在本地编辑/原型制作它们。当我准备好向其他人展示我的本地笔记本时,我会使用 rsync 来推送它们。

问题是,打开所有这些笔记本后,很容易在服务器笔记本而不是本地笔记本上意外编辑内容。是否有一些合理的机制可以防止意外编辑笔记本?我仍然希望能够运行服务器笔记本,并且它们仍然应该能够写入输出 - 我只是想以某种方式锁定它们以便无法编辑它们。

ipython-notebook

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

获取锯齿状切片的 numpy 简写

我有一个经常做的操作,我称之为“锯齿状切片”,因为我不知道它的真实名称。最好通过例子来解释:

a = np.random.randn(50, 10)
entries_of_interest = np.random.randint(10, size = 50)  # Vector of 50 indices between 0 and 9
# Now I want the values contained in each row of a at the corresponding index in "entries of interest"
jagged_slice_of_a = a[np.arange(a.shape[0]), entries_of_interest]
# jagged_slice_of_a is now a vector with 50 elements.  Good.
Run Code Online (Sandbox Code Playgroud)

唯一的问题是执行此a[np.arange(a.shape[0]), entries_of_interest]索引有点麻烦(为此而必须构造“np.arange(a.shape[0])”似乎很愚蠢)。我想要类似:操作员的东西,但它:会做其他事情。有没有更简洁的方法来执行此操作?

最佳答案:

不,原生 numpy 没有更好的方法。如果需要,您可以为此创建一个辅助函数。

python arrays indexing numpy array-broadcasting

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

Pycharm:MultipleInstanceError:正在创建PyDevTerminalInteractiveShell的多个不兼容的子类实例

在PyCharm中,如果我在调试模式下运行脚本(打开调试控制台),然后在断点处停止,并尝试在控制台中键入内容,我得到:

MultipleInstanceError: Multiple incompatible subclass instances of PyDevTerminalInteractiveShell are being created.
Run Code Online (Sandbox Code Playgroud)

有谁知道可能导致这种情况的原因以及如何解决这个问题?

debugging console ipython pycharm

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

浮点乘法与加法的计算成本是多少?

忽略所有其他问题,如内存传输等。

我正在寻找“成本”的某种度量,我想我会将其量化为预期的位翻转次数,用于将两个随机浮点(例如 32 位)数相乘,与相加的成本。

我想可能有一些值得考虑的重要问题(例如数字是否具有相同的指数等)。

编辑:澄清一下,我对执行这些操作所需的能量感兴趣,而不是时间或硬件数量,这就是为什么我认为“预期的位翻转次数”是感兴趣的数量。我认为这是一个明确定义的问题,并且给定算法执行浮点乘法肯定需要一些“预期的位翻转次数”......而且我正在寻找所有算法的最小值。

编辑2:感谢大家的回应。我得到的最相关的回复来自 njuffa,他引用了Mark Horowitz 的估计(见第 33 页)。一个更先进的最新文件由霍洛维茨帖子略有不同的数字,那就是:

Float32 Mult: 3.7pJ.  
Float32 Add:  0.9pJ
Int32 Mult:   3.1pJ
Int32 Add:    0.1pJ
Run Code Online (Sandbox Code Playgroud)

floating-point complexity-theory multiplication

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

pylint:排除目录

假设我有以下目录结构:

adir/
  __init__.py
  afile.py
bdir/
  __init__.py
  bfile.py
  adir/
    __init__.py
    afile.py
Run Code Online (Sandbox Code Playgroud)

我想对目录之外的所有内容运行 pylint bdir/adir

有没有办法做到这一点?不起作用的事情:

  • --ignore=bdir/adir
  • --ignore_patterns=.*bdir/adir.*
  • 这个类似帖子中的任何答案
  • --ignore=adir(这将忽略两个adir- 不是我想要的)。

似乎 pylint 的 ignore-filters 仅适用于文件或目录的名称,而不是完整路径。

有没有办法实现这一目标?

python pylint

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

类型注释的 Python 类型注释

我的问题是:当函数将类型注释作为参数时,您使用什么类型注释?

为什么我将类型注释作为参数?

我有一个函数尝试根据类型注释解析字符串。例如

def get_appropriate_type_converter(type_annotation) -> Callable[[str], 'type_annotation']:
Run Code Online (Sandbox Code Playgroud)

例如 get_appropriate_type_converter(Dict[str, int])("aaa:3,bbb:4") == dict(aaa=3, bbb=4)

我想输入注释这个函数。

python-3.x

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

Kotlin:多行字符串中的行继续?

val myQuestion = """
I am creating a multiline string containing paragraphs of text.  The text will wrap when put into a TextView.  

But as you can see, when defining the text in the editor, if I want to avoid newlines mid-paragraph, I need to write really long lines that require a lot of horizontal scrolling.

Is there some way that I can have line breaks in the editor that don't appear in the actual value of the string?
"""
Run Code Online (Sandbox Code Playgroud)

multiline kotlin

5
推荐指数
2
解决办法
4656
查看次数