对于一些基地.基数1甚至.某种复杂的替代.
此外,当然,在现实生产代码中这样做并不是一个好主意.我只是出于好奇而被问到.
有什么理由我从未在C程序中看到main的原型声明,即:
int main(int argc, char* argv[]);
int main(int argc, char* argv[])
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎总是不一致..
我需要在我的仓库中获得一些与仓库基础无关的差异,而是相对于给定的基础或给定路径.
我默认得到:
git diff
diff --git a/path/to/file b/path/to/file
index 0cc125e..9bf911e 100644
--- a/path/to/file
+++ b/path/to/file
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
git diff --prefix=/new/path/to
diff --git a/new/path/to/file b/new/path/to/file
index 0cc125e..9bf911e 100644
--- a/new/path/to/file
+++ b/new/path/to/file
Run Code Online (Sandbox Code Playgroud)
我查看了--relative选项(不是我要找的), - src/dst-prefix(这些只能改变"a"或"b"部分.我错过了一些基本的东西吗?
我看了很多,但搜索没有很多噪音是一个难题.我想做这样的事情:
def f(arg):
return arg * arg
def add(self, other):
return self * other
f.__add__ = add
cubefunction = f + f
Run Code Online (Sandbox Code Playgroud)
但是我在对cubeto的赋值上遇到错误,例如:
TypeError: unsupported operand type(s) for +: 'function' and 'function'
Run Code Online (Sandbox Code Playgroud)
在python中是否没有函数代数可言,或者我只是犯了一个愚蠢的错误?
编辑:很久以后,我正在阅读Python的函数式编程正式介绍(http://docs.python.org/howto/functional.html),并在底部引用第三方软件包"functional"(http:// oakwinter.com/code/functional/documentation/),它可以组成功能,即:
>>> from functional import compose
>>> def add(a, b):
... return a + b
...
>>> def double(a):
... return 2 * a
...
>>> compose(double, add)(5, 6)
22
Run Code Online (Sandbox Code Playgroud) 就像标题所说的那样.我有一段代码如下:
pid_t = p;
p = fork();
if (p == 0) {
childfn();
} else if (p > 0) {
parentfn();
} else {
// error
}
Run Code Online (Sandbox Code Playgroud)
我想确保父或子在另一个之前执行(但不返回)各自的功能.
像sleep()这样的调用可能会起作用,但是不能通过任何标准来保证,并且只是利用操作系统调度程序的实现细节......这可能吗?vfork会工作吗?
编辑:两个函数都找到了一个system()调用,其中一个函数在另一个函数启动之前不会返回.所以要重新迭代:我需要确保父或子只调用它们各自的函数(但不返回,因为它们不会,这是下面提供的所有基于互斥锁的解决方案提供的).有任何想法吗?抱歉缺乏清晰度.
edit2:有一个进程调用sched_yield和sleep,我似乎得到了非常可靠的结果.vfork确实提供了我正在寻找的语义,但是对于我在子进程中可以做的事情有很多限制(我几乎只能调用exec).所以,我发现了一些足够好的解决方案,但没有真正的解决方案.vfork可能是我所寻找的最接近的东西,但下面提出的所有解决方案都会或多或少地起作用.
我发誓我以前见过这个,但现在找不到它.是否有可能让shell脚本启动python interpeter"mid stream",即:
#!/bin/bash
#shell stuff..
set +e
VAR=aabb
for i in a b c; do
echo $i
done
# same file!
#!/usr/bin/env python
# python would be given this fd which has been seek'd to this point
import sys
print ("xyzzy")
sys.exit(0)
Run Code Online (Sandbox Code Playgroud) 我一直在使用新的c ++标准中的可变参数模板,并提出了一个map函数(header +使用decs除外):
template<typename T>
T square(T i)
{
return i * i;
}
template <typename T, typename... Ts>
const tuple<Ts...> map(const T f, const Ts...args)
{
return make_tuple(f(args)...);
}
int main(int c, char *argv[])
{
tuple<int, int> t;
int (*fp) (int) = square;
t = map(fp, 6, 8);
cout <<get<0>(t) <<endl;
cout <<get<1>(t) <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哪个有效.只要所有参数都是map的相同类型.如果我更改主要使用稍微更一般的形式:
tuple<int, float> t;
t = map(square, 6, 8.0f);
Run Code Online (Sandbox Code Playgroud)
gcc 4.4报告:
In function ‘int main(int, char**)’:
error: no matching function for call …
Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚,并尝试了以下建议:
如何将std :: unique_ptr <>从一个STL容器移动到另一个?
我有两个包含唯一指针的集合:
std::set<std::unique_ptr<some_type>> s1, s2;
Run Code Online (Sandbox Code Playgroud)
指针当然是唯一的,但是some_type的值可以是也可以不是,因此,在将s2连接到s1之后,s1的大小可以等于或等于| s1 + s2 |。
看来我应该能够做到这一点:
move(s2.begin(), s2.end(), inserter(s1, s1.end()));
Run Code Online (Sandbox Code Playgroud)
但这在clang ++ 3.8 / g ++ 5.4中失败。
这里缺少什么?
我正在寻找一种类似于"foldWhile"的haskell函数或模式,除了代替折叠它使用函数输出的列表.一些代码可能会更好地解释它.
简化和伪:
nums :: [Integer]
nums = [1]
cond :: v -> [Integer] -> Bool
cond v ls = elem v ls
func :: x -> ls -> [Integer]
func x ls = x `some_op` ls
Run Code Online (Sandbox Code Playgroud)
我需要一种应用模式,如:
(cond 1 num) && func x num -> num'
(cond 1 num') && func x num' -> num''
(cond 1 num'') && func x num'' -> num'''
...
Run Code Online (Sandbox Code Playgroud)
一旦cond返回False,就产生最后一个num.
任何帮助将不胜感激,提前谢谢.
有没有更好的方法只在作为脚本运行时进行打印,何时__name__ == '__main__'
?
我有一些脚本,我也导入和使用的部分.
像下面这样的东西会起作用但是很难看,并且必须分别在每个脚本中定义:
def printif(s):
if globals()['__name__'] == '__main__':
print (s)
return
Run Code Online (Sandbox Code Playgroud)
我简要介绍了一些python的日志库,但更喜欢两个更轻的解决方案......
编辑:
我最终做了这样的事情:
# mylog.py
import sys
import logging
log = logging.getLogger()
#default logging level
log.setLevel(logging.WARNING)
log.addHandler(logging.StreamHandler(sys.stdout))
Run Code Online (Sandbox Code Playgroud)
并从脚本:
import log from mylog
...
log.info(...)
log.warning(...)
...
if __name__ == '__main__':
#override when script is run..
log.setLevel(logger.INFO)
Run Code Online (Sandbox Code Playgroud)
此方案具有最少的代码重复,每个脚本日志级别和项目范围的默认级别......这正是我想要的.