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 …
我正在尝试使用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) 我有一个文件 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 的名称,但我真的希望它对于我的测试用例来说更快。如果我可以在本地编译它而不用担心在其他地方破坏代码,那就太好了。
(我正在测试这个,但需要一段时间)
我正在阅读" 设计模式:可重复使用的面向对象软件的元素 ",(特别是关于原型设计模式的章节)并且它声明......
"Prototype对于像C++这样的静态语言特别有用,其中类不是对象,在运行时很少或没有类型信息." (第121页)
(强调我的)
我一直认为类是对象的同义词,我对这个语句的含义感到困惑.类如何不是对象,为什么语言是静态的呢?
我目前正在使用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)
是否有更简单的方法来添加轴标签,图例和标题?
我正在尝试对字体进行排序:
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图表上的顺序不正确.我究竟做错了什么?
我有一个主要包含中文字符的字符串,如下所示:
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)
...确实成功地将中文句子写入文件,所以我知道这对我写入文件的方式不应该有问题.
我是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.
谢谢.
我创建了一个.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)
任何帮助将不胜感激,提前感谢!
当我将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)