我有一个方法,其中(以及其他)字典作为参数.该方法是解析字符串,字典提供了一些子字符串的替换,因此它不必是可变的.
这个函数经常被调用,而且在冗余元素上,所以我认为缓存它会提高它的效率.
但是,正如你可能已经猜到的那样,因为它dict是可变的,因而不能清洗,@functools.lru_cache所以无法装饰我的功能.那我怎么能克服这个呢?
如果只需要标准的库类和方法,则可以获得奖励积分.理想情况下,如果它存在某种frozendict标准库,我还没有看到它会成为我的一天.
PS:namedtuple只有最后的手段,因为它需要大的语法转换.
我正在编写一个应用程序,需要跨引擎找出数据库的模式.为此,我正在使用Python编写一个小型数据库适配器.我决定首先编写一个基类来概述我需要的功能,然后使用从这个基础继承的类来实现它.在此过程中,我需要实现一些需要在所有这些类中可访问的常量.其中一些常量需要使用C风格的按位OR组合.
我的问题是,
MAP_FIXED | MAP_FILE | MAP_SHARED是C允许的样式代码.对于前者,我遇到了线程,其中所有常量首先被放入模块中.对于后者,我简要地想到使用布尔词典.这两个似乎都太笨拙了.我想这是一个相当普遍的要求,并且认为必须确实存在一些好方法!
这是我想要做的一个例子
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一致性论点的那么多努力.
我正在使用KDE,但我也使用了一些GTK应用程序.当这些GTK应用程序调用外部程序时,它们使用为Gnome设置的首选应用程序而不是我设置的应用程序.
一个例子是Gimp.从"帮助"菜单中,如果我从"GIMP Online"中选择任何内容,它将在默认 Web浏览器中打开信息.在KDE中,我的默认Web浏览器是Mozilla Firefox,但GTK应用程序打开Opera.
安装gnome-control-center软件包可能会解决问题,但这会引入许多不必要的依赖项.
我想使用yarowsky的算法找到大文本中的搭配.我在这些链接中读到过这个算法:
google book和yarowsky 我想知道是否有yarowsky算法的实现?请帮我找一些这个算法的代码.谢谢
让我们假设我们有一个具有只能异步设置的属性的类.有没有办法在没有明确调用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 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速度更快(实际上更容易被优化)。
那我该怎么办?
我正在尝试清除包含"msi"正则表达式和列表理解的字符串.但是,当我打印列表时,包含的字符串"msi"仍在列表中.错误究竟是什么?这是我的代码:
spam_list = [l for l in spam_list if not re.match("msi", l)]
Run Code Online (Sandbox Code Playgroud) 我在文件中有一些方法,所有方法都在全局范围(模块)中定义.我没有费心去上课,因为如果我定义了一个类,那么类永远不会被实例化,所有内容仍然必须静态访问.保持原样是否有意义,或者创建一个类并使我的所有方法都是静态的更好的设计?为什么?
仅供参考:我的脚本方法将被第三方用户访问.
我正在用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?
我正在编写一个实用程序模块,以便于处理数据文本文件.我已经声明了一些模块级常量来为我的方法参数提供默认值,因为现在我只使用这些值,但我希望我的代码很容易适应.
但是一些常量不容易硬编码.例如,我只能使用re的pattern对象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 ×10
python-3.x ×2
async-await ×1
coding-style ×1
dictionary ×1
gnome ×1
hashable ×1
kde ×1
linux ×1
list ×1
logic ×1
module ×1
nlp ×1
nltk ×1
regex ×1
shebang ×1
slice ×1
sorting ×1
subprocess ×1
typechecking ×1