小编Rab*_*ski的帖子

什么是干净的方式(或模式)来进行功能参数检查?

是否有任何设计模式或干净的方法来进行功能/方法参数检查(针对允许的值)?

目前,我的函数中的许多初始代码都包含这些参数检查(空字符串,无效字符,现有id,...),并且在必要时,它有点难看并且混淆了函数的"真实"代码.通常,我的代码是这样的:

def my_function(p1,p2,p3,p4):
    #check parameters
    if p1 == ''
       raise InvalidArgError('p1 can not be empty')
    if p1 not in valid_list:
       raise InvalidArgError('p1 does not exist')
    if p2 < 0:
       raise InvalidArgError('p2 can not be negative')
    ...

    #finally do something
    p = p2+p3
Run Code Online (Sandbox Code Playgroud)

对于解决方案,我正在思考Python中的装饰器.
我正在使用Python,虽然我想一个好的解决方案是与语言无关的.

parameters design-patterns

9
推荐指数
1
解决办法
163
查看次数

Java:如何获得用于程序的mercurial当前变更集编号

我最近开始在Java项目中使用mercurial进行版本控制.当我运行程序时,它用于产生特定输出的输入参数被写入特定文件.如果我可以将当​​前的mercurial变更集编号(表示我的程序的版本)添加到该输出文件中,那将是很好的.

在Windows上最简单的方法是什么?我可以编写一个简单的Java解析器来获取hg log -l 1 命令第一行的输出,但也许有一种更简单的方法(即更少的代码行)?

java mercurial changeset

8
推荐指数
2
解决办法
7621
查看次数

将多行字符串粘贴到光标位置的GVIM中

当我使用CTRL-V将(例如)在Acrobat Reader中打开的PDF中的两行文本复制到gvim中时,文本将插入到我所在的gvim中的行上方,而不是在光标所在的位置.(场景:我想复制一个分为两行的文档标题,并将其粘贴到gvim中的html标记之间).

如果我使用单行文本执行相同操作,则文本将正确粘贴到光标位置.

我该怎么做才能使它也可以使用两行文本(比如"没有格式化的粘贴")?

重要提示:要粘贴的字符串由两个由回车符(或类似的东西)分隔的行组成!

解

实际上有两个有效的解决方案:

  • 使用CTRL-R*粘贴光标位置(并保持剪贴板内容为多行)
  • 重新映射粘贴命令以替换剪贴板字符串中的所有回车符

vim keyboard-shortcuts copy-paste

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

python:Windows终端中的unicode,编码使用?

我在Windows 7终端中使用Python解释器.
我试图围绕unicode和编码.

我键入:

>>> s='ë'
>>> s
'\x89'
>>> u=u'ë'
>>> u
u'\xeb'
Run Code Online (Sandbox Code Playgroud)

问题1:为什么字符串中使用的编码s与unicode字符串中使用的编码不同u?

我继续,输入:

>>> us=unicode(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x89 in position 0: ordinal
not in range(128)
>>> us=unicode(s, 'latin-1')
>>> us
u'\x89'
Run Code Online (Sandbox Code Playgroud)

问题2:我尝试使用latin-1编码运气好把字符串变成unicode字符串(实际上,我首先尝试了一堆其他字符串,包括utf-8).如何找出终端用于编码字符串的编码?

问题3:如何才能让终端打印ë的ë,而不是'\x89'或u'xeb'?嗯,愚蠢的我.print(s)做的工作.

我已经看过这个相关的SO问题,但没有任何线索:在Windows上设置Python终端编码

python windows unicode terminal

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

为什么从ipython笔记本生成的matplotlib图与终端版略有不同?

我有一个奇怪的问题.使用IPython Notebook,我使用pandas和matplotlib创建了一个非常广泛的脚本来创建许多图表.当我的修修补补完成后,我将代码复制(并清理)成一个独立的python脚本(这样我就可以将它推入svn,我的论文共同作者也可以创建图表).

为方便起见,我再次将独立的python脚本导入笔记本并创建了许多图表:

import create_charts as cc
df = cc.read_csv_files("./data")
cc.chart_1(df, 'fig_chart1.pdf')
...
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我使用上述方法获得的.pdf文件与我从Windows 7终端运行独立python脚本时获得的.pdf文件略有不同.最显着的区别在于,在特定图表中,图例位于上角而不是下角.但是还有其他小的差异(边框大小,字体似乎略有不同)

可能是什么原因造成的.我该如何排除故障?(我已经关闭了我的笔记本并重新启动它,重新导入我的create_charts脚本并排除任何未保存的更改)我的终端报告我正在使用Python 2.7.2,并pip freeze | grep ipython报告ipython 0.13.1

python matplotlib ipython-notebook

7
推荐指数
2
解决办法
4192
查看次数

Erlang:优先接收

Erlang中的优先接收可以很容易地实现如下:

prio() -> 
  receive 
    {priority, X} -> X 
  after 0 -> 
    receive 
      X -> X 
    end 
  end.
Run Code Online (Sandbox Code Playgroud)

我正在阅读一篇名为Priority Messaging made easy的论文,其中描述了以下问题:

[code]示例[上面]的主要问题是,我们没有考虑到当从内部阻塞接收恢复评估时,我们可能在邮箱中有多个消息.在最坏的情况下,除了第一个,可能是大量元素之外的所有元素都可以是优先级消息.在这种情况下,我们实际上已经完成了与我们打算做的完全相反的事情.

我不完全明白这一点.

问题(1):我假设一旦一条消息到达消息队列,内部阻塞接收将被"调用"(即恢复),对吗?假设在从内部阻塞接收恢复的短时间内,队列中已经有一大堆消息在等待,这是否现实?

问题(2):此外,最坏的情况被描述为具有一个正常消息和许多优先级消息的队列.由于首先根据队列中的第一条消息检查所有的receive子句,然后针对队列中的第二条消息,...(来源:本书,第69-70页)不应该是:很多正常队列末尾的消息是否有优先级消息?

erlang priority-queue

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

将输出重定向到Windows中另一个命令的命令行参数

在Windows中,我如何使用脚本/命令的输出作为另一个脚本的参数?(管道|在这里不起作用,因为其他脚本不能从标准输入读取)

太澄清了:我有一个需要参数arg的AnotherScript,例如:

AnotherScript 12
Run Code Online (Sandbox Code Playgroud)

现在我希望参数(示例中的12)来自脚本的输出,称之为ScriptB.所以我想要一些类似的东西

AnotherScript (ScriptB)
Run Code Online (Sandbox Code Playgroud)

AnotherScript实际上是一个需要参数的python脚本,而ScriptB是一个产生一些数字的cygwin bash脚本,所以我想使用它的方式如下:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答.但是,考虑到需要费力的'for'构造,我已经重写了AnotherScript以从标准输入中读取.这似乎是一个更好的解决方案.

windows command arguments

6
推荐指数
1
解决办法
9007
查看次数

适用于任务栏(Win)和菜单(mac)功能的跨平台Python GUI?

我是Python编程的新手,也是跨平台GUI构建的新手(以前的GUI体验只通过visual basic和Java).我已经编写了一些python代码来筛选来自网站的数据,现在我想构建一个GUI ,它将驻留在Mac OS X菜单栏和Window的任务栏(即系统托盘)中.

关于跨平台Python GUI的最有用的一般页面是这个(尽管它的名称指示窗口GUI).并且一些stackoverflow问题也很有用(特别是这个问题,以及关于拆分GUI和cli代码的这个问题的接受答案).我想我会选择wxPython或QT,因为我希望GUI看起来尽可能本地化.

但是,正如我所说,相当简单的GUI将主要存在于任务栏/菜单栏中.这会影响我的决定吗?

python user-interface taskbar cross-platform menubar

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

在py2exe编译代码中动态加载未编译的python插件

我的Python应用程序的构造使得某些功能可用作插件.插件架构目前非常简单:我有一个插件文件夹/包,其中包含一些python模块.我加载相关的插件如下:

plugin_name = blablabla
try:
    module = __import__(plugin_name, fromlist='do_something')
except ImportError:
   #some error handling ...
Run Code Online (Sandbox Code Playgroud)

然后执行:

try:
    loans = module.do_something(id_t, pin_t)
except xxx:
    # error handling
Run Code Online (Sandbox Code Playgroud)

我使用py2exe将应用程序编译为Windows二进制文件.这样可以正常工作,除了所有插件都包含在(并且必须包含在二进制文件中)的事实.这不太实用,因为对于每个新插件,我必须重新编译并发布我的应用程序的新版本.如果可以将新插件(即python文件)复制到某个应用程序插件文件夹,并且我的应用程序即时解释文件代码中的Python代码,那会更好.

这样做的最佳方法是什么?

(我已经阅读了所选插件文件的每一行,并对其应用了一个exec语句.但可能有更好的方法......)

python plugins dynamic

6
推荐指数
1
解决办法
2471
查看次数

如何获得生成的子进程命令字符串

我有Python子进程调用,它们被格式化为一个参数序列(subprocess.Popen(['ls','-l'])而不是单个字符串(即subprocess.Popen('ls -l'))).

当像我一样使用顺序参数时,有没有办法获得发送到shell的结果字符串(用于调试目的)?

一种简单的方法是将自己的所有论点加在一起.但我怀疑这在所有情况下都与子进程的作用相同,因为使用序列的主要原因是"允许模块处理任何所需的转义和引用参数".

python subprocess

6
推荐指数
1
解决办法
2333
查看次数