小编Gx1*_*TDa的帖子

Perl - 为什么通过键遍历哈希然后打印每个值会导致未初始化的警告?

每当我通过其键遍历哈希,然后打印每个值时,我得到"在连接(.)或字符串...中使用未初始化的值"警告.即使哈希显然已经预先初始化了.打印我想要的输出,但我仍然想知道为什么会导致警告,特别是直接访问值(在循环外部)没有警告的情况下工作.

#!/usr/bin/perl
use warnings;
use strict;

my %fruit = ();
%fruit = ('Apple' => 'Green', 'Strawberry' => 'Red', 'Mango' => 'Yellow');

#works
print  "An apple is $fruit{Apple} \n";

#gives warnings
foreach my $key (%fruit)
{
  print "The color of $key is $fruit{$key} \n";
}

#also gives warnings
foreach my $key (%fruit)
{
    my $value = $fruit{$key};
    print "$value \n";
}
Run Code Online (Sandbox Code Playgroud)

考虑上面的代码.我想perl看到了第一次打印和第二次打印之间的差异.但为什么?为什么检索循环外部的散列值和检索循环内部的has值之间有区别?

谢谢!

perl hash foreach

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

PyMongo/Mongoengine相当于mongodump

是否有相同功能PyMongomongoengine到MongoDB的mongodump?我似乎无法在文档中找到任何内容.

使用案例:我需要定期备份远程mongo数据库.本地机器是没有安装mongo的生产服务器,我没有管理员权限,所以我不能subprocess用来打电话mongodump.我可以在virtualenv上本地安装mongo客户端,但我更喜欢API调用.

非常感谢 :-).

python mongodb pymongo mongoengine

7
推荐指数
2
解决办法
6881
查看次数

如何在GNU Make模式规则中包含路径前缀

考虑以下:

%.foo: %.bar
    echo $< > $@ 
Run Code Online (Sandbox Code Playgroud)

假设我们有一个文件1.bar,执行的命令很简单echo 1.bar > 1.foo.但是,当%包含路径而不仅仅是文件名时,它开始变得挑剔.我的问题是我想要添加另一条路径%.bar,模式完全被破坏了.即,当%.barnice/path/1.bar,这成为不可能:

%.foo: /project/something/%.bar
    echo $< > $@
Run Code Online (Sandbox Code Playgroud)

这将运行,但它执行echo nice/path//project/something/1.bar > 1.foo而不是echo /project/something/nice/path1.bar > 1.foo

这样做的原因在于它的模式规则是如何制作的.来自文档:

当目标模式不包含斜杠(通常不包含斜杠)时,文件名中的目录名将从文件名中删除,然后再与目标前缀和后缀进行比较.[...]仅为了查找要使用的隐式规则而忽略目录,而不是在该规则的应用程序中.因此,'e%t'匹配文件名src/eat,'src/a'作为词干.当先决条件变为文件名时,来自词干的目录将添加到前面,而词干的其余部分将替换为'%'.具有先决条件模式'c%r'的词干'src/a'给出文件名src/car

有什么方法可以根据具体规则关闭它吗?

makefile gnu-make

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

如何部分禁用/忽略 pylint 规则?

我的许多脚本解析块内的命令行参数if __name__ == '__main__'。我在那里使用“正常”变量名称,例如parser. 由于这不在任何函数中,因此 pylint 将抛出C0103: invalid constant name <variable>。由于我并没有真正使用这些变量作为常量(只是解析参数),所以我发现在这里使用全大写有点奇怪。

有没有办法部分禁用 pylint 规则,以便在 if __name__ == '__main__'块内时不抛出 C0103?

我想要的是以下内容:

import argparse

PI = 3.14 # <--- should give no C0103
e = 2.71 # <-- should throw C0103

if __name__ == '__main__':
    parser = argparse.ArgumentParser() # <-- should give NO C0103
    PARSER = argparse.ArgumentParser() # <-- should optionally give C0103 (wrong variable name)
Run Code Online (Sandbox Code Playgroud)

多谢 :-)。

python pep8 pylint

4
推荐指数
1
解决办法
2258
查看次数

标签 统计

python ×2

foreach ×1

gnu-make ×1

hash ×1

makefile ×1

mongodb ×1

mongoengine ×1

pep8 ×1

perl ×1

pylint ×1

pymongo ×1