我正在努力学习Python,我正在密切关注常见的编码标准.这可能看起来像是一个毫无意义的挑剔问题,但我正在努力专注于我学习的最佳实践,所以我不必忘记任何"坏"习惯.
我看到两种常用的方法来初始化dict:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Run Code Online (Sandbox Code Playgroud)
哪个被认为是"更加pythonic"?你用哪个?为什么?
另一个问题让我想到了不同的代码重用方法:usevs. requirevs.do
我在这里看到很多帖子,其中的问题集中在require加载和执行代码的使用上.在我看来,这显然是一种不好的做法,但我没有找到任何有关我能指出的问题的好资源.
perlfaq8涵盖了use和之间的差异require,但它没有提供任何关于偏好的建议(从5.10开始 - 在5.8.8中有一些建议支持使用).
这个话题似乎缺乏讨论.我有几个问题需要讨论:
use ModuleName;require ModuleName;require 'file.pl';do 'file.pl';require ModuleName和之间有什么区别require "file.pl"?require "file.pl"?为什么或者为什么不?你如何将所有匹配的行放入缓冲区?
给出如下文件:
match 1
skip
skip
match 2
match 3
skip
Run Code Online (Sandbox Code Playgroud)
我希望能够发出一个命令来将所有与模式匹配的行(/ ^匹配/用于此示例)放入单个缓冲区中,以便我可以将其放入另一个文档或摘要或其他任何内容中.
该命令应该在缓冲区中结束:
match 1
match 2
match 3
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是尝试:
:g/^match/y
Run Code Online (Sandbox Code Playgroud)
但我只是得到了最后一场比赛.这是有道理的,因为:g命令有效地重复y每个匹配行.
也许有一种方法可以添加缓冲,而不是覆盖它.我找不到它.
我还没有想出一个令人满意的方法来管理我的Perl应用程序的开发,构建和部署.我想听听你是如何解决这个问题和/或你想要在你现在没有的应用程序构建系统中拥有的.
请描述您的应用程序类型(它是一个Web应用程序,它是在服务器上运行,还是使用PAR或PerlApp捆绑它,以便您可以在perlless系统上运行).
构建系统应提供的关键事项:
@INC使用适当的目录值执行perl应该很容易.make test或类似的命令,可以很容易地在整个应用程序中进行全局测试.在Perlmonks交叉发布.
在Perl中,有没有办法强制所有致命错误显示像Carp::confess产生的堆栈回溯?
我知道你可以use warnings FATAL => 'all';对目前的词汇范围发出致命警告.
此外,可以使用$SIG{__WARN__} = sub { CORE::die(@_) };所有警告致命(没有本地化SIGWARN处理程序).
有没有干净的方法来做到这一点,还是我需要调整SIGDIE?如果我写一个SIGDIE处理程序,获取跟踪的最佳方法是什么?
理想的解决方案适用于标准测试库Test::More和朋友.
更新: Mark Johnson建议使用SIGDIE处理程序进行调用Carp::confess.它工作得很好.这是代码:
use Carp;
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
Run Code Online (Sandbox Code Playgroud) 源过滤器是坏的并且不应该在生产代码中使用是"常识" .
在回答类似但更具体的问题时,我找不到任何好的参考资料,清楚地解释了为什么过滤器是坏的以及何时可以安全使用.我想现在是时候创造一个了.
我怎样才能将.scss文件包含在另一个.scss文件中?我试图在一个文件中写这个:app.scss:
@include('buttons');
@include('dropzone');
body {
background: $primaryColor;
overflow-x: hidden; /*Clip the left/right edges of the content inside the <div> element - if it overflows the element's content area: */
height: 100%; /* Cover all (100%) of the container for the body with its content */
padding-top: 70px;
} /* more css code here */
Run Code Online (Sandbox Code Playgroud)
它会返回一个错误: invalid css after @import
我尝试在主scss文件中包含2个其他scss 文件,因此它css最终将被编译为一个文件.这怎么可能?
我最近由我公司的一位高级开发人员审核了我的代码.他批评我的设计使用了太多的课程.我很想听听你的反应.
我的任务是创建一个服务,该服务生成一个xml文件,因为它操作了3个其他xml文件.我们将这些命名为aaa.xml,bbb.xml和ccc.xml.该服务分两个阶段进行.在第一阶段,它会针对bbb.xml清理aaa.xml.在第二阶段,它将第一阶段的产品与ccc.xml合并以产生最终结果.
我选择了一个包含三个类的设计:一个XmlService类,它使用了另外两个类,一个scrubber类和一个merger类.我保持擦洗和合并类是分开的,因为这两个类都很大并且具有不同的逻辑.
我认为我的方法很好,因为它让我的课程变得小而有凝聚力.我的方法也有助于控制我的测试类的大小.
高级开发人员断言,清理和合并类只能由XmlService类使用,因此应该是它的一部分.他觉得这会使XMLService具有凝聚力,这就是他所说的具有凝聚力的意思.他还认为以这种方式分手,会使他们松散凝聚力.
具有讽刺意味的是,我试图打破这些课程以达到凝聚力.你怎么看?谁对或错?我们都对吗?谢谢你的建议.
我只是在看有人可以告诉我如何创建一个目录内容数组?.不出所料,提供文件全球作为答案.让我感到惊讶的是这篇帖子推荐使用glob()而不是<*>.
我用的<*>是因为这是我很久以前学到的,从未想过它.这不是一个好理由.
您喜欢使用什么语法进行通配,为什么?
我读过几次unpack()比这更快substr(),特别是随着子串数量的增加.但是,这个基准建议不然.我的基准测试是否存在缺陷,或者是unpack()旧版Perl的保留所谓的性能优势?
use strict;
use warnings;
use Benchmark;
my ($data, $format_string, $n_substrings);
my %methods = (
unpack => sub { return unpack $format_string, $data },
substr => sub { return map {substr $data, $_, 1} 0 .. $n_substrings - 1 },
);
for my $exp (1 .. 5){
$n_substrings = 10 ** $exp;
print $n_substrings, "\n";
$format_string = 'a1' x $n_substrings;
$data = 9 x $n_substrings;
Benchmark::cmpthese -2, \%methods;
}
Run Code Online (Sandbox Code Playgroud)
输出(在Windows上):
10
Rate unpack substr …Run Code Online (Sandbox Code Playgroud)