小编Evp*_*pok的帖子

将@ functools.lru_cache与字典参数一起使用

我有一个方法,其中(以及其他)字典作为参数.该方法是解析字符串,字典提供了一些子字符串的替换,因此它不必是可变的.

这个函数经常被调用,而且在冗余元素上,所以我认为缓存它会提高它的效率.

但是,正如你可能已经猜到的那样,因为它dict是可变的,因而不能清洗,@functools.lru_cache所以无法装饰我的功能.那我怎么能克服这个呢?

如果只需要标准的库类和方法,则可以获得奖励积分.理想情况下,如果它存在某种frozendict标准库,我还没有看到它会成为我的一天.

PS:namedtuple只有最后的手段,因为它需要大的语法转换.

python dictionary python-3.x hashable

22
推荐指数
3
解决办法
6725
查看次数

在Python中创建常量的约定

我正在编写一个应用程序,需要跨引擎找出数据库的模式.为此,我正在使用Python编写一个小型数据库适配器.我决定首先编写一个基类来概述我需要的功能,然后使用从这个基础继承的类来实现它.在此过程中,我需要实现一些需要在所有这些类中可访问的常量.其中一些常量需要使用C风格的按位OR组合.

我的问题是,

  1. 分享这些常量的标准方法是什么?
  2. 什么是创建可以组合的常量的正确方法?我指的MAP_FIXED | MAP_FILE | MAP_SHARED是C允许的样式代码.

对于前者,我遇到了线程,其中所有常量首先被放入模块中.对于后者,我简要地想到使用布尔词典.这两个似乎都太笨拙了.我想这是一个相当普遍的要求,并且认为必须确实存在一些好方法!

python coding-style

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

将排列应用于列表的原位方法?(按键排序的反转)

这是我想要做的一个例子

spam_list = ["We", "are", "the", "knights", "who", "say", "Ni"]
spam_order = [0,1,2,4,5,6,3]
spam_list.magical_sort(spam_order)
print(spam_list)

["We", "are", "the", "who", "say", "Ni", "knights"]
Run Code Online (Sandbox Code Playgroud)

我可以用enumerate,list等等,但我想直接影响spam_list,喜欢list.sort()和不复制它sorted()

编辑:推送一个字符串示例,以避免索引和值之间的混淆spam_list

编辑:原来这是Python排序并行数组的副本吗?.好吧,我不能删除SO一致性论点的那么多努力.

python sorting list

10
推荐指数
3
解决办法
3900
查看次数

在没有安装Gnome的情况下更改Gnome首选应用程序?

我正在使用KDE,但我也使用了一些GTK应用程序.当这些GTK应用程序调用外部程序时,它们使用为Gnome设置的首选应用程序而不是我设置的应用程序.

一个例子是Gimp.从"帮助"菜单中,如果我从"GIMP Online"中选择任何内容,它将在默认 Web浏览器中打开信息.在KDE中,我的默认Web浏览器是Mozilla Firefox,但GTK应用程序打开Opera.

安装gnome-control-center软件包可能会解决问题,但这会引入许多不必要的依赖项.

linux kde gnome

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

有人知道yarowsky算法的实现吗?

我想使用yarowsky的算法找到大文本中的搭配.我在这些链接中读到过这个算法:

维基百科和Yarowsky

google book和yarowsky 我想知道是否有yarowsky算法的实现?请帮我找一些这个算法的代码.谢谢

python nlp nltk word-sense-disambiguation

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

异步属性设置器

让我们假设我们有一个具有只能异步设置的属性的类.有没有办法在没有明确调用setter的情况下完成这项工作?

MNWE:

import asyncio

loop = asyncio.get_event_loop()

class AsyncTest:
    def __init__(self, attrib):
        self._attrib = attrib

    @property
    def attrib(self):
        return self._attrib

    @attrib.setter
    async def set_attrib(self, attrib):
        await asyncio.sleep(1.0)
        self._attrib = attrib


async def main():
    t = AsyncTest(1)
    print(t.attrib)
    await t.attrib = 3
    print(t.attrib)

asyncio.ensure_future(main())
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)

这失败了

  File "asyncprop.py", line 22
    await t.attrib = 3
       ^
SyntaxError: can't assign to await expression
Run Code Online (Sandbox Code Playgroud)

这并不奇怪,因为语法await

await ::=  ["await"] primary
Run Code Online (Sandbox Code Playgroud)

因此,似乎我们必然会忘记这一点@property并且让我们自己使用getter和setter进行异步操作.我错过了什么?

python async-await

6
推荐指数
2
解决办法
3510
查看次数

检查自定义__getitem__方法的“ key”参数是否为切片的pythonic /更快方法是什么?

我有一个自定义序列类型。它本质上是列表加布尔标志的包装,我希望它模仿通常的不可变序列行为。

我的问题是切片。我知道在Python 3中,实现它的__getitem__(key)方法是有一个方法,如果%key一个索引是一个项目,则返回一个项目;如果%key是一个切片对象,则返回一个切片的序列。但是我应该如何区分这些情况?

我基本上有两个假设。

sliced_list = self.wrapped_list[key]
if isinstance(key, slice):
    return MyCustomSequenceType(sliced_list, boolean_flag)
return sliced_list
Run Code Online (Sandbox Code Playgroud)

但这是邪恶的,不是吗?要么

sliced_list = self.wrapped_list[key]
try:
    return MyCustomSequenceType(sliced_list, boolean_flag)
except TypeError:
    return sliced_list
Run Code Online (Sandbox Code Playgroud)

后者看起来更pythonic。它依赖于MyCustomSequenceType.__init__(self, datas, flag)调用len(datas)的事实,因此TypeError如果%datasis是,则会引发integer。但是,如果再__init__提出TypeError另一个随机问题,那将是无法追踪的。另外,http: //wiki.cython.org/enhancements/numpy/getitem暗示了isinstance速度更快(实际上更容易被优化)。

那我该怎么办?

python typechecking slice magic-methods

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

Python列表理解逻辑错误

我正在尝试清除包含"msi"正则表达式和列表理解的字符串.但是,当我打印列表时,包含的字符串"msi"仍在列表中.错误究竟是什么?这是我的代码:

spam_list = [l for l in spam_list if not re.match("msi", l)]
Run Code Online (Sandbox Code Playgroud)

python regex logic

4
推荐指数
2
解决办法
378
查看次数

在python中创建一个永远不会被实例化的类是否有意义?

我在文件中有一些方法,所有方法都在全局范围(模块)中定义.我没有费心去上课,因为如果我定义了一个类,那么类永远不会被实例化,所有内容仍然必须静态访问.保持原样是否有意义,或者创建一个类并使我的所有方法都是静态的更好的设计?为什么?
仅供参考:我的脚本方法将被第三方用户访问.

python encapsulation

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

使用shebang使用subprocess.call执行python脚本

我正在用Python 3编写一个(某种程度上)模块化的应用程序,我想从它运行任意程序,所述程序在运行时指定,而不一定是python脚本.

所以我用例如,

subprocess.call([spam, "-i", eggs, "-o", ham])
Run Code Online (Sandbox Code Playgroud)

如果spam是一个python脚本,有shebang python3和可执行权限,我得到

OSError: [Errno 8] Exec format error
Run Code Online (Sandbox Code Playgroud)

如果我

subprocess.call(["python3", spam, "-i", eggs, "-o", ham])
Run Code Online (Sandbox Code Playgroud)

它工作正常.

你知道为什么吗?如何在spam不指定的情况下运行python3

python subprocess shebang python-3.x

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

使用计算值声明模块级常量的pythonic /更快方法是什么?

我正在编写一个实用程序模块,以便于处理数据文本文件.我已经声明了一些模块级常量来为我的方法参数提供默认值,因为现在我只使用这些值,但我希望我的代码很容易适应.

但是一些常量不容易硬编码.例如,我只能使用repattern对象re.compile.所以我写了

import re

_my_fine_pattern_string = r"some obnoxious regex"
MY_FINE_PATTERN         = re.compile(_my_fine_pattern_string)

def spam(eggs):
...
Run Code Online (Sandbox Code Playgroud)

它昨天在我直接执行的脚本中工作.但现在我想知道.这个代码会被执行import吗?它会减慢执行速度吗?这样做我会被烧伤吗?有没有更好/更快的方法呢?

python module

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