每当我通过其键遍历哈希,然后打印每个值时,我得到"在连接(.)或字符串...中使用未初始化的值"警告.即使哈希显然已经预先初始化了.打印我想要的输出,但我仍然想知道为什么会导致警告,特别是直接访问值(在循环外部)没有警告的情况下工作.
#!/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值之间有区别?
谢谢!
是否有相同功能PyMongo
或mongoengine
到MongoDB的mongodump
?我似乎无法在文档中找到任何内容.
使用案例:我需要定期备份远程mongo数据库.本地机器是没有安装mongo的生产服务器,我没有管理员权限,所以我不能subprocess
用来打电话mongodump
.我可以在virtualenv上本地安装mongo客户端,但我更喜欢API调用.
非常感谢 :-).
考虑以下:
%.foo: %.bar
echo $< > $@
Run Code Online (Sandbox Code Playgroud)
假设我们有一个文件1.bar
,执行的命令很简单echo 1.bar > 1.foo
.但是,当%
包含路径而不仅仅是文件名时,它开始变得挑剔.我的问题是我想要添加另一条路径%.bar
,模式完全被破坏了.即,当%.bar
是nice/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
有什么方法可以根据具体规则关闭它吗?
我的许多脚本解析块内的命令行参数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)
多谢 :-)。