当实现在同步和异步应用程序中都有用的类时,我发现自己在两个用例中维护着几乎相同的代码。
仅作为示例,请考虑:
from time import sleep
import asyncio
class UselessExample:
def __init__(self, delay):
self.delay = delay
async def a_ticker(self, to):
for i in range(to):
yield i
await asyncio.sleep(self.delay)
def ticker(self, to):
for i in range(to):
yield i
sleep(self.delay)
def func(ue):
for value in ue.ticker(5):
print(value)
async def a_func(ue):
async for value in ue.a_ticker(5):
print(value)
def main():
ue = UselessExample(1)
func(ue)
loop = asyncio.get_event_loop()
loop.run_until_complete(a_func(ue))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
在此示例中,还算不错,串联的ticker
方法UselessExample
易于维护,但是您可以想象异常处理和更复杂的功能可以迅速增加方法并使之成为问题,即使这两种方法实际上都可以保留下来相同(仅将某些元素替换为它们的异步对应元素)。
假设没有什么实质性差异值得完全实现,那么维护这样的类并避免不必要的重复的最佳方法(也是最Pythonic的)是什么?
我使用MobaXterm远程访问在云中运行的服务器.出于开发和管理目的,这些服务器在本地网络接口上公开管理应用程序.例如,Tomcat将公开127.0.0.1/manager.
由于我不想将这些服务暴露给互联网,我在MobaXterm中设置了ssh隧道,通过本地端口转发连接到本地端口上的这些Web应用程序,这很容易通过应用程序本身进行设置.
我的问题:如何让MobaXterm在会话打开时自动启动隧道,并在会话结束时停止/关闭它们?
我知道像Putty这样的客户端会默认执行此操作,但如果我不需要,我不想为不同的工作使用不同的客户端,而且MobaXterm还有其他我需要的功能,而Putty则没有.
要让 PyQt5 和 Qt Designer 与 PyCharm 配合得很好,有很多小挑战,但是在完成所有小步骤之后,我不禁怀疑我是否错过了显而易见的事情。
集成 PyCharm 和 Qt Designer 的最直接方法是什么?
到目前为止我做了什么:
Settings > Tools > External tools
$FilePath$
和工作目录为$Projectpath$
.ui
项目资源管理器中的文件并从那里启动 Qt Designerpyuic5
使用正确的参数运行以生成.py
我的匹配项.ui
我正在寻找的答案:
我开发了一个生成测试数据系列的简单应用程序,并且我使用随机种子将其构建为可重复的.我注意到以下内容并想知道为什么会发生这种情况:
>>> random.seed(1)
>>> [random.randint(0,10) for _ in range(0,10)]
[2, 9, 1, 4, 1, 7, 7, 7, 10, 6]
>>> random.seed(1)
>>> random.random()
0.13436424411240122
>>> [random.randint(0,10) for _ in range(0,10)]
[1, 4, 1, 7, 7, 7, 10, 6, 3, 1]
Run Code Online (Sandbox Code Playgroud)
注意对random()的单个调用如何使用randint()的两个值.我猜这与在给定范围内生成浮点数与int值所需的随机信息量有关,但是有没有办法跟踪到目前为止使用了多少随机值? ,即系统的半随机值序列有多远?
我最终编写了自己的函数,总是在其逻辑中使用random.random().所以我不是要求解决方案,只是一些背景/解释.
StackOverflow 上有很多关于 Python 函数的位置参数和关键字参数之间差异的解释,而且实用性上的差异对我来说很清楚。但是,我无法找到明确的答案(或许还可以解释)在某些情况下位置参数是否比关键字参数快得多。
一方面,我可以想象它们会是这样,因为不需要做任何工作来查找通过的参数。但另一方面,除非参数作为dict
扩展传递到**kwargs
, 或类似的东西中,否则我想编译器可能会优化这个问题,并且字节码对于基本情况可能执行几乎相同的操作。
所以:
from timeit import timeit
def fun1(a, b, c):
pass # or some operation that wouldn't get this function optimised out altogether
def fun2(a, /, b, c=3):
pass # or some operation that wouldn't get this function optimised out altogether
fun1(1, 2, 3) # call 1
fun2(1, 2, 3) # call 2
fun2(1, 2, c=3) # call 3
fun2(1, b=2, c=3) # call 4
d = {'c': 3}
fun2(1, 2, …
Run Code Online (Sandbox Code Playgroud) 给定一个具有以下结构的数据集:
time var1 var2 var2 var1 var3
loc1 loc1 loc2 loc2 loc1
1 11 12 13 14 15
2 21 22 23 25
3 32 33 34 35
Run Code Online (Sandbox Code Playgroud)
以 .csv 形式给出:
time,var1,var2,var2,var1,var3
,loc1,loc1,loc2,loc2,loc1
1,11,12,13,14,15
2,21,22,23,,25
3,,32,33,34,35
Run Code Online (Sandbox Code Playgroud)
注意:缺少一些值,并非所有变量都适用于所有位置,时间戳适用于每个记录,列可能会出现乱序,但时间戳可靠地是第一列。我不确定所有这些方面都与最佳解决方案相关,但它们确实存在。
我在设置 xarray 三维数组时没有遇到太多麻烦,该数组允许我通过时间戳、位置、变量名称访问值。在确定唯一的位置名称后,它会循环遍历位置名称,按位置过滤数据并一次添加一个位置的结果。但我想知道 pythonic 和 pandastic 解决方案(由于缺乏更好的词)会是什么样子?
问题:是否有一些紧凑且有效的方法(可能使用 pandas 和 xarray)将此数据集或任何类似的数据集(具有不同的变量和位置名称)从 .csv 加载到 3d 数组(如 xarray DataArray)中?
我要实现的目标是:有两条水平轴线的图,它们之间的区域带有阴影。
迄今为止最好的:
ax.hline(y1, color=c)
ax.hline(y2, color=c)
ax.fill_between(ax.get_xlim(), y1, y2, color=c, alpha=0.5)
Run Code Online (Sandbox Code Playgroud)
问题在于,这会在阴影区域的左侧和右侧留下少量空白空间。
我知道这可能是由于绘图在绘图的已用/数据区域周围创建了一个空白。那么,如何fill_between
在绘制后不覆盖matplotlib缩放x轴的情况下,如何真正覆盖整个图?有没有其他选择get_xlim
可以给我适当的情节限制,还是可以替代fill_between
?
这是当前结果:
请注意,这是具有多个图的较大网格布局的一部分,但它们在这些阴影区域周围都留有相似的边距。
谁能解释一下为什么/如何下面的代码获取从0 到 100的数字
[代码]
print(*range(*b'e'))
Run Code Online (Sandbox Code Playgroud)
[结果]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 …
Run Code Online (Sandbox Code Playgroud) python ×8
arguments ×1
arrays ×1
async-await ×1
asynchronous ×1
automation ×1
base64 ×1
coroutine ×1
csv ×1
encode ×1
matplotlib ×1
mobaxterm ×1
pandas ×1
performance ×1
plot ×1
pycharm ×1
pyqt5 ×1
qt-designer ×1
random ×1
sha256 ×1
ssh ×1
string ×1
tunnel ×1