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 …
我在找一个优雅的方式来美化打印物理量用最合适的前缀(如12300 grams为12.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) 在KDE 5(Kubuntu 15.04/Plasma 5.2)中,禁用的Qt按钮(Qt4)与非禁用按钮无法区分.KDE 4.14中不存在此问题,如以下屏幕截图所示:

该对话框的程序源是用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个解决了这个问题.
在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)
该文档说,实心电弧是不可能的。画一个的最好方法是什么?
当使用imshow()鼠标指针的 z 值时,状态行中会显示如屏幕截图(右侧)所示:

我如何实现相同的行为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)