小编Mic*_*x2a的帖子

在pyparsing中嵌套分隔列表而不会导致无限递归?

Pyparsing中有以下玩具语法:

import pyparsing as pp

or_tok = "or"
and_tok = "and"
lparen = pp.Suppress("(")
rparen = pp.Suppress(")")

Word = pp.Word(pp.alphas)("Word")

Phrase = pp.Forward()

And_Phrase = pp.Group(pp.delimitedList(Phrase, and_tok))("And_Phrase")
Or_Phrase = pp.Group(pp.delimitedList(Phrase, or_tok))("Or_Phrase")

Phrase << (pp.Optional(lparen) + (And_Phrase ^ Or_Phrase) + pp.Optional(rparen)) ^ Word

Expression = pp.OneOrMore(Word ^ Phrase)("Expression")


def test(text):
    output = Expression.parseString(text)
    print output.asXML()
Run Code Online (Sandbox Code Playgroud)

但是,运行此程序将无限递归,这不是我想要的.相反,我希望我的语法能够处理嵌套短语,以便上述程序可以解析为与下面相同的东西:

>>> test("TestA and TestB and TestC or TestD")
<Expression>
    <And_Phrase>
        <Word>TestA</Word>
        <Word>TestB</Word>
        <Or_Phrase>
            <Word>TestC</Word>
            <Word>TestD</Word>
        </Or_Phrase>
    </And_Phrase>
</Expression>
Run Code Online (Sandbox Code Playgroud)

我试图修改定义And_Phrase,Or_Phrase以便它们只匹配具有两个或更多元素的列表,但无法弄清楚如何执行此操作.

我也尝试过使用pyparsing.operatorPrecedence …

python pyparsing operator-precedence

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

TypeError:由名称"id"和位置(2)给出的参数 - wxPython

我正在尝试使用Notebook类在wxPython中制作标签.使用上面链接的教程,我想出了以下代码:

#!/usr/bin/env python

import wx

class DeployTab(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super(DeployTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)

        self.sizer = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        deploy = wx.Button(
            self.main_panel, 
            label="test 1",
            size=(250, 100))
        self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)

        self.SetSizer(self.sizer)

class ConfigTab(wx.Panel):
    # For now, copy.
    def __init__(self, parent, *args, **kwargs):
        super(ConfigTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)

        self.sizer = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        deploy = wx.Button(
            self.main_panel, 
            label="test2",
            size=(250, 100))
        self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)

        self.SetSizer(self.sizer)

class NotebookTabs(wx.Notebook):
    def __init__(self, parent):
        super(NotebookTabs, self).__init__(self, parent, …
Run Code Online (Sandbox Code Playgroud)

python wxpython python-2.7

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

您可以使用 cython 编译 .py 文件而不是 pyx 文件吗?

我有一个文件 foo.py,它包含一个非常慢的函数,需要 8 分钟才能计算。但是,当我将文件更改为foo.pyx并使用 cython 编译它而不进行其他更改时,计算需要 5 分钟。

我的问题是:如果我跑cython foo.py而不是cython foo.pyx然后跑 gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o foo.so foo.c

当我运行时import foo,python会导入.py文件还是编译后的.so文件?pyx 真的需要在那里吗?如果存在的话,有没有办法强制它.so接管?.py

原因是我无法在不破坏其他人机器上的代码的情况下更改 foo.py 的名称,但我真的希望它对于我的测试用例来说更快。如果我可以在本地编译它而不用担心在其他地方破坏代码,那就太好了。

(我正在测试这个,但需要一段时间)

python cython

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

类如何不是C++中的对象?

我正在阅读" 设计模式:可重复使用的面向对象软件的元素 ",(特别是关于原型设计模式的章节)并且它声明......

"Prototype对于像C++这样的静态语言特别有用,其中类不是对象,在运行时很少或没有类型信息." (第121页)

(强调我的)

我一直认为类是对象的同义词,我对这个语句的含义感到困惑.类如何不是对象,为什么语言是静态的呢?

c++ class

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

如何在sagemath中添加标题,轴标签和图例?

我目前正在使用sagemath托管的在线工作簿制作一些图表.

这是我尝试生成图形的一些代码的示例:

myplot = list_plot(zip(range(20), range(20)), color='red')
myplot2 = list_plot(zip(range(20), [i*2 for i in range(20)]), color='blue')
combined = myplot + myplot2
combined.show()
Run Code Online (Sandbox Code Playgroud)

这是非常基本的 - 它基本上是两个并排在一起的散点图.

有没有办法轻松添加轴标签,图例和可选的标题?

我设法破解了一个让我添加轴标签的解决方案,但它看起来非常丑陋和愚蠢.

from matplotlib.backends.backend_agg import FigureCanvasAgg 
def make_graph(plot, labels, figsize=6):
    mplot = plot.matplotlib(axes_labels=labels, figsize=figsize)
    mplot.set_canvas(FigureCanvasAgg(mplot))
    subplot = mplot.get_axes()[0]
    subplot.xaxis.set_label_coords(x=0.3,y=-0.12)
    return mplot

a = make_graph(combined, ['x axis label', 'y axis label'])
a.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法来添加轴标签,图例和标题?

python graphing sage

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

高级列表排序Python

我正在尝试对字体进行排序:

d = {'+A':234, '-B':212, 'A':454, '-C':991, '-A':124}
Run Code Online (Sandbox Code Playgroud)

我想按键对它进行排序,使其形式如下:

+A, A, -A, +B, B, -B, etc
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用,sorted(d, key=lambda x: (x[1], x[0]) if len(x) == 2 else x[0]) 但我似乎找不到任何方法来正确排序符号,因为它们在ascii图表上的顺序不正确.我究竟做错了什么?

python sorting dictionary list sorted

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

如何按字符拆分中文字符串?

我有一个主要包含中文字符的字符串,如下所示:

string sentence = "???????????????????????";
Run Code Online (Sandbox Code Playgroud)

我怎样才能逐字逐句?最终,我希望能够获取我的字符串,并将其写入一个文件,每个字符都在它自己的行上,如下所示:

?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

StringBuilder s = new StringBuilder();
foreach (char character in sentence.ToCharArray())
{
    s.Append(character + '\n');
}
string output = s.ToString();

StreamWriter writer = new StreamWriter("test.txt", false, Encoding.UTF8);
writer.Write(output);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

......但无论出于何种原因,它写道,而不是写汉字

   29252242105020184228092794129315391442445825299260413251021162260416530235763314592232222317363452614126041
Run Code Online (Sandbox Code Playgroud)

...改为文件.但是,干嘛

StreamWriter writer = new StreamWriter("text.txt", false, Encoding.UTF8);
writer.Write(sentence);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

...确实成功地将中文句子写入文件,所以我知道这对我写入文件的方式不应该有问题.

c# string

3
推荐指数
1
解决办法
1702
查看次数

OCaml样式,用于将两个排序列表合并为一个排序列表的函数

我是OCaml的新手,我正在审核课程.我有一个作业提示,上面写着:"合并xs ys需要两个整数列表,每个列表按递增顺序排序,并按排序顺序返回单个合并列表."

我已经成功编写了一个有效的函数:

let rec merge xs ys = match xs with
  | [] -> ys
  | hxs::txs -> if hxs <= (match ys with
    | [] -> hxs
    | hys::tys -> hys)
      then hxs :: merge txs ys 
      else match ys with
      | [] -> xs
      | hys::tys -> hys :: merge xs tys  in
merge [-1;2;3;100] [-1;5;1001]
;;
Run Code Online (Sandbox Code Playgroud)

我想知道我的代码是否被认为是可接受的OCaml风格?我想避免形成任何坏习惯.它感觉组成密集,但也许那是因为我还不习惯OCaml.

谢谢.

ocaml

3
推荐指数
1
解决办法
6081
查看次数

如何使用makefile在C中的另一个目录中包含.a静态库和.h文件?

我创建了一个.h头文件,实现并创建了.a静态库文件,两者都在目录中,比如说/home/data/folder1.

我有另一个.c文件,它将使用链接.h头文件和.a库文件.但是,该.c文件位于目录中/home/data/folder2.

我应该在Makefile(也位于/home/data/folder2)中写什么?另外,我应该包含myheader.h.c我要编译的文件中吗?这是我到目前为止,但没有工作:

LIBB = -L/home/data/folder1/libmylib.a

HEADER = -L/home/data/folder2/myheader.h

main: main.o
    gcc $(HEADER) $(LIBB) $< -o $@

main.o: main.c
    gcc -c main.c

.PHONY: clean

clean:

    rm -f *.o *.~ a.out main
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,提前感谢!

c c++ makefile

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

将Gradle升级到版本4后生成错误

当我将Android项目中的Gradle升级到版本4时,我们遇到此错误并无法修复它.

错误详情:

More than one variant of project :volley matches the consumer attributes:
  - Configuration ':volley:debugApiElements' variant android-aidl:
      - Found artifactType 'android-aidl' but wasn't required.
      - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
      - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
      - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
      - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
  - Configuration ':volley:debugApiElements' variant android-classes:
      - Found artifactType 'android-classes' but wasn't required.
      - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'. …
Run Code Online (Sandbox Code Playgroud)

android gradle

3
推荐指数
1
解决办法
1717
查看次数