from functools import wraps def foo_register(method_name=None): """Does stuff.""" def decorator(method): if method_name is None: method.gw_method = method.__name__ else: method.gw_method = method_name @wraps(method) def wrapper(*args, **kwargs): method(*args, **kwargs) return wrapper return decorator 例如:下面的代码使用foo_register来装饰my_function ,而不是使它成为decorator 。 @foo_register def my_function(): print('hi…') 示例:以下按预期工作。 @foo_register('say_hi') def my_function(): print('hi…') 如果我希望它在两个应用程序(一个使用method.__name__名称method.__name__和一个传入名称)中正确工作,我必须检查foo_register内部以查看第一个参数是否是装饰器,如果是,则必须: return decorator(method_name) (而不是return decorator )。 这种“检查是否可以调用”似乎非常黑客。 有没有更好的方法来创build一个这样的多用途装饰器? PS我已经知道,我可以要求装饰被称为,但这不是一个“解决scheme”。 我希望API感觉自然。 我的妻子喜欢装饰,我不想毁了。
运行时.. python setup.py sdist register upload ..我得到以下输出: running register We need to know who you are, so please choose either: 1. use your existing login, 2. register as a new user, 3. have the server generate a new password for you (and email it to you), or 4. quit Your selection [default 1]: 1 Username: […]
我在我的网站上使用ckeditor ,以方便用户inputHTML。 但是,我从ckeditor获取的数据被封装在<p></p>块中。 (我不想要的) 是否有一些configuration设置强制编辑器不包装任何东西的文字?
假设我想包含一些调用console.log的一些合法的生产原因,比如说unit testing工具。 显然,如果浏览器没有console ,或者没有控制台 ,我不希望这个引发过早的exception。 创build一个简单的logfunction将日志logging到控制台的最好方法是什么,或者如果没有控制台存在,就会在没有错误的情况下悄然失败? 上面提到的问题被接受的答案是: var log = Function.prototype.bind.call(console.log, console); log.apply(console, ["this", "is", "a", "test"]); 这个logfunction可以在IE上正常调用,这里的apply只是为了显示它是可能的? 而且,我从关联的问题中推测,如果IE的控制台在运行时closures,那么这样做会失败,所以即使在控制台打开后, log也不能正常工作。 如果这是错的,有人可以解释它是如何工作的? 这ycombinator文章似乎相关。 他们是否正在谈论与上面链接的问题相同的IE行为? Function.prototype.apply.apply(console.log, [console, arguments]); 在IE9破坏console.log和其他供应商的常规console.log上都可以。 与使用Array.prototype.slice将参数转换为实数组相同。 这在我的Chrome控制台中很好地工作。 function echo(){ Function.prototype.apply.apply(console.log, [console, arguments]); } 简化: function echo(){ Function.apply.call(console.log, console, arguments); } 添加支票并返回: function echo(){ return window.console && console.log && Function.apply.call(console.log, console, arguments); } 上面的例子对我来说足够了。 […]
虽然这个问题有一个python后端,但问题不是绑定到python本身,而是关于扩展机制以及如何注册/查找插件。 在python中,入口点的概念是由setuptools引入的,并且与已安装的python发行版的元数据(称为其他包装系统中的包)有关。 就我的理解而言,入口点提供的function之一是允许应用程序定义其他人可以放入的地方,所以任何想要使用入口点的应用程序都可以获得注册类/函数列表。 举个例子: Foo定义入口点“entrypoint1”并查找以这个名字注册的插件。 Bar在“entrypoint1”入口点上注册一个可调用的( Bar.callable )。 任何python脚本都可以将Bar.callable列为“entrypoint1”的注册可调用对象之一。 使用setuptools,应用程序在安装时注册入口点,信息存储在与打包有关的元数据中,称为.egginfo(通常包含有关分发名称,依赖关系以及一些关于打包的元数据的信息)。 我觉得打包元数据不适合存储这种信息,因为我不明白为什么这些信息与打包有关。 我很好奇听到其他语言的入口点/扩展/插件function,特别是如果这个概念与元数据和打包相关联。 所以问题是… 你有我应该看的例子吗? 你能解释为什么deviseselect是这样做的吗? 你能看到不同的方法来处理这个问题吗? 你知道这个问题在不同的工具中已经被解决了吗? 目前的python实现有什么缺点和优势? 到目前为止,我发现了什么 我在不同的项目中发现了一种创build和分发“插件”的方法,这些插件特别关注“我们如何制作插件”。 例如, libpeas (gobject插件框架)定义了一组通过指定插件来扩展默认行为的方法。 虽然这很有趣,但我只是对“注册和发现”(并最终加载)部分内容感兴趣。 以下是我迄今为止的一些发现: Libpeas定义了自己的元数据文件 (* .plugin),它存储了关于可调用types的信息(可以在不同的语言中使用不同的插件)。 这里的主要信息是要加载的模块的名称。 Maven有一个devise文档,其中包含有关如何pipe理东西的信息。 Maven使用它们的依赖和元数据来pipe理插件,所以看起来像是一个有趣的地方来寻找他们如何实现的东西 。 正如在他们的文档中指出的, Maven插件在类上使用注释 ( @goal ),然后用它来查找所有使用特定@goal注册的插件。 虽然这种方法在静态语言中是可能的,但它不在解释型语言中,因为我们只知道在一个给定时间点可能的类/可调用对象是什么,这些可能会改变。 Mercurial使用一个中央configuration文件 ( ~/.hgrc ),包含插件名称到可以find的path的映射。 一些更多的想法 虽然这不是对这个问题的答案,但是也注意到setuptools入口点是如何实现的,以及它们在性能方面如何与mercurial的进行比较。 当你用setuptools要求一个特定的入口点时, 所有的元数据都会在运行时被读取,并且列表就是以这种方式构build的 。 这意味着如果你的path上有很多python发行版,这个阅读可能需要一些时间。 另一方面,Mercurial把这些信息硬编码到一个单独的文件中,这意味着你必须在那里指定你的可调用的完整path,然后直接从configuration文件中“发现”但是“已读”。 这允许更细粒度的configuration应该是可用的,什么不应该和似乎更快。 另一方面,由于pythonpath可以在运行时改变,这意味着以这种方式提供的可调用对象将不得不根据path进行检查,以便知道它们是否应该被返回或者不是在所有情况下。 为什么入口点目前与包装有关 了解为什么入口点与setuptools中的包装相关联也是很有趣的。 主要原因是python发行版可以在安装时注册自己的一部分作为扩展入口点:安装意味着注册入口点:不需要额外的注册步骤。 虽然这在大多数情况下(当实际安装python发行版时)工作得很好,但是当它们没有安装或者没有被打包的时候,它不会。 […]
我想写一个类库,为我创build一个复杂的对象,但只应尽可能less的暴露。 我希望它被包含到其他项目中,在那里我只有一个调用这个库,例如返回一个内部创build类的对象。 我不想让别人明确地创build这些对象,但我仍然想为这个类库创build一个testing项目。 例如: var result = Manager.Instance.Create(definition) 这应该是对类库的唯一访问。 根据定义参数,它使用不同的子类来创build请求的实例并相应地设置其属性。 所以我想通过testing来保证整个创build过程正常。 但是因为我也不想公开很less的内部属性的结果对象我不能testing通过只使用这个公共访问方法,因为我没有任何属性来断言。 我知道你不应该testing内部的机制,这通常是不好的devise,我也阅读了这篇文章 ,但没有任何办法可以创build一个库加unit testing项目,也许以后限制访问这个类? 用包装什么的?
有没有人知道如何在Android平台的TextView中包装文字。 即如果textview中的文本超过了屏幕的长度,它应该显示在第二行。 我已经search并尝试以下内容: android:scrollHorizontally="false", android:inputType="textMultiLine", android:singleLine="false" 但没有工作.. 任何人都可以build议如何做到这一点..我相对较新的Android平台..
我希望我的构build脚本在发布和开发环境中正常工作。 为此,我想在ant中定义一个属性,将其称为(例如) fileTargetName fileTargetName将从环境variablesRELEASE_VER获取它的值(如果它是可用的),如果它不可用,它将获得dev的默认值 帮助与ant<condition><value></condition> & <property>得到它的工作表示赞赏。
我是Node.js编程的新手,最近我创build了一个使用(express,backbone和其他免费的视图技术,使用mongoDB)的示例工作Web应用程序。 现在我正想要在临时环境中部署相同的程序,我不确定如何打包此应用程序并分发它。 [我可以照顾mongoDb并单独设置] 我来自Java世界,在那里我们为部署在servlet容器中的web应用程序创build可重用的libs和war / ear包的jar。 现在在这种情况下,因为node.js本身也是一个Web容器,所以如何打包我的webapp呢? 包装节点webapps是否有使用express构build的标准格式/指南? (有没有类似的jar / war包装系统的节点应用程序?) 打包后如何部署? 它会成为一个exe,因为它也是它自己的容器? PS:到目前为止,我正在考虑将所有必需的源文件手动复制到临时环境中,并运行npm命令来下载该机器上的所有依赖项,然后使用“forever”或其他一些机制来运行我的server.js。 (另外,添加一些监控,以防万一程序崩溃,永远失败)我不知道这是正确的方式吗? 我确信必须有一些解决这个问题的标准化方法。
当我应该去原始types的包装类? 或者在什么情况下我应该selectwrapper / Primitivetypes?