小编otu*_*tus的帖子

PEP 8,为什么关键字参数中的'='周围没有空格或默认参数值?

为什么PEP 8建议=在关键字参数或默认参数值中没有空格

这与=Python代码中每隔一次出现的推荐空格不一致吗?

怎么:

func(1, 2, very_long_variable_name=another_very_long_variable_name)
Run Code Online (Sandbox Code Playgroud)

优于:

func(1, 2, very_long_variable_name = another_very_long_variable_name)
Run Code Online (Sandbox Code Playgroud)

任何由Python的BDFL讨论/解释的链接都将受到赞赏.

记住,这个问题更多的是关于kwargs而不是默认值,我只是使用了PEP 8中的措辞.

我不是在征求意见.我在问这个决定背后的原因.这更像是问我为什么要在C程序中使用{if语句相同的行,而不是我是否应该使用它.

python coding-style pep8

95
推荐指数
7
解决办法
3万
查看次数

如何在Python中迭代dict代理?

我正在使用Python multiprocessing.Manager来共享对一个进程将生成而其他进程将查看的数据集的访问.但是,我遇到了返回的dict代理manager.dict()不支持的问题iteritems().

我可以迭代items(),但这意味着构建dict中所有项目的新元组,这是一个很大的数字.有没有办法在不构建中间列表/元组的情况下完成它,因此只使用一定量的额外内存?

注意:如果解决方案要求生成过程暂停迭代,则可以.

python dictionary shared-memory multiprocessing

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

每5秒运行一次cURL命令

这是我要运行的命令 -

curl --request POST --data-binary @payload.txt --header "carriots.apiKey:XXXXXXXXXXXXXXXXXXXX" --verbose http://api.carriots.com/streams
Run Code Online (Sandbox Code Playgroud)

这基本上将数据流发送到服务器.

我想每5秒运行一次这个命令.我该如何实现这一目标?

linux curl libcurl

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

如何在libc6-dbg中使用pstack中的调试符号?

我安装了libc6-dbg,但是pstack仍然说:

(在/lib/x86_64-linux-gnu/libc.so.6中找不到符号)

我如何告诉它在哪里找到符号?

debug-symbols pstack

9
推荐指数
0
解决办法
490
查看次数

在mongoengine中存档旧数据

我有一个巨大的MongoDB数据库,由mongoengine驱动,其中的对象有一个日期.为了使工作更轻松,我想存档旧对象,但将它们保存在某处.

我一直在阅读文档,并碰上了switch_dbswitch_collection.但是,我不能做任何工作.

对于这两种情况,文档都引用了两种使用方案.

  1. 作为一项QuerySet行动:

    user = User.objects.get(id=user_id)
    user.switch_collection('old-users')
    user.save()
    
    Run Code Online (Sandbox Code Playgroud)

    这个问题是它只适用于单个对象.无法批量存档多个文档.

  2. 作为context_manager:

    with switch_collection(Group, 'group1') as Group:
    Group(name="hello testdb!").save()  # Saves in group1 collection
    
    Run Code Online (Sandbox Code Playgroud)

    使用此我甚至无法进行查询,收到以下错误:

    ValidationError (Document:None) (Field is required...
    
    Run Code Online (Sandbox Code Playgroud)

我已经尝试使用mongoengine搜索存档数据的方法,但似乎没有一个选项可行.你有什么建议吗?

python mongoengine

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

从签名标签自动发布 GitHub?

我曾经将轻量级标签推送到我的 GitHub 存储库中,并将它们编辑到带有更改详细信息的发布中。这很好用。

现在我开始签署我的标签,这意味着它们是带注释的而不是轻量级标签。我希望 GitHub 会考虑发布它们,因此我将之前在 GitHub 上写入的相同信息放入标签消息中。

然而,GitHub 并不认为它是一个版本,而只是一个标签。我可以像以前一样根据标签“起草新版本”,但我想知道是否有一种方法可以让 GitHub 使用标签消息中的信息自动执行此操作。

git release github git-tag

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

您可以使用闭包优化函数中的导入吗?

两个问题涉及import在函数内部和模块顶部使用.我不需要被说服将我的进口放在首位,这是有充分理由的.但是,为了更好地理解我想要跟进的技术问题.

通过使用闭包并且只在第一次运行时导入,你能否在性能方面获得最佳性能?


具体来说,假设您有以下代码:

import sys
def get_version():
    return sys.version
Run Code Online (Sandbox Code Playgroud)

您希望仅在函数被调用时才进行导入,因此您将其移入:

def get_version():
    import sys
    return sys.version
Run Code Online (Sandbox Code Playgroud)

但现在它是缓慢的,如果它被调用了很多,所以你尝试一些更复杂的:

def _get_version():
    import sys

    def nested():
        return sys.version

    global get_version
    get_version = nested
    return nested()
get_version = _get_version
Run Code Online (Sandbox Code Playgroud)

现在至少一个基本的性能测试表明这个最后一个选项比第一个选项略慢(大约需要110%),但比第二个选项快得多(大约需要20%).


首先,这实际上有效吗?我的测量是否准确地描述了第二个例子做了更多的工作,或者它是我测量事物的工件.

第二,关闭是否会减速 - 超出第一次运行功能?

python closures python-import

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

在Python 2和3中,导入结构既可以在包中也可以在包中运行?

当我开发纯Python 2的包时,我可以使用普通import b语法导入相对路径,而不关心导入文件是否在包中.这样做的好处是我可以if __name__ == "__main__":通过执行文件来运行任何文件的块,并且所有导入都可以正常工作.

添加Python 3支持后,我不得不转向新的相对导入语法,2.7也支持from . import b.但是,此语法适用于包内.直接直接执行文件不再有效:

Traceback (most recent call last):
  File "./a.py", line 2, in <module>
    from . import b
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

解决方法是通过从上层目录将其作为模块导入来调用该文件:

python -m foo.a
Run Code Online (Sandbox Code Playgroud)

但是,这会对工作目录提出一个要求,这会阻止您将输出传递给其他同样关心工作目录的程序.

有没有办法让你的蛋糕和它吃?即支持作为脚本运行和作为包的一部分导入,同时在Python 2和3中工作?


示例包结构:

foo/
foo/__init__.py
foo/a.py (imports b)
foo/b.py (imports c)
foo/c.py
Run Code Online (Sandbox Code Playgroud)

我希望以下两个都适用于(a,b,c)中的x:

import foo.x (in some file when foo/ is in path)

python[23] path/to/foo/x.py
Run Code Online (Sandbox Code Playgroud)

下面的评论提到__package__根据PEP 366设置,但"如果脚本被移动到不同的包或子包,则需要手动更新样板."

更新:我试图让PEP 366 …

python python-2.x package python-import python-3.x

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

如何在这个类的python unittest中使用setUp和tearDown

我很难学习测试驱动的开发。

我正在编写一个类,它将采用文件名或文件描述并调整输入的大小并从文件中返回数据的大小块。

虽然首先开始测试,但我能想到的就是测试传递的参数是否不是 none 并检查参数是否是有效的文件对象。

我所能想到的只是下面的代码,我是按照我应该的方式使用 setUp 和 tearDown 方法还是完全错误?我正在创建一个临时文件和定义为在 setUp() 中读取的类的实例,我是否应该在 tearDown() 中以某种方式删除该对象

下面是代码

class Test_FileChunk(unittest.TestCase):
    """
    """
    def setUp(self):
        self.fhandle, self.fname = mkstemp()
        self.fc_obj = FileChunk(filename=self.fname)

    def tearDown(self):
        try:
            os.remove(self.fname)
        except OSError as oserr:
            print(oserr)

    def test_instance_variables(self):
        self.assertIsNotNone(self.fc_obj.filename)
        self.assertIsNone(self.fc_obj.filehandle)
        self.assertEqual(self.fc_obj.chunk_size, 8192)

    def test_check_if_instance_variables_are_valid_file_objects(self):
        handle = open(self.fc_obj.filename
        self.assertEqual(
            hasattr
                (handle, "r"), 'seek'), True,
                    msg="Is not a valid file object")
        handle.close()
Run Code Online (Sandbox Code Playgroud)

我在 stackoverflow 上经历了多个 TDD 问题和建议的教程,但看起来遵循 TDD 教程仍然很有趣,但实际上做 TDD 非常困难。我实际上可以想到我想在 ReadChunk 类中做什么,但就是无法真正找到测试然后编写代码。我能够考虑通过 TDD 检查传递的值是否是有效的文件对象,如果我在没有 TDD 的情况下进行编码,则不会发生这种情况,但我不确定我是否正确使用了单元测试。无法获得大图。任何人都可以请建议如何解决这个问题以及上面剪下的代码是否正确。

python python-unittest

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

在Python中将自定义对象序列化为JSON的方法

通常,我们可以定义__str__方法来str(obj)返回我们想要的东西.

但是现在我想定义我的Model对象以在使用时返回默认的JSON字符串json.dumps(obj).

有没有什么好方法可以在类中声明一个方法来执行此操作?

class MyClass:
    ...
    def __json__(self):
        return {'name': self.name, 'age': self.age}

obj = MyClass()

json.dumps(obj) # returns the same as json.dumps(obj.__json__)
Run Code Online (Sandbox Code Playgroud)

python json

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

ValueError调整ndarray的大小

我有一个小的python脚本,我总是遇到一个错误:

ValueError: cannot resize an array references or is referenced
by another array in this way.  Use the resize function
Run Code Online (Sandbox Code Playgroud)

码:

points = comp.findall('Points')              # comp is a parsed .xml
diffvals = np.arange(10, dtype=float)
diffvals.resize(len(points),8)
Run Code Online (Sandbox Code Playgroud)

但有两件事我不明白:

  1. 我使用调试器时只会出现此错误.
  2. 我有另一个相同代码的脚本,一切正常.我用调试器检查了这个,所有值,数据类型等都是相同的(当然除了内存地址)

我不知道我可以做些什么来解决这个问题.

python resize numpy

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