小编FMc*_*FMc的帖子

Python动态装饰器 - 为什么这么多包裹?

所以我对Python装饰者还是个新手 - 我以前用过它们,但我从来没有自己做过.我正在阅读本教程(特定段落),我似乎不明白为什么我们需要三个级别的功能?为什么我们不能做这样的事情:

def decorator(func, *args, **kwargs):
    return func(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

python decorator

13
推荐指数
1
解决办法
4994
查看次数

使用Python的optparse模块,如何创建一个带有可变数量参数的选项?

使用Perl,Getopt::Long您可以轻松定义带有可变数量参数的命令行选项:

foo.pl --files a.txt             --verbose
foo.pl --files a.txt b.txt c.txt --verbose
Run Code Online (Sandbox Code Playgroud)

有没有办法直接使用Python的optparse模块?据我所知,nargsoption属性可用于指定固定数量的选项参数,我还没有在文档中看到其他替代方法.

python optparse

12
推荐指数
3
解决办法
9634
查看次数

什么Perl模块可用于验证子例程参数?

我正在寻找一个通用的模块来解决验证子程序和方法参数的苦差事.:我已经通过在CPAN各种可能性进行扫描Params::Validate,Params::Smart,Getargs::Mixed,Getargs::Long,和其他几个人.

任何有关这些或其他模块的利弊的信息将不胜感激.谢谢.

validation parameters perl

10
推荐指数
2
解决办法
1278
查看次数

当提供空列表时,itertools.product()会产生什么?

我想这是一个学术问题,但第二个结果对我来说没有意义.它不应该像第一个一样彻底空洞吗?这种行为的理由是什么?

from itertools import product

one_empty = [ [1,2], [] ]
all_empty = []

print [ t for t in product(*one_empty) ]  # []
print [ t for t in product(*all_empty) ]  # [()]
Run Code Online (Sandbox Code Playgroud)

更新

感谢所有的答案 - 非常有用.

维基百科对Nullary Cartesian产品的讨论提供了一个明确的陈述:

没有集合的笛卡尔积......是包含空元组的单例集.

这里有一些代码可以用来处理来自sth的深刻答案:

from itertools import product

def tproduct(*xss):
    return ( sum(rs, ()) for rs in product(*xss) )

def tup(x):
    return (x,)

xs = [ [1, 2],     [3, 4, 5]       ]
ys = [ ['a', …
Run Code Online (Sandbox Code Playgroud)

python python-itertools cross-product

10
推荐指数
1
解决办法
2140
查看次数

将参数传递给Perl子例程时,是否会影响数据复制性能?

我一直在研究处理大型固定宽度数据文件的几个Perl脚本,从每个数据记录中提取小的子串.我曾经想过,将子串的提取委托给方法调用会很昂贵,因为将数据记录复制到@_数组的开销很大.所以我运行以下来比较(a)直接调用substr(),(b)方法调用将数据记录作为字符串传递,以及(c)方法调用通过引用传递数据记录.

use strict;
use warnings;
use Benchmark qw(timethese);

my $RECORD = '0' x 50000;

my $direct = sub { my $v = substr( $RECORD, $_, 1) for 0..999 };
my $byVal  = sub { my $v = ByVal ( $RECORD, $_)    for 0..999 };
my $byRef  = sub { my $v = ByRef (\$RECORD, $_)    for 0..999 };

sub ByVal { return substr(   $_[0], $_[1], 1) }
sub ByRef { return substr(${$_[0]}, $_[1], 1) }

timethese( 10000, {
    direct    => …
Run Code Online (Sandbox Code Playgroud)

perl

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

是否可以配置'git status'以便它不提供帮助文本?

有没有办法配置Git从git status命令中删除死木?而不是这种怪异:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   README
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   FB.pm
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Foo.pl
Run Code Online (Sandbox Code Playgroud)

我只想要关键信息:

# …
Run Code Online (Sandbox Code Playgroud)

git dvcs

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

在Ruby中,如何控制Test :: Unit测试的运行顺序?

例如,当运行这些测试时,我想确保test_fizz始终先运行.

require 'test/unit'
class FooTest < Test::Unit::TestCase
    def test_fizz
        puts "Running fizz"
        assert true
    end

    def test_bar
        puts "Running bar"
        assert true
    end
end
Run Code Online (Sandbox Code Playgroud)

更新:我为什么要这样做?我的想法是某些测试的早期失败(那些测试更简单,更基本的方法)将使得更容易追踪系统中的问题.例如,bar取决于fizz正确工作的成功与否.如果fizz坏了,我想立即知道,因为没有必要担心bar,这也会失败,但测试结果的输出要复杂得多.

ruby unit-testing testunit

8
推荐指数
3
解决办法
3228
查看次数

在Perl中,生成getter和setter而不是硬编码是有缺点的吗?

在下面的示例模块中,通过将匿名子例程添加到符号表来生成getter和setter.在以这种方式创建方法之后,生成的代码在功能上是否等同于(在行为,速度等方面)具有手动编写的getter和setter的模块,或者这种方法是否具有某种固有的责任?(我已经做了一些基本的速度基准测试,到目前为止还没有发现任何差异.)

package Module;    
use strict;
use warnings;

BEGIN {
    my @attr = qw(author title number);
    no strict 'refs';
    for my $a (@attr){
        *{__PACKAGE__ . "::get_$a"} = sub { $_[0]->{$a}         };
        *{__PACKAGE__ . "::set_$a"} = sub { $_[0]->{$a} = $_[1] };
    }
}

sub new {
    my $class = shift;
    bless { @_ }, $class;
}

1;
Run Code Online (Sandbox Code Playgroud)

oop perl module class

7
推荐指数
3
解决办法
1709
查看次数

如何在Moose中最好地使用默认值触发访问器?

我有一种情况,我想缓存一些计算以供以后使用.假设我有一个允许值列表.由于我将要检查该列表中是否有任何内容,因此我希望将其作为效率和便利的哈希.否则我必须要grep.

如果我正在使用Moose,那么每次更改允许值列表时重新计算缓存都会很好.我能用触发器轻松做到这一点......

has allowed_values => (
    is          => 'rw',
    isa         => 'ArrayRef',
    trigger     => sub {
        my %hash = map { $_ => 1 } @{$_[1]};
        $_[0]->allowed_values_cache(\%hash);
    }
);

has allowed_values_cache => (
    is          => 'rw',
    isa         => 'HashRef',
);
Run Code Online (Sandbox Code Playgroud)

两者将保持同步......

$obj->allowed_values([qw(up down left right)]);
print keys %{ $obj->allowed_values_cache };   # up down left right
Run Code Online (Sandbox Code Playgroud)

现在让我们说我想要一个默认值allowed_values,简单的变化......

has allowed_values => (
    is          => 'rw',
    isa         => 'ArrayRef',
    trigger     => sub {
        my %hash = map { $_ => 1 …
Run Code Online (Sandbox Code Playgroud)

perl caching moose

7
推荐指数
1
解决办法
754
查看次数

Module :: Starter的manifest.t中的预期开发过程是什么?

Module :: Starter初始化项目时,它会创建一个名为的测试manifest.t.

#!perl -T

use strict;
use warnings;
use Test::More;

unless ( $ENV{RELEASE_TESTING} ) {
    plan( skip_all => "Author tests not required for installation" );
}

eval "use Test::CheckManifest 0.9";
plan skip_all => "Test::CheckManifest 0.9 required" if $@;
ok_manifest();
Run Code Online (Sandbox Code Playgroud)

当你运行测试时Build test,这是输出的一部分:

t\00-load.t ....... ok
t\boilerplate.t ... ok
t\manifest.t ...... skipped: Author tests not required for installation
Run Code Online (Sandbox Code Playgroud)

我从狭义上理解结果($ENV{RELEASE_TESTING}没有设置,所以测试被跳过),但我并没有完全掌握全局.什么是预期的开发过程?我认为运行测试以确认我的模块的清单是准确的是个好主意.我应该设置该环境变量吗?如果是这样,在开发过程中的哪个阶段?

testing perl module manifest

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