小编cxw*_*cxw的帖子

Python'in'表达式中的关键字与for循环中的关键字

我理解in运算符在此代码中的作用:

some_list = [1, 2, 3, 4, 5]
print(2 in some_list)
Run Code Online (Sandbox Code Playgroud)

我也明白i将在此代码中采用列表的每个值:

for i in [1, 2, 3, 4, 5]:
    print(i)
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果in在使用的操作for循环是一样的in第一个代码使用运营商.

python loops python-3.x semantics

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

一些字符贴在我的Python cmd中的彩色提示符上

我正在使用Python 2的cmd模块为程序创建命令行.只要我不在我的提示中添加颜色,一切都很好用.

工作代码:

from cmd import Cmd

class App(Cmd):

    def __init__(self):
        Cmd.__init__(self)
        self.prompt = "PG ["+ (str('username'), 'green') +"@"+ str('hostname') +"]: "

    def do_exit(self, line):
        '''
        '''
        return True

App().cmdloop()
Run Code Online (Sandbox Code Playgroud)

当我更改下面的代码时,如果我输入一个长命令或尝试搜索命令历史记录,一些字符会坚持我的提示.

问题代码:

from cmd import Cmd

class App(Cmd):

    def __init__(self):
        Cmd.__init__(self)
        self.prompt = "PG ["+ self.colorize(str('username'), 'green') +"@"+ str('hostname') +"]: "

    colorcodes =    {'green':{True:'\x1b[32m',False:'\x1b[39m'}}


    def colorize(self, val, color):
        return self.colorcodes[color][True] + val + self.colorcodes[color][False]

    def do_exit(self, line):
        '''
        '''
        return True

App().cmdloop()
Run Code Online (Sandbox Code Playgroud)

你可以在asciicasts中看到这个问题.cmd2模块也存在问题.

python colors readline command-line-interface python-2.x

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

双变量的真实性总是它的字符串部分吗?

我的Perl 5.26.2 x64(Cygwin)的经验行为是,当且仅当其字符串部分是真实时,双变量才是真实的:

# Falsy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, "foo"; say "yes" if $v'
yes

# Truthy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, ""; say "yes" if $v'

# Truthy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, "foo"; say "yes" if $v'
yes

# Falsy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, ""; say …
Run Code Online (Sandbox Code Playgroud)

perl boolean-expression language-lawyer truthiness

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

Perl的词法范围的pragma是如何实现的?

编译指示一样autodie,根据文档,是词法范围的.

{
use autodie;
  ..
  ..
}
# Can die here
Run Code Online (Sandbox Code Playgroud)

这适用于所有加载的模块use吗?据我所知,use几乎相同:

BEGIN {
  require autodie;
  autodie->import(LIST);
}
Run Code Online (Sandbox Code Playgroud)

BEGIN在编译时发生,并且require不是词法范围.那怎么autodie知道它的范围呢?

perl scope internals compiler-directives lexical-scope

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

py.test:可以在测试功能级别应用多个标记吗?

我从pytest文档中看到,我们可以在类或模块级别一次应用多个标记.我没有找到在测试功能级别执行此操作的文档.有没有人在成功之前做过这件事?

我想在理想情况下将此作为标记列表,例如在上面的类文档中完成(例如,引用文档):

class TestClass:
    pytestmark = [pytest.mark.webtest, pytest.mark.slowtest]
Run Code Online (Sandbox Code Playgroud)

因此,pytest文档讨论了如何pytestmark在类和模块级别指定标记.但是,它没有谈到在测试功能级别上有类似的东西.我必须在测试函数之上单独指定标记,以便用它们中的每一个标记它们.这使得测试代码在测试函数之上越来越多的标记看起来有点笨拙.

test_example.py:

pytestmark = [class1, class2]

class TestFeature(TestCase):

    @pytest.mark.marker1
    @pytest.mark.marker2
    @pytest.mark.marker3
    def test_function(self):
        assert True
Run Code Online (Sandbox Code Playgroud)

python markers pytest

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

为 JOptionPane 对话框设置助记符和热键

是否可以为 JOptionPane 对话框中的按钮分配热键和助记符?我希望能够在 JOptionPane 生成的消息对话框中使用选项是、否和取消,按 Y 以点击是按钮,按 N 以点击否按钮并转义以激活转义按钮。同样,在带有“确定”和“取消”按钮的对话框中,我希望能够通过输入和退出来激活它们。

我已经尝试将 JButtons 传递到 JOptionPane 的按钮对象数组中,并且已经设置了助记符。助记符起作用并且按钮在对话框中正确显示,但是,它们在被激活时无法正常工作。最值得注意的是,他们不处理对话框。

将热键和助记符添加到 JOptionPane 对话框的按钮的正确方法是什么?

java hotkeys mnemonics jbutton joptionpane

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

numpy einsum的替代方案

当我计算X具有N行和n列的矩阵的三阶矩时,我通常使用einsum:

M3 = sp.einsum('ij,ik,il->jkl',X,X,X) /N
Run Code Online (Sandbox Code Playgroud)

这通常很好,但现在我正在使用更大的值,即n = 120N = 100000,并einsum返回以下错误:

ValueError:迭代器太大

做3个嵌套循环的替代方案是不可行的,所以我想知道是否有任何替代方案.

python numpy matrix

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

符合标准的C断言()可以多次评估其参数吗?

标准C assert(e)宏是否允许e多次评估?那么C++ 11或更高版本呢?我没有看到任何保证公开组规范,得到的答复是看不出来我从一些搜索(1,2).

上下文:可以func()多次调用assert(func() != NULL)吗?

是的,我已经知道出于其他原因这是一个坏主意:正如glibc手册指出的那样,assert()如果NDEBUG定义的话,根本不会评估参数.但是,假设NDEBUG没有定义的,有没有对任何保证最大的次数e进行评估?

这个提示的问题.

c c++ assert language-lawyer c++11

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

在VBA中使用自定义枚举器实现类似Python的生成器

在VBA中,如果你想要一个迭代Range像Python对象,你做的东西像这样.然而,这种方法涉及一次性构建整个范围:

Set mCollection = New Collection
Dim i As Long
For i = startValue To endValue
    mCollection.Add i
Next
Run Code Online (Sandbox Code Playgroud)

...如果你想要制作一个非常大的范围,这是很糟糕的,因为它需要很长时间和很多内存来构建该集合.这就是发电机的用途; 它们在循环时生成序列中的下一个项目.

现在,如果您希望一个类可以迭代,它必须返回一个[_NewEnum],这是通过Set关键字完成的.这告诉我一个For...Each循环只需要引用一个Enum,因为Set关键字只分配指向返回变量的指针,而不是实际值.

这为一些杂耍提供了空间:

  • For...Each(此后称为"迭代器")需要一些内存来指示所提供的内容[_NewEnum]; 枚举对象指针的引用
  • 自定义类可以随时[_NewEnum]从封装的集合生成指针
  • 也许因此,如果类知道Iterator在内存中寻找枚举指针的位置,它可以用指向不同枚举对象的指针覆盖该位内存.

换一种说法:

  • For...Each循环的第一次迭代中,我的类返回一个变量,其值是指向一个枚举的指针.变量驻留在内存中给定的位置VarPtr(theVariable)
  • 下一次迭代,我手动调用我的类的方法,生成第二个枚举
  • 之后,该方法继续通过在变量指针给出的地址处覆盖第一个枚举对象的指针,并将其替换ObjPtr()为第二个枚举的地址.

如果这个理论是正确的,那么For Each循环现在将持有对不同值的引用[_NewEnum],因此会做出不同的事情.


这是我试图这样做的方式:

发电机:NumberRange类模块

注意:必须导入以保留属性.

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True …
Run Code Online (Sandbox Code Playgroud)

excel foreach enums vba excel-vba

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

运行`cover -test`时如何从子进程收集覆盖率,否则不收集?(开发::封面)

(我想我已经看到了这个问题的答案,但我再也找不到了。我遇到的最接近的是这个问题)。

我正在对prt 进行黑客攻击,并试图为我的更改获取完整的覆盖数据。我的一些新测试调用system($^X, 'prt', ...)运行子进程。然后我测试这些进程的输出。但是,Devel::Cover 不会在子进程中收集覆盖率数据。我如何收集该数据,而不会导致 Devel::Cover 在我执行常规操作时运行make test?目前我有一个丑陋的解决方法(见下文),但我认为必须有一个更简单的方法。

完整的 MCVE 在这里。命令行复制,为您提供方便:

git clone https://github.com/cxw42/multi-process-devel-cover-test.git ; cd multi-process-devel-cover-test ; perl Makefile.PL ; make ; cover -test
Run Code Online (Sandbox Code Playgroud)

注释掉t/01-help.t下面描述的解决方法的第 11 行。

编辑我使用的原因system是为了得到100%覆盖上-h/ --help/ --version。这些开关由自动调用的Getopt::Long处理exit()。如有必要,我可以-exitval=>NOEXIT在自己的代码中使用和处理退出。

行不通的事情

PERL5OPT

$ PERL5OPT=-MDevel::Cover=-silent,1 cover -test
/home/cxw/perl5/perlbrew/perls/perlcygbrew-5.26.2-1/bin/cover shouldn't be run with coverage turned on.
Run Code Online (Sandbox Code Playgroud)

HARNESS_PERL_SWITCHES+cover

$ HARNESS_PERL_SWITCHES=-MDevel::Cover=-silent,1 cover -test
...
t/01-help.t …
Run Code Online (Sandbox Code Playgroud)

perl code-coverage spawn devel-cover

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