在Python中,如果您在未调用的情况下打开文件close(),或者关闭文件但未使用try- finally或" with"语句,这是一个问题吗?或者它是否足以作为编码实践依赖Python垃圾收集来关闭所有文件?例如,如果有人这样做:
for line in open("filename"):
# ... do stuff ...
Run Code Online (Sandbox Code Playgroud)
...这是一个问题,因为文件永远不会被关闭,并且可能发生一个阻止它被关闭的异常?或者它肯定会在for声明结束时关闭,因为文件超出了范围?
我希望我的Python代码在运行代码的过程中使用code.interact()之类的东西启动Python交互式控制台(REPL).但是code.interact()启动的控制台没有看到当前命名空间中的变量.我该怎么做:
了mystring = "你好"
code.interact()
...然后在启动的交互式控制台中,我应该能够输入mystring并获得"hello".这可能吗?我需要将code.interact()的"local"参数设置为什么?这会是什么?该怎么称呼它?
我知道编译时包含在可执行文件中的代码可以来自目标文件(.o文件)和静态链接库(.lib/.a文件).从根本上和概念上讲这两者之间的区别是什么?为什么"目标代码"和"静态链接库"之间存在不同的概念?各有哪些优点和缺点,为什么使用一个而不是另一个?静态链接库是否可以从目标文件中生成,反之亦然,是否可以从静态链接库中创建目标文件?
我想知道是否可以在 Windows 上直接调试 Cython 代码,而不必在中间 C 文件中调试?目前,当我构建 Cython 扩展模块时,我获得了一个 .PDB 文件(Visual Studio 调试符号)和“cython_debug”文件夹(Cygdb 符号)。但是,似乎我无法使用 Cygdb(因此无法使用“cython_debug”文件夹),因为 GDB 无法在 Python 中找到任何调试符号,我认为这反过来是因为 Python 是使用 Visual Studio 构建的( MSVC) 工具集在 Windows 上。目前,我能够调试 Cython 扩展的唯一方法是使用 Visual Studio 调试器中的中间 C 代码,这是大量代码,需要了解从 Cython 到 C 的转换。为了在 Cython 代码层本身进行调试,我需要做什么?这是否需要使用 GNU GCC 工具集以与公开发布的 Python 版本不兼容的方式构建 Python 本身——以及我正在使用的所有 3rd-party Python 库?或者有什么方法可以在 MSVC 构建中获得必要的 GDB 符号?
Cygdb——以及使用“cython_debug”文件夹的系统——是否只设计用于Linux而不是Windows?
似乎Perl只能将字符串作为哈希的键.(在某个版本的Perl中是否已经更改了?)仅限于能够使用字符串作为键是非常有限的.如果我想要一个对象或一个数组作为关键怎么办?在Python中,很容易使用数组,元组和其他可以比较的对象,如dict键.Perl确实能够比较数组之类的东西是否相等,所以我不明白为什么它们不能用作映射类型键.
是不是有办法在Perl中使用任何键类型?有没有提供此功能的模块?
在Java中,我希望能够读取PDF文件,测试它是否兼容PDF/A(PDF for Archiving),如果不兼容,则将文件转换为PDF/A。
我可能更喜欢 Apache PDFBox,因为我已经在该 API 中做了一些事情,但我也愿意接受其他 API。
如何在Windows上从源代码构建GDB(GNU调试器)?我需要构建它以便使用Python支持进行构建.我不能使用与Cygwin一起发布的那个,因为它在解释Windows上的反斜杠时遇到问题.构建需要哪些工具链--GnuWin32,MinGW等?有人可以提供有关如何执行此操作的分步说明吗?
在 Java 中,我想使用正则表达式解析格式为“MM/DD/YYYY”的日期字符串。我尝试用括号创建捕获组,但它似乎不起作用。它只返回整个匹配的字符串——而不是“MM”、“DD”和“YYYY”组件。
public static void main(String[] args) {
Pattern p1=Pattern.compile("(\\d{2})/(\\d{2})/(\\d{4})");
Matcher m1=p1.matcher("04/30/1999");
// Throws IllegalStateException: "No match found":
//System.out.println("Group 0: "+m1.group(0));
// Runs only once and prints "Found: 04/30/1999".
while (m1.find()){
System.out.println("Found: "+m1.group());
}
// Wanted 3 lines: "Found: 04", "Found: 30", "Found: 1999"
}
Run Code Online (Sandbox Code Playgroud)
group带有参数 ( m1.group(x))的 " " 函数似乎根本不起作用,因为无论我给它什么索引,它都会返回异常。循环find()'s 仅返回单个完整匹配“04/30/1999”。正则表达式中的括号好像完全没用!
这在 Perl 中很容易做到:
my $date = "04/30/1999";
my ($month,$day,$year) = $date =~ m/(\d{2})\/(\d{2})\/(\d{4})/;
print "Month: ",$month,", day: ",$day,", year: ",$year;
# Prints:
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个 Perl 脚本来执行预排序目录遍历。我需要它来获取给定目录的所有子目录,包括隐藏的子目录。不幸的是,当我尝试以这种方式进行通配时:
<$dir/* $dir/.*>
... 原因 ”。” 和“..”也会被返回,这会扰乱我的函数,因为它会导致无限循环。如何仅获取$dir 的子文件夹(常规和隐藏),而不获取当前或上层目录?
例如,如果我的文件夹是“dir”并且它包含以下子目录:
你好
.hiddendir
“名称中带有空格的目录”
“名称中带有空格的.hidden目录”
dir2
...我想得到一个只有这些而不是“.”的数组。或者 ”..”。
我不在乎文件是否也出现,因为我稍后使用“if (-d $dir)”。有没有办法可以测试通配数组的元素是否等于当前目录或父目录,以便我可以排除它们?
谢谢
1)在C++中,提供的初始化列表{}是一样的{0}吗?声明是:
int x[10]={};
int x[10]={0};
两个都生成相同的数组,所有元素都初始化为0?
2)在NULL不为0的系统/编译器上,指针数组的默认值初始化是将元素设置为NULL还是0?应该/可以使用以下哪些陈述?
int *x[10]={NULL};
int *x[10]={0};
int *x[10]={};
如何new使用空括号的值初始值设定项 - 它们是使用NULL还是0作为初始值设定项?
int **x=new int*[10]();
我有一个数组引用列表:
my @a = ([1,2],[3,4])
如何使用@a((1,2))中的第一个数组获得一个名为"@b"的数组?我尝试了各种解除引用的组合,但它们似乎都会抛出错误.
perl ×3
c++ ×2
debugging ×2
java ×2
python ×2
arrays ×1
associative ×1
build ×1
c ×1
console ×1
cython ×1
default ×1
dereference ×1
directory ×1
file ×1
gdb ×1
glob ×1
hash ×1
hidden ×1
initializer ×1
linkage ×1
list ×1
mapping ×1
namespaces ×1
object-files ×1
parsing ×1
pdf ×1
pdfa ×1
pdfbox ×1
regex ×1
static ×1
toolchain ×1
traversal ×1
types ×1
variables ×1
windows ×1