小编Håk*_*and的帖子

用pyenv安装Python 3后无法导入tkinter

tkinter在安装Python 3.4.2版本后,我遇到了导入问题pyenv.我的系统Python是2.7.6版.我正在使用Ubuntu 14.04.对于以下示例脚本t.py:

import _tkinter

print ("Hello")
Run Code Online (Sandbox Code Playgroud)

我明白了:

$ pyenv global system
$ python --version
Python 2.7.6
$ python t.py
Hello
$ pyenv global 3.4.2
$ python --version
Python 3.4.2
$ python t.py
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    import _tkinter
ImportError: No module named '_tkinter'
    Traceback (most recent call last):
      File "t.py", line 3, in <module>
        import _tkinter
    ImportError: No module named '_tkinter'
Run Code Online (Sandbox Code Playgroud)

请注意pyenv安装的Python 3.4.2版本~/.pyenv/versions/3.4.2/.

python

8
推荐指数
1
解决办法
8673
查看次数

regexp中的回溯速度比预期的要快

根据perlre,以下代码应该花几秒钟执行:

$ time perl -E '$_="((()" . ("a") x 18;  say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'

real    0m0.006s
user    0m0.000s
sys 0m0.005s
Run Code Online (Sandbox Code Playgroud)

文件说:

考虑上面的模式如何((()aaaaaaaaaaaaaaaaaa在几秒钟内检测到不匹配 ,但这次额外的字母加倍.

如图所示,我的笔记本电脑只需要一秒钟的时间.即使在一百万秒的时间内运行也会a在半秒内完成:

$ time perl -E '$_="((()" . ("a") x 1000000;  say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'

real    0m0.454s
user    0m0.446s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

regex perl backtracking

8
推荐指数
1
解决办法
1784
查看次数

如何为语法的动作类添加默认方法?

最近,我尝试了一些语法来修改文件的小部分.在那些测试用例中,我会保留大部分文件,只是在这里和那里修改小块,请参阅 评论问题的示例.

所以我需要一个(或几个)动作方法(即语法的动作类中的方法),我将使用其make方法将文件的修改部分附加到匹配对象.问题是语法本身会有更多令牌/规则/正则表达式与复杂的嵌套.因此,需要将(通过连续调用make())小变化(当前附加到令牌的匹配对象)传播 到TOP()动作类中的方法,使得文件中的所有其他(所有其他标记/规则/正则表达式)都是语法.parse()呼叫返回的结果保持不变.

因此,除了一个之外,action类中的所有方法都采用完全相同的形式:

method make-data ($match-data) {
    $match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
Run Code Online (Sandbox Code Playgroud)

现在,对于所有动作方法,显式重复相同的代码在我看来非常冗长,并且还打破了DRY编程原则.

有没有办法告诉语法类,如果没有指定一个动作方法(对应于语法中的一个标记),它将默认为make-data上面的方法(或类似的方法)?

所以在这种情况下,我设想了DEFAULT()动作类中的一个方法:

method DEFAULT ($match-data) {
    $match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
Run Code Online (Sandbox Code Playgroud)

如果语法类中的标记在动作类中没有相应的方法,则调用该方法.

grammar perl6 raku

8
推荐指数
1
解决办法
116
查看次数

可以Perl6 cmp两个字符串不敏感吗?

我正在进行排序,并希望控制alpha值的cmp不区分大小写(即https://perl6.org/archive/rfc/143.html).

是否有一些:我也许是这个副词?

perl6 raku

8
推荐指数
4
解决办法
175
查看次数

如何用代码点而不是字形替换Perl 6中的字符串?

我需要使用Perl 6从字符串中删除变音符号.我尝试这样做:

my $hum = '????';
$ahm.subst(/<-[\c[HEBREW LETTER ALEF] .. \c[HEBREW LETTER TAV]]>/, '', :g);
Run Code Online (Sandbox Code Playgroud)

我想删除所有不在HEBREW LETTER ALEF(א)和HEBREW LETTER TAV(ת)之间的字符.我希望以下代码返回"חום",但它会返回"חם".

我想会发生的事情是,默认情况下Perl 6由字形工作,认为是一个字素,并删除所有字符.通过字形工作通常是明智的,但在我的情况下,我需要通过代码点来工作.

我试图找到一个能让它通过codepoint工作但却找不到它的副词.也许在Perl 6中还有一种方法可以使用Unicode属性来排除变音符号,或仅包含字母,但我也找不到.

谢谢!

regex unicode perl6 raku

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

.nqp文件中的`nqp :: if`和`if`有什么区别?

World.nqp行3602

nqp::if(                                    
   nqp::istype(nqp::atpos($task,3),$!Block),
   QAST::Op.new( :op<call>,
       QAST::WVal.new(:value(nqp::atpos($task,3))),
       $self,
       $getattr
   ),
   nqp::if(
       nqp::iseq_i($code,5),
       QAST::IVal.new(:value(nqp::atpos($task,3))),                        
       QAST::NVal.new(:value(nqp::atpos($task,3)))
   )
),
Run Code Online (Sandbox Code Playgroud)

而在World.nqp的第3314行中

if $invocant_type =:= $!acc_sig_cache_type {
     $sig := $!acc_sig_cache;
}
# First time, create new signature and mark it cached
else {
    $sig := $!w.create_signature_and_params(
    NQPMu, %sig_empty, $block, 'Any', :method, :$invocant_type);
    $!acc_sig_cache      := $sig;
    $!acc_sig_cache_type := $invocant_type;
}
Run Code Online (Sandbox Code Playgroud)

我以为前面的最后一种形式if(不带nqp::)是不允许的,除非if内置了?请参阅NQP内置订阅者列表

第一种形式,nqp::ifNQP操作码列表中进行了描述,但是我找不到第二种形式的文档,尽管它似乎是Rakudo源代码树中最常见的形式。

为什么if在NQP 中有两种形式的陈述?

perl6 raku nqp

8
推荐指数
1
解决办法
89
查看次数

How to avoid importing default symbols when using a module?

I am going to use Hash::Merge as an example. Consider:

use v6;
use Hash::Merge; # <-- imports all symbols marked with "is export" from Hash::Merge
my %hash1 = a1 => [1, 2, 3], b => "xxx", c => { ca => 1 }, e => 5;
my %hash2 = a1 => [1, 5, 3], b => "yyyy", c => { ca => 5, f => "a" }, d => 4;
my %res = merge-hash(%hash1, %hash2, :no-append-array);
Run Code Online (Sandbox Code Playgroud)

Suppose I do not …

perl6 raku

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

如何在单位范围的语法中使用Grammar :: Tracer?

我正在通过以下设置使用语法::追踪器

第6页

use v6;
use lib '.';
use MyGrammar;
my $res = MyGrammar.parse('hello 6 9 bye');
say $res;
Run Code Online (Sandbox Code Playgroud)

MyGrammar.pm6

unit grammar MyGrammar;
use Grammar::Tracer;

rule TOP { [<number> || <word> ]* }
rule number { \d+ }
rule word { \w+}
Run Code Online (Sandbox Code Playgroud)

但是未启用跟踪。我猜这是因为语法MyGrammar不在use Grammar::Tracer语句的词法范围内吗?

grammar perl6 raku

8
推荐指数
1
解决办法
76
查看次数

NativeCall中的位字段

我正在尝试为Cgraph创建Perl6绑定,并且其中一个结构为其某些属性设置了位字段,其值小于8。如何在模块中表示该字段?

我尝试使用is nativesize(x)特征定义自定义类型,但是CStructs仅支持8位宽倍数的类型。

C示例代码:

struct Agtag_s {
    unsigned objtype:2;
}
Run Code Online (Sandbox Code Playgroud)

我试过的

my native objtype is repr('P6int') is Int is nativesize(2) is export { }
class Agtag is repr('CStruct') is export {
    has objtype $.object-type;
}
Run Code Online (Sandbox Code Playgroud)

尝试将我的模块与该代码一起使用会失败,并显示以下错误消息: CStruct only supports native types that are a multiple of 8 bits wide (was passed: 2)

perl6 nativecall raku

8
推荐指数
1
解决办法
77
查看次数

为什么Devel :: LeakTrace会泄漏内存?

我试图学习更多有关如何检测Perl中的内存泄漏的信息。我有这个程序:

p.pl

#! /usr/bin/env perl

use Devel::LeakTrace;
my $foo;
$foo = \$foo;
Run Code Online (Sandbox Code Playgroud)

输出

leaked SV(0xac2df8e0) from ./p.pl line 5
leaked SV(0xac2df288) from ./p.pl line 5
Run Code Online (Sandbox Code Playgroud)

为什么这会泄漏两个标量(而不仅仅是一个)?

然后我将其贯穿valgrind。首先,我创建了的调试版本perl

$ perlbrew install perl-5.30.0 --as=5.30.0-D3L -DDEBUGGING \
  -Doptimize=-g3 -Accflags="-DDEBUG_LEAKING_SCALARS"
$ perlbrew use 5.30.0-D3L
$ cpanm Devel::LeakTrace
Run Code Online (Sandbox Code Playgroud)

然后我按照建议运行valgrind设置:PERL_DESTRUCT_LEVEL=2perlhacktips

$  PERL_DESTRUCT_LEVEL=2 valgrind --leak-check=yes perl p.pl
==12479== Memcheck, a memory error detector
==12479== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12479== Using …
Run Code Online (Sandbox Code Playgroud)

perl

8
推荐指数
1
解决办法
116
查看次数

标签 统计

perl6 ×7

raku ×7

grammar ×2

perl ×2

regex ×2

backtracking ×1

nativecall ×1

nqp ×1

python ×1

unicode ×1