我想转换一个字符串,如下所示:
' 1 , 2 , , , 3 '
Run Code Online (Sandbox Code Playgroud)
进入非空元素列表:
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)
我的解决方案是这个列表理解:
print [el.strip() for el in mystring.split(",") if el.strip()]
Run Code Online (Sandbox Code Playgroud)
只是想知道,有没有一种漂亮的,pythonic的方式来写这种理解而不需要el.strip()两次打电话?
Lua切换setfenv()到什么是最重要的_ENV?
在各种"What's New"来源中,这一举动被认为是Lua版本5.1和5.2之间最重要的变化之一.
但是,PIL和其他地方给出的示例可以修改为以下内容:
-- Lua 5.1 -- Lua 5.2
function myfunc() function myfunc()
setfenv(1, {}) _ENV = {}
end end
Run Code Online (Sandbox Code Playgroud)
到目前为止,我们在这里获得的是我们已经节省了五个关键击球.(我相信情况与C方面差别不大.)而且,如果我做对了,setfenv()可以从函数的外部和内部使用,而_ENV只能从函数内部访问.(当然,在使用C API时,可以直接访问upvalues.)从我写的内容来看,5.2方法似乎不太灵活.
在他的Lua 5.2的新奇事物中,罗伯托写道:
"作为一种语法糖,它比旧环境简单得多"
简约在哪里?我忽略了什么?
我相信这个主题值得在5.2用户手册中给出更好的处理.
以下行为的原因是什么?
class BoolWrapper
{
public:
BoolWrapper(bool value) : value(value) {}
operator bool() const { return value; }
operator int() const { return (int) value; }
private:
bool value;
};
BoolWrapper bw(true);
if (bw) { ... } // invokes operator bool()
if (bw == true) { ... } // invokes operator int() -- why?
Run Code Online (Sandbox Code Playgroud)
这种行为有望吗?(使用GCC 4.7.2.)
有些来源(书籍,在线资料)解释了extern如下用法:
extern int i; // declaration - has 'extern'
int i = 1; // definition - specified by the absence of 'extern'
Run Code Online (Sandbox Code Playgroud)
并且有些源支持以下语法:
extern int i; // declaration
extern int i = 1; // definition - specified by the equal sign
// Both marked with 'extern'
Run Code Online (Sandbox Code Playgroud)
我的问题是-这是一个ç与C++的区别,或者是一个预ANSI与ANSI的做法?
现在,更实际的问题:
使用第二种语法,我想创建一个全局对象(从每个编译单元可见).构造函数不带参数,因此无论是括号还是等号都不是必需的.
extern MyClass myobject;
Run Code Online (Sandbox Code Playgroud)
现在,编译器如何区分声明和定义?
编辑:回到学校,我习惯了第一种语法(Borland C).后来我使用了一个编译器(可能是GCC的一些古老版本)拒绝编译没有'extern'的定义.这让我感到困惑.
引用海湾合作委员会文件(强调我的):
所述的malloc属性用来告诉仿佛任何非空指针返回不能别名任何其它有效指针的功能可被处理编译时该函数返回与该存储器有未定义的内容.这通常会改善优化.具有此属性的标准函数包括
malloc和calloc.realloc类似函数没有此属性,因为指向的内存没有未定义的内容.
我有以下代码:
struct buffer {
size_t alloc; // Allocated memory in bytes
size_t size; // Actual data size in bytes
char data[]; // Flexible array member
};
#define ARRAY_SIZE <initial_value>
buffer *buffer_new(void) __attribute__((malloc))
{
struct buffer *ret;
ret = malloc(sizeof(struct buffer) + ARRAY_SIZE);
if (!ret)
fatal(E_OUT_OF_MEMORY);
ret->alloc = ARRAY_SIZE;
ret->size = 0;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
现在,我在这里有点纳闷:虽然我没有初始化的data成员,我仍然设置alloc和size字段以它们各自的值.我仍然可以将此分配的段视为"未定义的内容"并使用malloc属性吗?
可能重复:
C++中的内联函数
如果我在其头文件中完全实现一个类,编译器会做什么?一个典型的例子如下:
class MyException
{
public:
explicit MyException(const char* file, int line) file(file), line(line) {};
const char* getFile() const { return file };
int getLine() const { return line };
private:
const char* const file;
const int line;
};
Run Code Online (Sandbox Code Playgroud)
我的目的是使用这样的类:throw MyException(__FILE__, __LINE__).
我将此头文件包含在每个.cpp文件中.我想编译器将按照定义的次数编译该类,并将(相同的)机器代码包含在它生成的每个目标文件中.现在,链接器会做什么?我尝试了一个更简单的例子(没有所有那些讨厌const的东西)并且编译得很好.
会发生什么,如果不是简单的类,我在头文件中实现了一个三屏长的C函数?最后一个问题,我应该将我的例子分成.h和.cpp文件吗?
在我们公司,我们使用 Mako 模板来生成很多文件:HTML、XML、TXT、CSV...
但是,配置 PyCharm 以正确识别嵌入 Python 的文件类型似乎并不容易。因此,PyCharm 无法突出显示代码,有时也不会在这些文件中搜索(“grep”)。
想到了两个扩展 ->文件类型映射解决方案,它们都没有完全解决问题:
.html、.xml、.txt等扩展名,将这些扩展名分配给 PyCharm Mako 文件类型。这使得 PyCharm 识别(并突出显示)嵌入的 Python,但由于所有文件类型都合并到一个Mako File Type 中,PyCharm 变得混乱并且不知道如何突出显示这些文件中包含的 HTML/XML 标记。.mako扩展与嵌入式Python和文件.html,.xml扩展名“普通”文件。这样,PyCharm 将不知道如何突出显示带有.mako扩展名的文件中包含的标记。最好的解决办法是创建一个计划.xml.mako,.html.mako等扩展。这将使意图明确,不幸的是,我没有找到如何在 PyCharm 中配置这样一个方案的方法。
欢迎任何建议。
可能重复:
字符串文字是否为常量?
以下是否在ANSI C中有效?
#include <stdio.h>
/* This returns "Hans" if arg != 0, "Gretel" if arg == 0 */
char* foo(int arg)
{
return arg ? "Hans" : "Gretel";
}
int main()
{
char* p_ch;
p_ch = foo(1);
printf("%s\n", p_ch);
p_ch = foo(0);
printf("%s\n", p_ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该代码在GCC/Linux下编译并运行良好.
MinGW/Windows说:
invalid conversion from `const char*' to `char*'
Run Code Online (Sandbox Code Playgroud)
MS Visual C/C++ 2008对代码很好.
char*变量分配给文本字符串,而不是在初始化时吗?static位置类.这是否意味着它们在定义的函数之外是不可见的?const类型到非const对应的转换何时无效?帧和执行级别之间有什么区别?
我写了一个小例子来找出答案.我意识到每次调用proc时级别编号都会增加.
另一方面,帧编号每次递增
出于这个原因,我开始将层次视为帧的子集.现在我正在调试一些现实代码,我意识到级别数可以增加,而帧数也不会增加.如何理解这些东西?
这是代码
with open(myfile) as f:
data = f.read()
process(data)
Run Code Online (Sandbox Code Playgroud)
相当于这个
try:
f = open(myfile)
data = f.read()
process(f)
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
还是以下一个?
f = open(myfile)
try:
data = f.read()
process(f)
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
本文:http://effbot.org/zone/python-with-statement.htm建议(如果我理解正确的话)后者是真的.但是,前者对我来说更有意义.如果我错了,我错过了什么?
我有一个简单的bash脚本:
#!/bin/bash
if [ -n "abcd" ]; then
echo "a non-empty string"
else
echo "an empty string"
fi
Run Code Online (Sandbox Code Playgroud)
脚本运行正常:
$ bash test.sh
non-empty string
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试源它,产生一个奇怪的错误信息:
$ source test.sh
bash: ./test.sh: line 3: syntax error near unexpected token `then'
bash: ./test.sh: line 3: `if [ -n "abcd" ]; then
Run Code Online (Sandbox Code Playgroud)
欢迎任何建议.任何包含该if命令的脚本都会出现问题,包括Fedora /etc/bashrc和我的其他脚本.
$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud) 如果不共享完整的存储库,这个问题有点难以描述,但我会尝试。
我意识到我在最后一次提交中犯了一个错误。我决定使用交互式变基来修复它。
git rebase -i @~~
Run Code Online (Sandbox Code Playgroud)
现在我进入 Vim,在其中更改第一行中的命令:
pick 80c90b55788 First commit message <-- change 'pick' to 'edit'
pick 712be094f96 Second commit message
Run Code Online (Sandbox Code Playgroud)
Git 响应如下:
Stopped at 80c90b55788... First commit message
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
我修改了需要修复的发现(我删除了有问题的行)。然后我继续:
git add <file>
git commit --amend
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
现在 git 检测到我编辑的文件中存在冲突。(连续的两行被删除 - 一行最初是在第二次提交中,另一行是我在上一步中删除的。)对我来说,这一步看起来是多余的,因为 Git 基本上做了正确的事情 - 它已经正确合并了更改。但它正在等待我上演改变。
在不对文件进行任何修改的情况下,我再次执行以下操作:
git add <file>
git commit --amend
git rebase …Run Code Online (Sandbox Code Playgroud)