小编Die*_*ich的帖子

在异步生成器上使用 next()

next()可以使用内置函数逐步迭代生成器。例如:

def sync_gen(n):
    """Simple generator"""
    for i in range(n):
        yield i**2

sg = sync_gen(4)
print(next(sg)) # -> 0
print(next(sg)) # -> 1
print(next(sg)) # -> 4
Run Code Online (Sandbox Code Playgroud)

在异步生成器上使用next()不起作用:

import asyncio

async def async_gen(n):
    for i in range(n):
        yield i**2

async def main():
    print("Async for:")
    async for v in async_gen(4):  # works as expected
        print(v)

    print("Async next:")
    ag = async_gen(4)
    v = await next(ag) # raises: TypeError: 'async_generator' object is not an iterator
    print(v)

asyncio.run(main())
Run Code Online (Sandbox Code Playgroud)

是否存在类似的东西v = await …

python python-3.x python-asyncio

13
推荐指数
2
解决办法
1万
查看次数

具有SI前缀自动缩放的漂亮打印物理量

我在找一个优雅的方式来美化打印物理量用最合适的前缀(如12300 grams12.3 kilograms).一个简单的方法看起来像这样:

def pprint_units(v, unit_str, num_fmt="{:.3f}"):
    """ Pretty printer for physical quantities """
    # prefixes and power:
    u_pres = [(-9, u'n'), (-6, u'µ'), (-3, u'm'), (0, ''),
              (+3, u'k'), (+6, u'M'), (+9, u'G')]

    if v == 0:
        return num_fmt.format(v) + " " + unit_str
    p = np.log10(1.0*abs(v))
    p_diffs = np.array([(p - u_p[0]) for u_p in u_pres])
    idx = np.argmin(p_diffs * (1+np.sign(p_diffs))) - 1
    u_p = u_pres[idx if idx >= 0 else 0]

    return num_fmt.format(v / …
Run Code Online (Sandbox Code Playgroud)

python units-of-measurement

11
推荐指数
1
解决办法
660
查看次数

禁用的Qt按钮在Plasma 5.2(KDE 5)中未显示为禁用

在KDE 5(Kubuntu 15.04/Plasma 5.2)中,禁用的Qt按钮(Qt4)与非禁用按钮无法区分.KDE 4.14中不存在此问题,如以下屏幕截图所示:

禁用按钮:KDE 4与KDE 5

该对话框的程序源是用PyQt4用Python编写的:

from PyQt4 import QtGui
import sys


if __name__ == "__main__":
    # main function

    app = QtGui.QApplication(sys.argv)

    qw = QtGui.QWidget()
    qw.resize(150, 120)
    qw.setWindowTitle("KDE 4")
    #qw.setWindowTitle("KDE 5")

    b1, b2 = QtGui.QPushButton(qw), QtGui.QPushButton(qw)
    for b, y, e in zip([b1, b2], [30, 60], [False, True]):
        b.move(30, y)
        b.setEnabled(e)
        b.setText("Enabled" if e else "Disabled")

    qw.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

如何使KDE 5中的禁用按钮可识别?

2015-07-17更新:

这似乎是一个主题问题:在使用Oxygen-Theme的Debian/sid中避免了这个问题.

此外臭虫343930个解决了这个问题.

python ubuntu qt4 plasma pyqt4

9
推荐指数
1
解决办法
326
查看次数

如何在Matplotlib中绘制实心圆弧

在matplotlib中,我想绘制一个如下所示的实心圆弧:

实心圆弧示例

以下代码导致未填充的圆弧:

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

fg, ax = plt.subplots(1, 1)

pac = mpatches.Arc([0, -2.5], 5, 5, angle=0, theta1=45, theta2=135)
ax.add_patch(pac)

ax.axis([-2, 2, -2, 2])
ax.set_aspect("equal")
fg.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

文档说,实心电弧是不可能的。画一个的最好方法是什么?

python matplotlib

6
推荐指数
4
解决办法
8288
查看次数

使用 matplotlib 的 pcolormesh() 在状态行中的鼠标指针位置显示 z 值

当使用imshow()鼠标指针的 z 值时,状态行中会显示如屏幕截图(右侧)所示: 屏幕截图 imshow 和 pcolormesh
我如何实现相同的行为pcolormesh()

该图像由以下代码生成:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(-1, 1, 101)
X, Y = np.meshgrid(t, 2*t)
Z = np.sin(2*np.pi*(X**2+Y**2))
fig, axx = plt.subplots(1, 2)
axx[0].set_title("imshow()")
axx[0].imshow(Z, origin='lower', aspect='auto', extent=[-1, 1, -2, 2])
axx[1].set_title("pcolormesh()")
axx[1].pcolormesh(X, Y, Z)
fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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