小编Vik*_*mma的帖子

如何在Python中执行"如果从ipython运行"测试?

为了简化Ipython的调试,我在脚本的开头添加了以下内容

from IPython.Debugger import Tracer
debug = Tracer()
Run Code Online (Sandbox Code Playgroud)

但是,如果我从命令行启动我的脚本

$ python myscript.py
Run Code Online (Sandbox Code Playgroud)

我收到了与Ipython相关的错误.有没有办法做到以下几点

if run_from_ipython():
    from IPython.Debugger import Tracer
    debug = Tracer()
Run Code Online (Sandbox Code Playgroud)

这样我只需要在需要时导入Tracer()函数.

python ipython

28
推荐指数
2
解决办法
4942
查看次数

如何使用Python生成格式化的pdf或eps表?

我通常会从模拟中获得一些数据,我希望以表格的形式包含在演示文稿中.通常我使用Open(Libre)-Office Impress进行演示.然后我从我的结果复制粘贴到Impress表.我发现这有点乏味.既然我已经在Python中得到了结果,有什么方法可以从这些数据中自动生成.pdf或.eps表,以便我可以快速将.pdf或.eps导入Impress?

python pdf presentation

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

为什么我必须使用.wait()和python的子进程模块?

我正在通过Linux上的Python子进程模块运行Perl脚本.使用变量输入多次调用运行脚本的函数.

def script_runner(variable_input):

    out_file = open('out_' + variable_input, 'wt')
    error_file = open('error_' + variable_input, 'wt')

    process = subprocess.Popen(['perl', 'script', 'options'], shell=False,
                           stdout=out_file, stderr=error_file)
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行此函数,例如两次,则第二个进程启动时第一个进程的执行将停止.我可以通过添加来获得我想要的行为

process.wait()
Run Code Online (Sandbox Code Playgroud)

在调用脚本之后,所以我并没有真正陷入困境.但是,我想找出为什么我不能使用子进程多次运行脚本,并让脚本并行进行这些计算,而不必等待它在每次运行之间完成.

UPDATE

罪魁祸首并不那么令人兴奋:perl脚本使用了为每次执行重写的公共文件.

但是,我从中学到的教训是,垃圾收集器在开始运行后不会删除该进程,因为一旦我将其整理出来,这对我的脚本没有任何影响.

python subprocess

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

我可以向Git分支添加描述吗?

可能重复:
git中的分支描述

有时我发现很难记住我为什么要建立一个新的Git分支.有什么办法可以为分支添加描述吗?我当然可以在我第一次提交到分支时添加这些信息,但是能够做到这样的事情会很好:

git checkout -b -m"Branch for that really good idea" mybranch
Run Code Online (Sandbox Code Playgroud)

然后做一些其他的工作,完全忘记我的想法,因为我能做到

git checkout -descr mybranch<Enter>
Output: Your description: "Branch for that really good idea"
Run Code Online (Sandbox Code Playgroud)

我知道git-notes,但它被用来为提交添加信息,所以它并不是我正在寻找的.

git branch

5
推荐指数
0
解决办法
545
查看次数

为什么在字典中查找要比Python中的两个if-tests快得多?

我需要阅读千兆字节的文本,所以我正在尝试优化我的代码.这样做时,我发现,对于我的问题,使用字典比if-tests更快.

check = {'R':'-', 'F':'+'}
seqs = ['R', 'F']*100

def check1():
    for entry in seqs:
        if entry == 'R':
            strand = '-'
        if entry == 'F':
            strand = '+'

def check2():
    for entry in seqs:
        strand = check[entry]
Run Code Online (Sandbox Code Playgroud)

使用ipythong的%timeit我发现在字典中查找的速度比使用两个if-tests快两倍:

In [63]: %timeit check1()
10000 loops, best of 3: 38.8 us per loop

In [64]: %timeit check2()
100000 loops, best of 3: 16.2 us per loop
Run Code Online (Sandbox Code Playgroud)

由于if-tests是如此基本,我没想到性能差异.这是众所周知的吗?任何人都可以解释为什么会这样吗?

UPDATE

我检查了上面的两个函数以及下面的check3()如何影响我的实际代码的运行时间,并且对总时间没有影响.因此,在现实世界的例子中,要么字典中的提升不是很高,其中"R"和"F"值需要不断地从文件中重新读取,或者这段代码不是我的瓶颈的一部分.

无论如何,谢谢你的答案!

python performance dictionary

4
推荐指数
1
解决办法
1130
查看次数