有没有办法在编译时而不是在运行时执行此条件?
"flag"永远是一个常数.A()和B()是宏.
#define DEMO(flag, p) if (flag) A(p); else B(p)
Run Code Online (Sandbox Code Playgroud)
我为什么要这样做?因为宏A可能存在也可能不存在,具体取决于底层硬件(宏A控制微控制器上的硬件).
如果使用"flag"调用DEMO并将其计算为 false,则无关紧要 - 它应该编译.但是如果使用"flag"调用DEMO并将其计算为 true,我希望看到构建错误.
添加:
预期用途是这样的:
DEMO(true, p); // this should cause a build error
DEMO(false, p); // this should compile OK
DEMO(0, p); // should be OK
DEMO(1 == 2, p); // should be OK
DEMO(1 == 1, p); // should cause a build error
Run Code Online (Sandbox Code Playgroud)
传递的参数始终是常量,但并不总是相同的常量.
是否有Pythonic方法来切割列表中的所有字符串?
假设我有一个字符串列表:
list = ['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)
我只想要每个字符串中的最后2个字符:
list2 = ['oo', 'ar', 'az']
Run Code Online (Sandbox Code Playgroud)
我怎么能得到它?
我知道我可以通过列表进行迭代并list[i][-2:]从每个列表中获取,但这似乎不是Pythonic.
不太常见,我的代码是:
def parseIt(filename):
with open(filename) as f:
lines = f.readlines()
result = [i.split(',') for i in lines[]]
Run Code Online (Sandbox Code Playgroud)
...除了我只想lines[i][20:]从每一行(而不是整行)分开.
如果密钥位于受限制的密钥列表中,我想要一个变量来获取字典中(唯一)True值的键名.
例如,我有一个Python字典:
cli = { 'foo':True, 'bar':False, 'auto':True, 'parse':False }
Run Code Online (Sandbox Code Playgroud)
和一份清单:
modes = [ 'auto', 'parse' ]
Run Code Online (Sandbox Code Playgroud)
列表中的其中一个键在字典中具有True值.我希望我的变量得到该密钥的名称.
(其他键也可能是True,但不在列表中 - 在示例中foo为True.)
在这个例子中,我想要一个变量mode来获取字符串'auto'.
现在我这样做(没有列表):
if cli['1day']: mode = '1day'
elif cli['auto']: mode = 'auto'
elif cli['forceall']: mode = 'forceall'
elif cli['updateonly']: mode = 'updateonly'
elif cli['force']: mode = 'force'
elif cli['reparse']: mode = 'reparse'
elif cli['parse']: mode = 'parse'
elif cli['mirror']: mode = 'mirror'
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法(理想情况下,使用列表并且没有每个密钥名称的冗余源代码)?
(FWIW,这是关于使用docopt解析模式.)
我正在尝试解析mbox格式的电子邮件假脱机.
我有代码执行此操作:
if string.find(line, 'Date: ') == 0:
try:
when = time.mktime(time.strptime(line[6:30], "%a, %d %b %Y %H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)
通常它似乎工作正常,除了当行='日期:星期六,2004年4月17日22:29:37 -0400 \n'它似乎给出了错误的结果(22:29:03而不是22:29:37 ).
这是我的pdb跟踪:
(Pdb) p line
'Date: Sat, 17 Apr 2004 22:29:37 -0400\n'
(Pdb) p time.strptime(line[6:30], "%a, %d %b %Y %H:%M:%S")
time.struct_time(tm_year=2004, tm_mon=4, tm_mday=17, tm_hour=22, tm_min=29, tm_sec=3, tm_wday=5, tm_yday=108, tm_isdst=-1)
(Pdb)
Run Code Online (Sandbox Code Playgroud)
结果似乎是34秒.我究竟做错了什么?
我是个新手.我在github.com上设置了一个具有双因素身份验证的帐户.
我可以在MINGW32 bash shell中使用它,但我正在尝试将它与Cygwin一起使用.
这就是我得到的:
dave@ENOUGH /cygdrive/u/testG
$ git clone https://github.com/nerdfever/<project>
Cloning into '<project>'...
Username for 'https://github.com':
Password for 'https://Nerdfever@github.com':
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/nerdfever/<project>/'
Run Code Online (Sandbox Code Playgroud)
我在Cygwin git中设置了user.name和user.email配置.
我需要做些什么来完成这项工作?
我试图从Python调用'sed'并且通过subprocess.check_call()或os.system()传递命令行有麻烦.
我在Windows 7上,但使用Cygwin的'sed'(它在路径中).
如果我从Cygwin shell中执行此操作,它可以正常工作:
$ sed 's/&nbsp;/\ /g' <"C:foobar" >"C:foobar.temp"
Run Code Online (Sandbox Code Playgroud)
在Python中,我已经获得了我在"名称"中使用的完整路径名.我试过了:
command = r"sed 's/&nbsp;/\ /g' " + "<" '\"' + name + '\" >' '\"' + name + '.temp' + '\"'
subprocess.check_call(command, shell=True)
Run Code Online (Sandbox Code Playgroud)
所有连接都是为了确保我在输入和输出文件名周围有双引号(如果Windows文件路径中有空格).
我也试过用以下代替最后一行:
os.system(command)
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我都会收到此错误:
sed: -e expression #1, char 2: unterminated `s' command
'amp' is not recognized as an internal or external command,
operable program or batch file.
'nbsp' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
然而,正如我所说,从控制台可以正常工作.我究竟做错了什么?
在GCC C中,有没有办法将数据推送/弹出到C返回堆栈?
我不是在谈论实现自己的堆栈(我知道如何做到这一点); 我的意思是使用现有的C返回堆栈来显式推送/弹出参数(当然,在同一级别的大括号内).
例如,类似于:
extern int bar;
void foo(void) {
PUSH(bar);
bar = 12;
doSomething(); // that depends on the value of bar
bar = POP(); // restore original value of bar
}
Run Code Online (Sandbox Code Playgroud)
如果有任何简单的方法可以做到这一点,我认为这将是一个更明确的替代方案,明确使用像"oldBar"这样的局部变量.
有没有Pythonic方法来创建一个类似元组的对象(它像一个元组),但有其他属性?特别是有__name__属性?
现在我做这样的事情:
foo = ( 1, 9, (12.5, "bar"), "baz" )
foo.__name__ = 'foo'
Run Code Online (Sandbox Code Playgroud)
但我认为这不是非常Pythonic.我无法将foo(带有元组赋值的第一行)传递给函数,并让函数创建__name__.
什么是Pythonic方式?
我正在寻找类似的东西:
bar = new_kind_of_thing(( 1, 9, (12.5, "floob"), "baz" ))
print(bar[2])
print(bar[0])
print(bar.__name__)
Run Code Online (Sandbox Code Playgroud)
那输出:
(12.5, 'floob')
1
'bar'
Run Code Online (Sandbox Code Playgroud)