我正在研究一个可以增长,增长和发展的庞大的Python代码库.这不是一个单一的应用程序 - 更多的是一些共享一些常见代码的实验.
我经常要公开发布一个给定的实验.我不想发布我的整个糟糕的代码库,只是发布运行给定实验所需的部分.所以基本上我想要抓取所有导入并将所调用的任何函数(或至少导入的所有模块)复制到单个文件中,我可以将其作为演示版本发布.我当然只想对当前项目中定义的文件执行此操作(不是像numpy这样的依赖包).
我现在正在使用PyCharm,并且无法找到该功能.有没有这样做的工具?
编辑:我创建了公共发布包来解决这个问题.给定一个主模块,它会遍历依赖模块并将它们复制到一个新的仓库中.
我有酸洗问题。我想在我的主脚本中序列化一个函数,然后加载它并在另一个脚本中运行它。为了证明这一点,我制作了 2 个脚本:
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 的命名空间,因此找不到引用。
每当我显示 matplotlib 图时,它都会在后台打开,实际上我必须在 IDE 窗口中移动才能找到它(它不会显示在 Command-Tab 上)。如果 IDE(PyCharm 或 Eclipse)处于全屏状态,它也不会显示“分解窗口视图”Fn-F3。每次我想看情节时都必须在窗口之间移动,这真的很烦人。我不确定这是 matplotlib 还是 OSX 的错误。
期望的行为是,一旦执行命令 plt.show(),绘图窗口就会弹出到前面。或者至少可以通过命令选项卡来实现。
有人有解决方案吗?
我在服务器上运行 IPython 笔记本,我正在本地编辑/原型制作它们。当我准备好向其他人展示我的本地笔记本时,我会使用 rsync 来推送它们。
问题是,打开所有这些笔记本后,很容易在服务器笔记本而不是本地笔记本上意外编辑内容。是否有一些合理的机制可以防止意外编辑笔记本?我仍然希望能够运行服务器笔记本,并且它们仍然应该能够写入输出 - 我只是想以某种方式锁定它们以便无法编辑它们。
我有一个经常做的操作,我称之为“锯齿状切片”,因为我不知道它的真实名称。最好通过例子来解释:
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 没有更好的方法。如果需要,您可以为此创建一个辅助函数。
在PyCharm中,如果我在调试模式下运行脚本(打开调试控制台),然后在断点处停止,并尝试在控制台中键入内容,我得到:
MultipleInstanceError: Multiple incompatible subclass instances of PyDevTerminalInteractiveShell are being created.
Run Code Online (Sandbox Code Playgroud)
有谁知道可能导致这种情况的原因以及如何解决这个问题?
忽略所有其他问题,如内存传输等。
我正在寻找“成本”的某种度量,我想我会将其量化为预期的位翻转次数,用于将两个随机浮点(例如 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) 假设我有以下目录结构:
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 仅适用于文件或目录的名称,而不是完整路径。
有没有办法实现这一目标?
我的问题是:当函数将类型注释作为参数时,您使用什么类型注释?
为什么我将类型注释作为参数?
我有一个函数尝试根据类型注释解析字符串。例如
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)
我想输入注释这个函数。
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)