小编the*_*oom的帖子

在Python中创建单例

这个问题不是讨论单身人士设计模式是否可取,反模式,还是任何宗教战争,而是讨论如何以最蟒蛇的方式在Python中最好地实现这种模式.在这种情况下,我将"最pythonic"定义为表示它遵循"最小惊讶原则".

我有多个类可以成为单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望在添加gumph的几个类中混乱.

最好的方法:


方法1:装饰者

def singleton(class_):
    instances = {}
    def getinstance(*args, **kwargs):
        if class_ not in instances:
            instances[class_] = class_(*args, **kwargs)
        return instances[class_]
    return getinstance

@singleton
class MyClass(BaseClass):
    pass
Run Code Online (Sandbox Code Playgroud)

优点

  • 装饰器的添加方式通常比多重继承更直观.

缺点

  • 虽然使用MyClass()创建的对象将是真正的单例对象,但MyClass本身是一个函数,而不是一个类,因此您无法从中调用类方法.也是为了m = MyClass(); n = MyClass(); o = type(n)();那时m == n && m != o && n != o

方法2:基类

class Singleton(object):
    _instance = None
    def __new__(class_, *args, **kwargs):
        if not isinstance(class_._instance, class_):
            class_._instance = object.__new__(class_, *args, **kwargs)
        return class_._instance

class MyClass(Singleton, …
Run Code Online (Sandbox Code Playgroud)

python singleton metaclass decorator base-class

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

Python中的关系/逻辑编程?

我是一名长期的python开发人员,最近已被介绍给Prolog.我喜欢为某些类型的任务使用关系规则的概念,并希望将其添加到我的保留曲目中.

在Python中有没有适合逻辑编程的好库?我在谷歌上做了一些搜索,但只发现了以下内容:

关于relational_python的jtauber博客系列

很想和其他人比较......谢谢!

-AJ

python prolog logic-programming

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

垃圾收集和范围如何在C#中工作?

我正在学习来自python的 C#,并希望知道C#垃圾收集器是如何工作的 - 我发现一旦我弄清楚它在幕后做了什么,我就更了解python,并希望避免制作那种菜鸟我在学习python时最初犯的错误.

我一直无法找到任何关于何时收集垃圾的物品的明确解释,并留下诸如此类的问题

  1. "当一个对象的最后一个引用超出范围时会发生什么?" 该对象是否被垃圾收集,或者当您返回到定义它的范围时它是否仍然存在?
  2. "在什么时候推荐的数量会减少?" 让我想知道它是否使用引用计数或其他一些技术......

对这些问题的回答,甚至更好地清楚地概述实际发生的事情将赢得cookie(或upvotes),如果你的答案与python的做事方式相比更好.我对哪个更好,只是细节不感兴趣.我在programmers.stackexchange上的原始帖子上的答案将非常感谢...

.net c# python garbage-collection

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

使用Django减去Web服务器

我正在编写一个联合客户端,目的是拥有一个设备客户端和一个具有相同功能的网站.我将使用Django开发网站 - 这已经决定了; 客户端应使用CLI和PyQt4 GUI在python中编写.我一直在编写clinet,它的数据库相当繁重,因为所有内容都被缓存以便在离线时读取它.

今天让我感到震惊的是,在我的应用程序中使用Django模型是有意义的,以减少客户端和网站之间的重复工作.我的问题是分离这个是多么容易,以及我的客户端需要多少Django才能使用Django的模型.AFAIK我不需要运行服务器,但还需要什么?我有一个想法是为我的客户端生成与网站相同的html,但显示它与Qt小部件而不是为浏览器提供页面.

有人曾经尝试过这种事吗?我已经开始这样了,但是对于潜在的死胡同或者会造成维护噩梦的事情的警告会很好......

python django model-view-controller qt hybrid

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

让狮身人面像识别正确的签名

我一直在努力获取我的文档,以便我正在开发一个包含镜像客户端和服务器API的开源项目.为此,我创建了一个装饰器,大部分时间都可以用来记录一个简单地对其输入执行验证的方法.你可以找到一个完整的类这些方法在这里和装饰的实现在这里.

正如您所见,装饰器functools.wraps用于保存文档字符串,我也认为是签名,但源代码与生成的文档如下所示:

资源:源代码

VS

文档: 狮身人面像文档

有谁知道有任何方法让setH生成的文档显示正确的呼叫签名?(没有为每个签名设置一个新的装饰器 - 我需要镜像的方法)

我找到了一个解决方法,其中涉及让装饰器不更改未绑定的方法,但让类在绑定时改变方法(对象实例化) - 这看起来像是一个黑客,所以任何评论,或其他方式的做法这,将不胜感激.

python decorator python-sphinx

13
推荐指数
2
解决办法
1291
查看次数

要求许可或道歉?

我来自python背景,经常说道歉比要求许可更容易道歉.特别给出了两个片段:

if type(A) == int:
  do_something(A)
else:
  do_something(int(A))

try:
  do_something(A)
except TypeError:
  do_something(int(A))
Run Code Online (Sandbox Code Playgroud)

然后在大多数使用场景下,当A通常是一个整数时假设第二个会更快(假设do_something需要一个整数作为输入并且会相当迅速地提高它的异常),因为你从每个执行循环中丢失了逻辑测试,代价是更多昂贵的例外,但不那么频繁.

我想要检查的是在C#中这是否正确,或者逻辑测试与异常相比是否足够快以使其成为一个小角落?

哦,我只对发布性能感兴趣,而不是调试.


好吧,我的例子太模糊了试试这个:

天真的解决方案:

return float(A) % 20 # coerse A to a float so it'll only fail if we actually don't
                     # have anything that can be represented as a real number.
Run Code Online (Sandbox Code Playgroud)

逻辑解决方案:

if isinstance(A, Number): # This is cheaper because we're not creating a new
    return A % 20         # object unless we really have to.
else:
    return float(A) %20
Run Code Online (Sandbox Code Playgroud)

基于异常的解决方案:

try: # Now …
Run Code Online (Sandbox Code Playgroud)

c# python performance

12
推荐指数
3
解决办法
992
查看次数

是否有任何可用的python路径查找库?

我正在使用python中的实时等距RPG,并希望将移动设备作为平台.我遇到困难的主要领域是我的寻路.我尝试了一些算法,包括A*和一些调整,以更好地适应我正在使用的地图.

我对我的算法的结果感到满意 - 它们在确定性的同时给出了一些智能的错觉,并且在任一方向上都是一致的,这样两个以两个角色为目标的角色就会在中间碰撞.

我的问题是虽然PC上的结果看起来很好,我可以要求所有的处理能力,在我的手机上它是另一个故事,并且在计算算法时经常会有第二次或更多延迟.出于这个原因,我正在考虑用C编写的性能最密集的代码为此编写一个库,但是如果有一个现有的解决方案,或者更好的方法我可以做到这一点,我会全力以赴.

我偶然发现了python-pathfinding,但这似乎比我为自己的用例构建的更慢.


我的用例:

我的地图是从水平建造的,这些水平被墙壁(可见或不可见)包围,并且必须通过门(可见或不可见)链接.

我目前的方法是有两种不同的算法:

  • 在一个房间内,我将单个图块搜索为节点,每个边界作为等成本边缘,在目标位置的方向上使用深度优先

  • 在每个门都是节点的房间之间.使用第一算法计算通过房间(从门到门)的最短可能路径,并将其存储在哈希表中作为这些节点之间的边缘成本.然后计算可以遍历从一个节点到另一个节点的边集,并将其存储在散列表中,并且不允许在同一路径中多次包含相同的边.

我在启动时产生了一个单独的过程,它使用第一个算法生成第二个算法的图形,这解决了我的许多问题,房间往往相对较小,因此保留了即时路径查找的惩罚低于其他情况,然后长距离:

  • 第一种算法用于计算从当前位置到当前房间中每扇门的距离.
  • 第一种算法用于计算目标房间中每扇门到目标位置的距离.
  • 第二种算法的输出用于获取房间之间的路径集
  • 这些费用加到了第一扇门和最后一扇门的费用上
  • 该组解决方案按成本分类,使得相同成本的路径顺序始终保持一致
  • 选择解决方案集中的第一项.

c python performance path-finding

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

如何处理celery的Task.map中的错误

说我有两个芹菜任务:

@celery.task
def run_flakey_things(*args, **kwargs):
    return run_flakey_and_synchronous_thing.map(
        xrange(10)
    ).apply_async()


@celery.task
def run_flakey_and_synchronous_thing(a):
    if a % 5:
        return a
    raise RuntimeError(a)
Run Code Online (Sandbox Code Playgroud)

因此,当你去运行时,run_flakey_things它会立即掉落,因为序列中的第一项会引发异常.我想要的是按顺序按顺序运行序列所有项目的任务,但继续在异常上运行,一旦所有这些项目完成就引发新的异常.

理想的情况是,如果我可以xmap在应用之前向对象添加on_failure ,但xmap似乎不是一个完整的任务对象.

python dictionary exception-handling celery

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

git子模块的不同推/拉网址

我在一个大型项目中使用git superproject模式,该项目由没有存储库帐户的Teamcity构建代理部署,但是存储库设置为允许匿名克隆.出于这个原因,我已经使用他们的http://url而不是他们的git url 设置了子模块.这个问题是存储库拒绝http推送:

Total 0 (delta 0), reused 0 (delta 0)
error: RPC failed; result=22, HTTP code = 401
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

所以每次我在切换分支时更新子模块,我都要做一个git remote add-url --push添加git://网址.

有没有办法在超级项目中设置子模块,以便他们已经使用http://url进行提取和git://推送网址?

git git-submodules gitlab

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

在Unity3d中运行REST服务器

我正在尝试在Unity项目中构建一个REST服务器,并且最初认为Nancy似乎是明显的选择.然而,许多令人头疼的事情,我仍然无法让Nancy在Unity Mono运行时运行 - 我可以从Xamarin编译和运行但是Unity在我尝试使用资产时给了我相当无益的输出:

Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.LoadReferences () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename …
Run Code Online (Sandbox Code Playgroud)

rest unity-game-engine nancy

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

无法从Unity游戏中嵌入的Nancy REST服务器获取POST体

我正在尝试为Nancy POST设置路由,我希望以Json格式提交一个对象,并使用它来触发Unity运行时中的事件 - 我认为这应该是相当标准的东西.

我认为通过遵循NancyFX中的示例:反序列化JSON我能够将请求的主体绑定到一个对象,然后在其他地方使用它,但是我实际上得到了这个相当神秘的错误:

Error CS1061: Type 'server.RESTServer' does not contain a definition for 'Bind' and no extension method 'Bind' of type 'server.RESTServer' could be found (are you missing a using directive or an assembly reference?) (CS1061) (server)
Run Code Online (Sandbox Code Playgroud)

这是违规来源的相关部分:

using Nancy;

namespace server
{
    public class RESTServer : Nancy.NancyModule, RESTInterface
    {
        public class LevelInfo
        {
            public string index;
        }
        public RESTServer ()
        {
            Delete ["/current/level"] = _ => 
            {
                UnloadLevel();
                return HttpStatusCode.OK;
            };
            Get ["/current/level"] …
Run Code Online (Sandbox Code Playgroud)

c# mono unity-game-engine nancy

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