小编Gri*_*mar的帖子

同步和异步实现的代码重复

当实现在同步和异步应用程序中都有用的类时,我发现自己在两个用例中维护着几乎相同的代码。

仅作为示例,请考虑:

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的)是什么?

python asynchronous coroutine async-await python-asyncio

16
推荐指数
1
解决办法
585
查看次数

如何在MobaXterm中打开会话时自动启动隧道?

我使用MobaXterm远程访问在云中运行的服务器.出于开发和管理目的,这些服务器在本地网络接口上公开管理应用程序.例如,Tomcat将公开127.0.0.1/manager.

由于我不想将这些服务暴露给互联网,我在MobaXterm中设置了ssh隧道,通过本地端口转发连接到本地端口上的这些Web应用程序,这很容易通过应用程序本身进行设置.

我的问题:如何让MobaXterm在会话打开时自动启动隧道,并在会话结束时停止/关闭它们?

我知道像Putty这样的客户端会默认执行此操作,但如果我不需要,我不想为不同的工作使用不同的客户端,而且MobaXterm还有其他我需要的功能,而Putty则没有.

ssh automation remote-access tunnel mobaxterm

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

集成 Qt Designer 和 PyCharm

要让 PyQt5 和 Qt Designer 与 PyCharm 配合得很好,有很多小挑战,但是在完成所有小步骤之后,我不禁怀疑我是否错过了显而易见的事情。

集成 PyCharm 和 Qt Designer 的最直接方法是什么?

到目前为止我做了什么:

  • 安装 Qt 设计器
  • 将其设置为外部工具
    • 打开 Settings > Tools > External tools
    • 添加新工具
    • 将参数设置为$FilePath$和工作目录为$Projectpath$
  • 右键点击 .ui项目资源管理器中的文件并从那里启动 Qt Designer
  • 从设置中设置一个文件观察器,观察 Qt UI 设计器表单的变化,并pyuic5使用正确的参数运行以生成.py我的匹配项.ui

我正在寻找的答案:

  • 如何收紧 Qt Designer 和 PyCharm 之间的循环?具体来说,是否可以从 PyCharm 或什至在 PyCharm 中的选项卡中通过简单的双击打开 Qt 设计器?
  • 是否有更好的整体工作流程可以实现相同的目标,而我在这里遗漏了?

python qt-designer pycharm pyqt5

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

为什么random.random()会占用两个random.randint()值?

我开发了一个生成测试数据系列的简单应用程序,并且我使用随机种子将其构建为可重复的.我注意到以下内容并想知道为什么会发生这种情况:

>>> 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().所以我不是要求解决方案,只是一些背景/解释.

python random

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

Python 中位置参数和关键字参数之间的性能差异?

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)

python performance arguments

6
推荐指数
0
解决办法
632
查看次数

如何将带有复合标头的.csv读取到xarray DataArray中(使用pandas)

给定一个具有以下结构的数据集:

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)中?

python csv pandas python-xarray

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

如何对 SHA256 十六进制字符串进行 Base64 编码

您好,我需要帮助来获取 Base64 编码列,我得到的是 sha256 哈希列,我想获取 44 个字符,但是当我在 python 中尝试此操作时

[base64.b64encode(x.encode('utf-8')).decode() for x in xxx['yyy']]

它返回 88 个字符,有人可以帮忙吗?基本上我想用Python实现下图所示的步骤,谢谢! 在此输入图像描述

在此输入图像描述

在此输入图像描述

python base64 encode sha256

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

使用matplotlib在两个轴心之间着色区域

我要实现的目标是:有两条水平轴线的图,它们之间的区域带有阴影。

迄今为止最好的:

    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

这是当前结果:

当前结果

请注意,这是具有多个图的较大网格布局的一部分,但它们在这些阴影区域周围都留有相似的边距。

python plot matplotlib

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

为什么/如何 `print(*range(*b'e'))` 写入从 0 到 100 的数字?

谁能解释一下为什么/如何下面的代码获取从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 arrays string

0
推荐指数
1
解决办法
98
查看次数