这个问题不是讨论单身人士设计模式是否可取,反模式,还是任何宗教战争,而是讨论如何以最蟒蛇的方式在Python中最好地实现这种模式.在这种情况下,我将"最pythonic"定义为表示它遵循"最小惊讶原则".
我有多个类可以成为单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望在添加gumph的几个类中混乱.
最好的方法:
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)
优点
缺点
m = MyClass(); n = MyClass(); o = type(n)();那时m == n && m != o && n != oclass 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开发人员,最近已被介绍给Prolog.我喜欢为某些类型的任务使用关系规则的概念,并希望将其添加到我的保留曲目中.
在Python中有没有适合逻辑编程的好库?我在谷歌上做了一些搜索,但只发现了以下内容:
关于relational_python的jtauber博客系列
很想和其他人比较......谢谢!
-AJ
我正在学习来自python的 C#,并希望知道C#垃圾收集器是如何工作的 - 我发现一旦我弄清楚它在幕后做了什么,我就更了解python,并希望避免制作那种菜鸟我在学习python时最初犯的错误.
我一直无法找到任何关于何时收集垃圾的物品的明确解释,并留下诸如此类的问题
对这些问题的回答,甚至更好地清楚地概述实际发生的事情将赢得cookie(或upvotes),如果你的答案与python的做事方式相比更好.我对哪个更好,只是细节不感兴趣.我在programmers.stackexchange上的原始帖子上的答案将非常感谢...
我正在编写一个联合客户端,目的是拥有一个设备客户端和一个具有相同功能的网站.我将使用Django开发网站 - 这已经决定了; 客户端应使用CLI和PyQt4 GUI在python中编写.我一直在编写clinet,它的数据库相当繁重,因为所有内容都被缓存以便在离线时读取它.
今天让我感到震惊的是,在我的应用程序中使用Django模型是有意义的,以减少客户端和网站之间的重复工作.我的问题是分离这个是多么容易,以及我的客户端需要多少Django才能使用Django的模型.AFAIK我不需要运行服务器,但还需要什么?我有一个想法是为我的客户端生成与网站相同的html,但显示它与Qt小部件而不是为浏览器提供页面.
有人曾经尝试过这种事吗?我已经开始这样了,但是对于潜在的死胡同或者会造成维护噩梦的事情的警告会很好......
我一直在努力获取我的文档,以便我正在开发一个包含镜像客户端和服务器API的开源项目.为此,我创建了一个装饰器,大部分时间都可以用来记录一个简单地对其输入执行验证的方法.你可以找到一个完整的类这些方法在这里和装饰的实现在这里.
正如您所见,装饰器functools.wraps用于保存文档字符串,我也认为是签名,但源代码与生成的文档如下所示:
资源:
VS
文档: 
有谁知道有任何方法让setH生成的文档显示正确的呼叫签名?(没有为每个签名设置一个新的装饰器 - 我需要镜像的方法)
我找到了一个解决方法,其中涉及让装饰器不更改未绑定的方法,但让类在绑定时改变方法(对象实例化) - 这看起来像是一个黑客,所以任何评论,或其他方式的做法这,将不胜感激.
我来自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) 我正在使用python中的实时等距RPG,并希望将移动设备作为平台.我遇到困难的主要领域是我的寻路.我尝试了一些算法,包括A*和一些调整,以更好地适应我正在使用的地图.
我对我的算法的结果感到满意 - 它们在确定性的同时给出了一些智能的错觉,并且在任一方向上都是一致的,这样两个以两个角色为目标的角色就会在中间碰撞.
我的问题是虽然PC上的结果看起来很好,我可以要求所有的处理能力,在我的手机上它是另一个故事,并且在计算算法时经常会有第二次或更多延迟.出于这个原因,我正在考虑用C编写的性能最密集的代码为此编写一个库,但是如果有一个现有的解决方案,或者更好的方法我可以做到这一点,我会全力以赴.
我偶然发现了python-pathfinding,但这似乎比我为自己的用例构建的更慢.
我的地图是从水平建造的,这些水平被墙壁(可见或不可见)包围,并且必须通过门(可见或不可见)链接.
我目前的方法是有两种不同的算法:
在一个房间内,我将单个图块搜索为节点,每个边界作为等成本边缘,在目标位置的方向上使用深度优先
在每个门都是节点的房间之间.使用第一算法计算通过房间(从门到门)的最短可能路径,并将其存储在哈希表中作为这些节点之间的边缘成本.然后计算可以遍历从一个节点到另一个节点的边集,并将其存储在散列表中,并且不允许在同一路径中多次包含相同的边.
我在启动时产生了一个单独的过程,它使用第一个算法生成第二个算法的图形,这解决了我的许多问题,房间往往相对较小,因此保留了即时路径查找的惩罚低于其他情况,然后长距离:
说我有两个芹菜任务:
@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似乎不是一个完整的任务对象.
我在一个大型项目中使用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://推送网址?
我正在尝试在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) 我正在尝试为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)