小编Art*_*tur的帖子

如何使我的 Gerrit 工作流程适应 Bitbucket 并且不讨厌它?

tl;dr 在使用 Gerrit 较长时间并切换到 Bitbucket 后,我​​不禁觉得后者很糟糕。我认为这是因为我方面存在一些知识差距而不是软件本身,并且希望像使用 Gerrit 一样高效地使用它。

主要问题:追加到当前拉取请求并查看其历史记录

我最喜欢 Gerrit 的一点是它如何呈现变革历史。您只需git --commit --amend按下它,它就会显示为新的补丁集。您可以轻松查看哪些注释添加到了哪些版本的更改中,您可以查看提交的任何两个补丁集之间的差异。当根据您的评论查看某人的更改时,您只能看到最新更改和第 n-1 个更改之间的差异,或者选择要比较的基线。我在 Bitbucket 中找不到任何类似的清晰内容。它有类似的功能还是我的工作流程错误?与审阅者迭代处理拉取请求的首选方法是什么?

其他小事

  • Bitbucket 没有提供有用的“完成”自动评论,而是提供“点赞”功能。可以重新配置吗?
  • 为什么我只能在行间发表评论?我宁愿评论部分,因为这样更容易表达观点。有时您想注释单个字符,有时想注释 4 行块。
  • 我无法查看多个存储库中的所有拉取请求。严重地?
  • 为什么 Bitbucket 在文件末尾隐藏新行?

我真的很想喜欢 Bitbucket,但看起来这个工具不是为工程师/由工程师创建的。我很乐意用漂亮的界面或 JIRA 集成来换取更有用的差异工具或更好的审查流程。如果有人有类似的经历,我很高兴听到您如何将工作流程从 Gerrit 调整到 Bitbucket。

git bitbucket gerrit

7
推荐指数
0
解决办法
667
查看次数

Python的id()有多独特?

tl; dr Python重用ID吗?两个具有非重叠生命期的对象获得相同ID的可能性有多大?

背景: 我一直在研究一个复杂的项目,纯粹用Python 3编写.我一直在看测试中的一些问题,并花了很多时间寻找根本原因.经过一些分析后,我怀疑当测试作为一个整体运行时(它由一个专门的调度程序编排并运行),它会重用一些模拟方法,而不是用原始方法实现新对象.检查翻译是否重复使用我id().

问题: id()通常可以工作并显示对象标识符,并让我告诉我的调用何时创建新实例而不重用.但是如果两个对象相同的话,会发生什么?文件说:

返回对象的"标识".这是一个整数,在该生命周期内保证该对象是唯一且恒定的.具有非重叠寿命的两个对象可以具有相同的id()值.

问题:

  1. 解释器id()什么时候可以重用值?是在它随机选择相同的内存区域时吗?如果它只是随机的,似乎极不可能,但它仍然无法保证.

  2. 有没有其他方法来检查我实际引用的对象是什么?我遇到了一个我有对象的情况,它有一个模拟的方法.该对象不再使用,垃圾收集器将其销毁.我创建相同类的新对象后,就得到了一个新的id(),但该方法得到了相同的ID,当它被嘲笑为,它实际上只是一个模拟.

  3. 有没有办法强制Python销毁给定的对象实例?从阅读中我看来没有,并且当它看不到对象的引用时它取决于垃圾收集器,但我认为无论如何都值得问.

python memory unit-testing python-3.x

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

使用WinAPI附加禁用的显示设备

我的问题是启用已禁用的监视器ChangeDisplaySettingsEx.我想这不是火箭科学,但经过一些挖掘它仍然看起来不可能.我找到了一种基于此处的 Microsoft代码示例禁用所有辅助显示的方法.虽然它只需要基本的调整才能工作,但重新连接从未奏效.我想要做的是:

1.初始化DisplayDevice

BOOL            FoundSecondaryDisp = FALSE;
DWORD           DispNum = 0;
DISPLAY_DEVICE  DisplayDevice;
LONG            Result;
TCHAR           szTemp[200];
int             i = 0;
DEVMODE   defaultMode;
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
Run Code Online (Sandbox Code Playgroud)

2.查找所有设备

while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
{
    ZeroMemory(&defaultMode, sizeof(DEVMODE));
    defaultMode.dmSize = sizeof(DEVMODE);
    //point 3 goes here
}
Run Code Online (Sandbox Code Playgroud)

3.检测分离的设备

if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP))
Run Code Online (Sandbox Code Playgroud)

4.启用设备

DEVMODE    DevMode;
ZeroMemory(&DevMode, sizeof(DevMode));
DevMode.dmSize = sizeof(DevMode);
DevMode.dmFields = DM_POSITION | DM_PELSWIDTH | DM_PELSHEIGHT;
DevMode.dmPelsWidth = 1920;
DevMode.dmPelsHeight = 1080;
Result = ChangeDisplaySettingsEx(DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

如何使用过滤器的'Sort A to Z'对XlsxWriter中的表进行排序?

最近,我发现了XlsxWriter for Python(我很喜欢它!),我开始研究一些电子表格.我需要以编程方式创建一个与其他人手动创建的电子表格相同的电子表格.我设法创建了我需要的一切,除了在autofilter中排序表.基本上,我想创建这样的东西:手动创建自动填充程序 而我无法弄清楚如何.我的文档(检查1,2)并没有发现有关排序的任何信息.我现在做的是:

worksheet.autofilter(1, 0, known_lenght, known_width)

这导致自动过滤器箭头出现在标题单元格的右下角,但worksheet.autofilter()似乎缺乏排序功能.我错过了什么或者没有选择在XlsxWriter中创建autofilter并在其中设置排序?谢谢!

python excel xlsxwriter

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

在 try/ except 块中创建变量是否被认为是一种不好的做法?

None让我们考虑这个示例 - 返回列表中第一个值的索引li(如果存在)或最后一个元素的索引(如果None不存在于li.

我可以检查列表中是否有 None,但使用 ifs 不是首选方式 - Dive Into Python 鼓励使用异常,因为据说它们更快并使代码更清晰(请参阅问题)。所以我采取了三种方法:

1.

try:
    my_index = li.index(None)
except ValueError:
    my_index = len(li) - 1

print my_index
Run Code Online (Sandbox Code Playgroud)

my_index在 try/ except 块内声明。更少的行数,没有多余的声明。可能的问题 - 不同的异常类型将导致不创建my_index脚本并使其崩溃print

2.

my_index = None  # or anything else
try:
    my_index = li.index(None)
except ValueError:
    my_index = len(li) - 1

print my_index
Run Code Online (Sandbox Code Playgroud)

my_index在 try/except 之前声明,并且无论发生什么异常都会分配一个值。缺点——更多的线条,看起来多余。

3. 编辑:不起作用 - 无论 try/ except 结果如何,finally 都会被执行

try: …
Run Code Online (Sandbox Code Playgroud)

python exception try-catch

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

在 Python 中生成多个文件的一个 MD5/SHA1 校验和

我浏览了几个关于在 Python 中计算文件校验和的主题,但没有一个主题回答了关于多个文件中的一个总和的问题。我在子目录中有几个文件,想确定其中一个或多个文件是否有任何更改。有没有办法从多个文件中生成一个总和?

编辑:这是我获取总和列表的方式:

checksums = [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in flist]
Run Code Online (Sandbox Code Playgroud)

python hash checksum md5 sha1

3
推荐指数
2
解决办法
3849
查看次数

Python 仅在消息匹配时捕获异常

tl;dr
如何捕获相同类型但具有不同消息的不同异常?

情况
在理想世界中,我会处理这样的异常:

try:
    do_something()
except ExceptionOne:
    handle_exception_one()
except ExceptionTwo:
    handle_exception_two()
except Exception as e:
    print("Other exception: {}".format(e))
Run Code Online (Sandbox Code Playgroud)

但是我使用的外部代码在我的使用中可能会抛出两个异常。两者都是ValueErrors 但有不同的信息。我想区分处理它们。这是我尝试采用的方法(为了更容易地表达我提出的想法AssertionError):

try:
    assert 1 == 2, 'test'
except AssertionError('test'):
    print("one")
except AssertionError('AssertionError: test'):
    print("two")
except Exception as e:
    print("Other exception: {}".format(e))
Run Code Online (Sandbox Code Playgroud)

但这段代码总是到最后print()并给我

Other exception: test
Run Code Online (Sandbox Code Playgroud)

有没有办法以这种方式捕获异常?我假设这是可能的,因为 Python 允许我在捕获异常时指定 MESSAGE,ExceptionType('MESSAGE')但实际上我没有设法让它工作。我也没有在文档中找到明确的答案。

python exception

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

如何在 openpyxl 中移动单元格区域及其属性(超链接、格式等)?

我想创建一个脚本来移动一些(或全部)单元格。这是我的代码想法,但我不知道如何实现最后一行(向右移动 5 个单元格的示例):

new_rows = []
for row in ws.rows:
    new_rows.append((None,) * 5 + row)
ws.rows = new_rows
Run Code Online (Sandbox Code Playgroud)

python excel openpyxl

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

为什么我可以从我删除的路径导入模块?

tl;博士

我在 中创建了一个虚拟模块模块/tmpinsert它的路径 do sys.path,导入虚拟模块,del当它不再需要时,删除它sys.path,我仍然可以导入它。为什么?

完整问题

考虑这个 pytest 夹具代码及其注释:

def test_function(temp_dir):
    with open(os.path.join(temp_dir, 'dum.py'), 'w') as f:
        f.write("""
class A:
    \"\"\"
    test docstring
    \"\"\"
    test: int
    test_2: str = "asdf"

class B(A):
    pass
        """)
    import sys
    sys.path.insert(1, temp_dir)
    assert temp_dir in sys.path  # assertion passes
    # noinspection PyUnresolvedReferences
    import dum  # import successful

    yield dum

    # teardown executed after each usage of the fixture
    del dum  # deletion successful
    sys.path.remove(temp_dir)  # …
Run Code Online (Sandbox Code Playgroud)

python python-module pytest

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

在Python中,将list转换为dict,以便第n个元素是一个键

问题:如何有效地和python地将列表列表my_list转换为dict,my_dict以便每个嵌套列表的第0个元素是键,其余元素是值(也是列表).

例:

输入:

my_list = [['a', 'b'],
          ['b', 'c', 'd', 'e', 'f'],
          ['g'],
          ['h', 'i', 'j'],
          ['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']]
Run Code Online (Sandbox Code Playgroud)

输出:

my_dict = {'a': ['b'],
          'b': ['c', 'd', 'e', 'f'],
          'g': None, 
          'h': ['i', 'j'],
          'k': ['l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']}
Run Code Online (Sandbox Code Playgroud)

附注: 我的数据集非常庞大,因此该方法需要清洁高效.虽然迭代列表是可以接受的,但我宁愿避免嵌套循环(以保持O(n)复杂性).我设法编写了一个函数,通过迭代输入列表并弹出第0个元素来完成工作,但弹出本身是O(n),使整个解O(n*n).

python dictionary list time-complexity

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