小编Chr*_*don的帖子

如何激活PyCharm终端内的virtualenv?

我已经设置了PyCharm,创建了我的virtualenv(通过虚拟env命令,或者直接在PyCharm中),并将该环境激活为我的Interpreter.一切都很好.

但是,如果我使用"工具,打开终端"打开终端,提供的shell提示符使用虚拟环境; 我仍然必须source ~/envs/someenv/bin/activate在该终端内使用它来激活它.

另一种方法是激活shell中的环境,并从该环境运行PyCharm.这是"可行的",但非常难看,如果我从PyCharm切换环境或项目,我就会遇到重大问题:我现在正在使用完全错误的环境.

是否有其他更简单的方法让"工具,开放式终端"自动激活虚拟环境?

python django shell virtualenv pycharm

99
推荐指数
10
解决办法
10万
查看次数

从python生成器接收'return'值的最佳方法

从Python 3.3开始,如果生成器函数返回一个值,那么它将成为引发的StopIteration异常的值.这可以通过多种方式收集:

  • yield from表达式的值,暗示封闭函数也是一个生成器.
  • 将调用包含在try/except块中next().send()中.

但是,如果我只是想在for循环中迭代生成器 - 最简单的方法 - 似乎没有办法收集StopIteration异常的值,从而收集返回值.我使用一个简单的例子,其中生成器产生值,并在最后返回某种摘要(运行总计,平均值,时间统计等).

for i in produce_values():
    do_something(i)

values_summary = ....??
Run Code Online (Sandbox Code Playgroud)

一种方法是自己处理循环:

values_iter = produce_values()
try:
    while True:
        i = next(values_iter)
        do_something(i)
except StopIteration as e:
    values_summary = e.value
Run Code Online (Sandbox Code Playgroud)

但这会抛弃for循环的简单性.我无法使用,yield from因为这需要调用代码本身就是一个生成器.有没有比上面显示的roll-one-own for循环更简单的方法?

答案摘要

结合@Chad S.和@KT的答案,最简单的似乎是使用迭代器协议将我的生成器函数转换为类:

class ValueGenerator():
    def __iter__(self):
        yield 1
        yield 2
        # and so on
        self.summary = {...}

vg = ValueGenerator()
for i in vg:
    do_something(i)
values_summary = vg.summary
Run Code Online (Sandbox Code Playgroud)

如果我不能重构价值生产者,@ Ferdinand Beyer的答案是最简单的.

python generator

20
推荐指数
3
解决办法
6897
查看次数

为什么hash()在python3.4和python2.7下比较慢

我正在使用timeit进行一些性能评估,并发现python 2.7.10和python 3.4.3之间的性能降级.我把它缩小到hash()函数:

python 2.7.10:

>>> import timeit
>>> timeit.timeit('for x in xrange(100): hash(x)', number=100000)
0.4529099464416504
>>> timeit.timeit('hash(1000)')
0.044638872146606445
Run Code Online (Sandbox Code Playgroud)

python 3.4.3:

>>> import timeit
>>> timeit.timeit('for x in range(100): hash(x)', number=100000)
0.6459149940637872
>>> timeit.timeit('hash(1000)')
0.07708719989750534
Run Code Online (Sandbox Code Playgroud)

那是一个约.降低40%!整数,浮点数,字符串(unicodes或bytearrays)等是否被散列似乎并不重要; 退化大致相同.在这两种情况下,哈希都返回64位整数.以上是在我的Mac上运行,并在Ubuntu盒子上得到了较小的降级(20%).

我也使用PYTHONHASHSEED =随机进行python2.7测试,在某些情况下,为每个"case"重启python,我看到hash()性能有点差,但从未像python3.4那么慢

谁知道这里发生了什么?是否为python3选择了更安全但更慢的哈希函数?

python python-3.4

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

标签 统计

python ×3

django ×1

generator ×1

pycharm ×1

python-3.4 ×1

shell ×1

virtualenv ×1