例如,如何避免两次写'func_name'?
#ifndef TEST_FUN
# define TEST_FUN func_name
# define TEST_FUN_NAME "func_name"
#endif
Run Code Online (Sandbox Code Playgroud)
我想遵循单点真相规则.
C预处理器的版本:
$ cpp --version
cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用strptime方法将格式为"2012-07-24T23:14:29-07:00"的时间戳转换为python中的datetime对象.问题在于结束时的时间偏移(-07:00).没有偏移我可以成功做到
time_str = "2012-07-24T23:14:29"
time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
但随着我尝试的抵消
time_str = "2012-07-24T23:14:29-07:00"
time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S-%z').
Run Code Online (Sandbox Code Playgroud)
但是它给出了一个Value错误,说"z"是一个糟糕的指令.
任何解决方案的想法?
在Python 2.x中使用'file-like'对象:
sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)
Run Code Online (Sandbox Code Playgroud)
如何在Python 3中做同样的事情?
如何编写这个Python 2.x代码的等价物:
def write(file_, bytes_):
file_.write(bytes_)
Run Code Online (Sandbox Code Playgroud)
注意:sys.stdout在语义上并不总是文本流.有时将它视为字节流可能是有益的.例如,在远程机器上制作dir /的加密存档:
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,没有必要使用Unicode.
有没有一种被广泛使用的算法,该算法的时间复杂度更差比其它已知的算法,但它是一个更好的选择,所有的实际情况(更糟糕的复杂性,但更好的,否则)?
可接受的答案可能是以下形式:
有算法
A和B具有O(N**2)和O(N)时间复杂性相应,但B具有这样的大常数,它没有优于A为小于一个数量在宇宙原子的输入.
答案中的示例突出显示:
单纯形算法 - 最坏情况是指数时间 - 与凸优化问题的已知多项式时间算法相比.
中位数算法的中位数 - 最坏情况O(N**2)与已知O(N)算法.
回溯正则表达式引擎 - 最坏情况指数与基于O(N)Thompson NFA的引擎.
所有这些示例都利用了最坏情况和平均情况.
有关:
"更糟糕的是更好"的崛起.(出于这个问题的目的,"更糟的是更好"这个短语用于比文章更窄的(即 - 算法时间复杂度)意义上)
ABC集团力求完美.例如,他们使用基于树的数据结构算法,这些算法被证明是渐近大型集合的最佳选择(但对于小型集合来说并不是那么好).
如果没有能够存储这些大型集合的计算机(换句话说,大型集合在这种情况下不够大),这个例子就是答案.
用于方阵乘法的Coppersmith-Winograd算法是一个很好的例子(它是最快的(2008),但它不如更差的算法).还有其他人? 来自维基百科的文章:"它并没有在实践中使用,因为它只为矩阵提供了一个优势,使它们无法被现代硬件处理(Robinson 2005)."
我有一个转储大量输出的程序,我希望其中一些输出能够真正脱颖而出.一种方法是使用ascii art渲染重要文本,例如这个Web服务就是这样:
# # ## ##### # # # # # ####
# # # # # # ## # # ## # # #
# # # # # # # # # # # # # #
# ## # ###### ##### # # # # # # # # ###
## ## # # # # # ## # # ## # #
# # # # # # # # …Run Code Online (Sandbox Code Playgroud) 有PRIu128,其行为类似于PRIu64来自<inttypes.h>:
printf("%" PRIu64 "\n", some_uint64_value);
Run Code Online (Sandbox Code Playgroud)
或者手动逐位转换:
int print_uint128(uint128_t n) {
if (n == 0) return printf("0\n");
char str[40] = {0}; // log10(1 << 128) + '\0'
char *s = str + sizeof(str) - 1; // start at the end
while (n != 0) {
if (s == str) return -1; // never happens
*--s = "0123456789"[n % 10]; // save last digit
n /= 10; // drop it
}
return printf("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)
是唯一的选择吗? …
我们给出了两个小写拉丁字母字母序列.它们的长度相同,并且具有相同数量的给定类型的字母(第一个具有与第二个相同数量的t,依此类推).我们需要找到将第一个序列转换为第二个序列所需的最小交换次数(通过"交换",我们的意思是改变两个相邻字母的顺序).我们可以安全地假设每两个序列可以相互转换.我们可以用蛮力做到这一点,但序列太长了.
输入:
序列的长度(至少2,最多999999),然后是两个序列.输出:
一个整数,表示序列变为相同所需的交换数.示例:
{5,aaaaa,aaaaa}应输出{0},
{4,abcd,acdb}应输出{2}.
我想到的第一件事是bubblesort.我们可以简单地对每个交换的序列进行计数.问题是:a)它是O(n ^ 2)最坏情况b)我不相信它会给我每个案例的最小数字......即使是优化的bubblesort似乎也没有做到这一点.我们可以实施鸡尾酒种类来解决海龟的问题 - 但它会给我最好的表现吗?或者也许有更简单/更快的东西?
这个问题也可以表述为:当允许的唯一操作是换位时,我们如何确定两个字符串之间的编辑距离?
我想从执行Test_Pipe.py输出,我尝试在Linux上使用代码,但它没有用.
Test_Pipe.py
import time
while True :
print "Someting ..."
time.sleep(.1)
Run Code Online (Sandbox Code Playgroud)
Caller.py
import subprocess as subp
import time
proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE)
while True :
data = proc.stdout.readline() #block / wait
print data
time.sleep(.1)
Run Code Online (Sandbox Code Playgroud)
该行proc.stdout.readline()被阻止,因此没有数据打印出来.
我正在尝试将ISO转换为datetime使用以下代码:
dt = datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00",
"%Y-%m-%dT%H:%M:%S.%f%z")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
Run Code Online (Sandbox Code Playgroud)
将格式上面的ISO字符串转换为对象的最佳方法是什么datetime?我使用的是Python 2.7.6版.