小编Ham*_*jan的帖子

Python懒惰迭代器

我试图了解如何以及何时评估迭代器表达式.以下似乎是一个懒惰的表达:

g = (i for i in range(1000) if i % 3 == i % 2)
Run Code Online (Sandbox Code Playgroud)

然而,这个在构造上失败了:

g = (line.strip() for line in open('xxx', 'r') if len(line) > 10)
Run Code Online (Sandbox Code Playgroud)

我没有名为'xxx'的文件.但是,既然这件事很懒,为什么这么快失败呢?

谢谢.

EDI:哇,我做了一个懒人!

g = (line.strip() for i in range(3) for line in open(str(i), 'r'))
Run Code Online (Sandbox Code Playgroud)

python lazy-evaluation

5
推荐指数
2
解决办法
3411
查看次数


在C#(.Net 3.5)中是否可以使用标准文字常量而不是"utf-8"?

我想找到一个更好的方法来做到这一点:

XmlNode nodeXML = xmlDoc.AppendChild(
    xmlDoc.CreateXmlDeclaration( "1.0", "utf-8", String.Empty) );
Run Code Online (Sandbox Code Playgroud)

当我输入代码时,我不想考虑"utf-8"vs"UTF-8"vs"UTF8"vs"utf8".我想让我的代码更容易出现错别字.我确信某些标准库已声明"utf-8"为const/readonly字符串.我该怎么找到它?那么,"1.0"呢?我假设主要的XML版本也已在某处枚举.

谢谢!

c# xml coding-style declaration utf-8

5
推荐指数
1
解决办法
1091
查看次数

是否有.Net StyleCop规则警告锁(this),锁(typeof,lock(<string obj>等?

这3种类型的锁显然很糟糕.还有什么其他类型的锁定不好?有没有Stylecop/FxCop规则可以解决这个问题?如果没有,那么请你帮我一个自定义规则实现?他们所有人的代码必须相似,对吧?

谢谢.

.net fxcop locking stylecop

5
推荐指数
1
解决办法
359
查看次数

如何使用Python中的Amara库针对XSD架构验证xml文件?

以下Q的高额奖金:

您好,这是我在Ubuntu 9.10上使用Python 2.6,Amara2尝试的(顺便说一句,test.xsd是使用xml2xsd工具创建的):

g@spot:~$ cat test.xml; echo =====o=====; cat test.xsd; echo ==== 
o=====; cat test.py; echo =====o=====; ./test.py; echo =====o===== 
<?xml version="1.0" encoding="utf-8"?>==; ./test.py` > 
test.txttest.xsd; echo === 
<test>abcde</test> 
=====o===== 
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified"> 
  <xs:element name="test" type="xs:NCName"/> 
</xs:schema> 
=====o===== 
#!/usr/bin/python2.6 
# I wish to validate an xml file against an external XSD schema. 
from amara import bindery, parse 
source = 'test.xml' 
schema = 'test.xsd' 
#help(bindery.parse) 
#doc = bindery.parse(source, uri=schema, validate=True) # These 2 seem 
to fail in …
Run Code Online (Sandbox Code Playgroud)

python python-2.6 amara xsd-validation

5
推荐指数
1
解决办法
2366
查看次数

寻找SC.exe实用程序的API,以及有关自动更新Windows Service的建议

我们已经构建了一个在客户端计算机上运行的Windows服务,该服务偶尔会下载其自身的较新版本,然后执行自我更新:安装新服务,启动它,停止旧服务并最终将其删除。该服务无法直接停止自身并做其他事情,因此它旋转了另一个可执行文件,完成了一些工作。正确地做到这一点是棘手的,当使用较新的.Net Framework构建较新的服务时(例如最近从.Net 2.0到.net 4.0的转换),这尤其糟糕。问题是.Net 2.0库无法在.Net 4.0服务上运行。

现在,一种方法是让服务的旧版本旋转一个新版本附带的帮助程序,但是...如果该服务的行为发生了重大变化,该怎么办?即使有些事情通常保持不变,我也对不混淆版本感到更安全-有助于降低设计复杂性。

现在,在Windows Services上似乎有一种.Net版本无关的操作方式:该sc.exe工具:http : //support.microsoft.com/kb/251192

我想知道这是否真的是我寻求的银弹。现在,因为我将以编程方式调用此人并检查错误,所以我不妨为此使用API​​。理想情况下,我将有一个本机C ++项目,该项目可编译为与SC.exe接口的本机exe。这可能吗?如果没有,那我该如何在不同计算机上定位sc.exe?它们可以是32位或64位,并运行从Win XP SP2 / 3开始的任何版本的Windows。

让我知道您是否对我的问题有疑问,或者有一些巧妙的想法,或者对我在此处提出的确切问题有答案。


编辑:如果我尝试使用2.0代码安装4.0服务,则会收到与执行相同的错误:

> C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe MyService4.exe
Run Code Online (Sandbox Code Playgroud)

Microsoft(R).NET Framework安装实用程序2.0.50727.4927版本(c)Microsoft Corporation。版权所有。

初始化安装时发生异常:System.BadImageFormatException:无法加载文件或程序集“ file:/// [path] \ MyService4.exe”或其依赖项之一。该程序集由比当前加载的运行时新的运行时构建,无法加载。

.net windows-services self-updating

5
推荐指数
1
解决办法
1589
查看次数

寻找使用WinForms和/或建议重新设计实现的精彩向导示例

免责声明:在这个问题标签页面中,对话实际上意味着同样的事情,抱歉.我的理由:我不确定最终产品应该是什么样子 - 一堆独立的窗户或者一体化.

我希望改进一个用WinForms烘焙的现有的,难以维护的向导.我需要尝试保持相同的外观和感觉,但我需要清理内部逻辑.共有5个对话框,所有这些对话框都在一个巨大的方法中一个接一个地显示(当然,单击"下一个"按钮之后).来回跳跃的方式是...... 5或6个标签和GOTO!

现在,这个向导是线性的,而不是树.从任何一个对话框/页面,您最多可以访问其他两个对话框/页面.想到了双重链接列表.现在有5 * 4 = 20潜在的状态转换,而只有2*1 + 3*2 = 8它们是有效的.我不必使用gotos.他们通常是邪恶的,在这种情况下他们是 - 很难维持这个...而我正在考虑增加另一个,第6页.为什么原因gotos为在那里是最有可能,因为1.0版正在制作时A)的时间压力,B)这是5年前,所以在当时可用的奇才最好的例子/教程可能不是很大.

现在,向导的大多数页面都要求用户输入.根据用户输入的内容呈现后续页面.如果用户在第3页上说并且决定将后退按钮一直指向1,并且没有更改任何内容,并且点击下一次两次,则状态不应该更改.但是,更改页面x上的内容通常会使页面x + 1上的内容无效.但是,有一些例外,因为页面x上的某些或所有设置可能依赖于页面x-1,x-2等,但页面x + 1,x + 2等不依赖于x一些x.

我希望到目前为止事情是清楚的.我们试图通过为他们默认一些东西来帮助用户.存储事物的方式也不是很好.该对话框具有读/写属性,从/向实际控件复制内容.然后,在主方法中,存在"超级存储",其保存每页的存储.因此,当用户完成页面x并接下来命中时,首先将内容从控件复制到类的本地存储中,然后将这些内容保存到超级存储的相应成员中.

没有使用(对话框/存储器)数组和索引.每个goto目标(标签)都有单独但类似的"创建和填充"逻辑.当页面不再显示时,对话框对象会被丢弃(它们不会被丢弃,但每次要显示它们时,它们都会被重新创建并重新填充.我不相信这是必要的,因为只有需要单个手柄,并且在显示和关闭之后,我相信它可以在相同的状态下再次显示,而不必重新填充控件.如果浪费内存是唯一的问题,我可能会让事情滑落,但事情不是很容易维护,所以我不妨解决这个问题.

我在想:

  1. 将对话框存储在集合中,例如数组,但最好是DLL,因为我只能向前移动1或向后移动1,或者只能移动我列出的两个选项中的一个(对于第一个和最后一个对话框).
  2. 实际上我的标签/页面都扩展了一个共同的抽象类(因为"next","back","exit"按钮,它们的行为对所有人都是通用的).
  3. 每个标签/页面/对话框(出于此问题的目的,同样令人困惑)将具有"指挥"类可见的只读属性.这些属性将来自控件中的值(信息的真正来源),有时属性会稍微按下这些值."指挥"的责任是抓住那些并将它们存放起来.当导体希望用一种方法填充对话框时(让我们称之为"种子").我在这里遇到一些困难,因为每种种子方法的参数都不同.我希望能够利用强类型,以及保持通用性.我怀疑应该给出一些东西.我可以将字典传递给每个种子方法,但感觉太像Pythonic,就像鸭子打字一样.如果我搞砸了,我不知道直到运行时间.此外,对于任何给定的页面,字典的打包和解包更好地始终匹配.这是你进来的地方.
  4. 全局存储可以是一个巨大的字典.我可以遵守规则,保持所有密钥不同,或者根据页面将其名称加上"p1_"到"p5_",只是为了确定.我确信其他方案也存在.拥有巨型字典在最后也很方便 - 用户输入组装的顺序无关紧要,只要它正确完成即可.我也可以拥有一台状态机...... 这也是我在设计中迷失的地方.如果我把东西放在字典中,我将不得不执行很多条件逻辑,例如:如果我在第2页,并且我进行了更改,那么我通常(可能有例外)需要制作旧的默认值任何页面3,4,5无效.根据它的丑陋程度,它可能不比现有的基于goto的设计好多少.

如您所见,有一些挑战.然而,我很有希望,因为通过良好的精灵设计思考是一个肯定是以前重新发明的轮子.也许你可以推荐一个开源的C#/ mono应用程序,它带有一个线性但非平凡的向导,这样我就可以看一下实现.哎呀,甚至Java/Swing也许适合我,只要向导本质上是相似的.WPF对我来说是另一个挑战,我不想有2个问题而不是1个问题.

让我知道你能想到什么.我应该保留这些东西但是尽可能多地清理其他部分吗?随意问的问题.谢谢,

-HG

c# oop wizard winforms

5
推荐指数
1
解决办法
1879
查看次数

如何在Word2007 doc中添加"Page x of y"页脚,因为我使用C#生成它

我看这里,这里这里

我试过这个:

    private void AddFooters()
    {
        foreach (Word.Section wordSection in this.WordDoc.Sections)
        {
            object fieldEmpty = Word.WdFieldType.wdFieldEmpty;
            object autoText = "AUTOTEXT  \"Page X of Y\" ";
            object preserveFormatting = true;

            wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Fields.Add(
                wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range,
                ref fieldEmpty, ref autoText, ref preserveFormatting);
        }
    }
Run Code Online (Sandbox Code Playgroud)

还有这个:

    private void AddFooters()
    {
        foreach (Word.Section section in this.WordDoc.Sections)
        {
            Word.Range footerRange = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            this.WordDoc.ActiveWindow.Selection.TypeText("Page ");
            footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldPage);
            this.WordDoc.ActiveWindow.Selection.TypeText(" of ");
            footerRange = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldNumPages);
            footerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我录制了这个VBA宏,但似乎没有帮助.

Sub Macro1()
' …
Run Code Online (Sandbox Code Playgroud)

c# ms-word .net-4.0 office-interop page-numbering

5
推荐指数
1
解决办法
6372
查看次数

帮我翻译Python代码,将文件名中的扩展名替换为C++

如果您对Python一无所知我会道歉,但是,以下代码段对任何人都应该是非常易读的.值得注意的唯一技巧 - 为列表编制索引[-1]会为您提供最后一个元素(如果存在)或引发异常.

>>> fileName = 'TheFileName.Something.xMl'
>>> fileNameList = fileName.split('.')
>>> assert(len(fileNameList) > 1) # Must have at least one period in it
>>> assert(fileNameList[-1].lower() == 'xml')
>>> fileNameList[-1] = 'bak'
>>> fileName = '.'.join(fileNameList)
>>> print(fileName)
TheFileName.Something.bak
Run Code Online (Sandbox Code Playgroud)

我需要将这个逻辑转换为C++(我实际使用的语言,但到目前为止已经很糟糕)的函数具有以下签名:void PopulateBackupFileNameOrDie(CAtlString& strBackupFileName, CAtlString& strXmlFileName);.这里strXmlFileName是"输入",strBackupFileName是"输出"(我应该反转两个的oprder吗?).棘手的部分是(纠正我,如果我错了)我正在使用Unicode字符串,所以寻找这些字符:.xmlXML不是那么直截了当.最新的Python没有这些问题,因为'.'"."都是Unicode字符串(不是"char"长度为1型),二者只包含一个点.

请注意,返回类型是void- 不要太担心它.我不想向您详细介绍我们如何将错误传达给用户.在我的Python示例中,我只使用了一个断言.你可以做类似的事情,或者只是添加评论// ERROR: [REASON].

请问是否有问题.建议使用std::string,而不是CAtlString功能参数不是我要找的.如果必须,您可以在函数内部转换它们,但我不希望在一个函数中混合使用不同的字符串类型.我正在使用VS2010在Windows上编译这个C++.这意味着我不会安装BOOST,QTString或者其他不可用的库.窃取一个boost或其他标题以启用一些魔法也不是正确的解决方案.

谢谢.

c++ python string visual-studio-2010 unicode-string

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

JQuery Tablesorter - 保持第一行不变

我正在使用jQuery Tablesorter 2.0 插件创建一个可排序的表格......比如说书籍。表格的第一行将是所有书籍的摘要,我希望它始终位于顶部。

我需要自定义表排序器的行为,但我认为我不能/应该使用自定义解析器来做到这一点。我认为我需要的是一个自定义比较器函数 - 该函数允许我自己比较任意两行,理想情况下,如果我正在寻找的条件未得到满足,也能够调用默认行为。

示例算法如下(希望我没有反转我的结果):

function customSort(lhs, rhs, table, column_index) {
    if (lhs === 'magic_str') {
        return -1; // Magic string wins
    }
    if (rhs === 'magic_str') {
        return 1; // Magic string wins
    }
    return defaultSort(lhs, rhs, table, column_index);
}
Run Code Online (Sandbox Code Playgroud)

现在,我了解一些 JS,但还不足以撬开一个流行的库并重写它的部分内容,特别是在我加载原始库后作为一个位于顶部的补丁。(那将是理想的)。另外,如果我能以任何其他方式完成这种行为,我会洗耳恭听。

javascript jquery customization tablesorter jquery-plugins

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