小编dav*_*dav的帖子

为什么我们有lower_case_with_underscores命名约定?

根据你的解释,这可能是也可能不是一个修辞问题,但它真的让我感到困惑.这个惯例有什么意义?我理解命名约定不一定要有背后的押韵或理由,但为什么偏离已经流行的camelCase?我不知道什么押韵和背后的原因lower_case_with_underscores吗?(是的,我完整地阅读了PEP 8,是的,我确实理解它只是一个提案,指南等)

我想我的真正问题是:我正在编写一个Python库.事实上,运气好的话,相对于我的其他项目,它可能是一个相当大的库.我已经尝试尽可能地遵守PEP 8,到目前为止,我甚至保持lower_case_with_underscoresPEP 8指示功能和方法名称.但是我不得不记得使用camelCase for Twisted,camelCase logging以及其他所有东西.我应该使用什么命名约定,为什么?

令人惊讶的是,我非常关心命名,足以写出一个冗长的问题,而且我也很惊讶.也许在这些事情上我有一点强迫症.我没有太多关于它的"个人意见",因为我倾向于选择最常用的东西,在这种情况下,将是camelCase - 但它让我更加恼火的是找到那个我可能正在打破一些关于明确与隐含的永恒定律以及用石头或其他东西写成的蟒蛇的禅.

python camelcasing pep8 naming-conventions

19
推荐指数
5
解决办法
5546
查看次数

Makefile条件包括

我正在尝试编写一个需要ALSA或OSS标头的应用程序.基本上,如果/etc/oss.conf不存在,我想将一个定义传递给编译器,因为这可能意味着soundcard.h头不存在(随意在那个上纠正我,我还是新的与OSS合作).根据OSS文档,您将使用include指令,如下所示:

include /etc/oss.conf
CFLAGS := -I$(OSSLIBDIR)/include/sys
Run Code Online (Sandbox Code Playgroud)

一个问题.OSS支持是可选的,所以我想检查标头是否存在,如果存在,则将定义传递给编译器.问题是,AFAIK无法检查文件是否存在于makefile 规则之外.在规则内部,如果我使用if语句,由于某种原因,尝试设置CFLAGS不会改变它:

test: $(objects)
    @if [ -f ${OSS_CONFIG} ]; then \
    . ${OSS_CONFIG}; \
    CFLAGS+=" -I${OSSLIBDIR} -DUSE_OSS"; \
    fi
    @echo ${CFLAGS}
Run Code Online (Sandbox Code Playgroud)

(上面只输出CFLAGS的原始值,即使${OSS_CONFIG}存在.)这当然是非常难看的,我想知道是否有更清洁的方法来做到这一点.或者我正在采取的方式引发一场涉及小猫种族灭绝的全球性灾难性事件?

哦,请不要告诉我使用autoconf.

c open-source makefile alsa

13
推荐指数
2
解决办法
1万
查看次数

用户,组和角色的多对多声明性SQLAlchemy定义

我是SQLAlchemy的新手,并且想知道定义这样的表和关系的最佳方法是什么.我希望能够通过组中的用户访问user.groups用户的组group.users,并找出组中用户的角色(我假设它将在关联模型中进行逻辑定义).我还想逐个选择所有用户,并包含角色标题.

我已经使用教程创建关联表(声明样式),并删除试图secondary参数relationship的属性UserGroup类别从组,但我会失去直接从用户访问组的能力,并且用户可以直接(对backref的在关联表中指向关联类本身:/).

任何帮助,将不胜感激.

python sql many-to-many sqlalchemy

5
推荐指数
1
解决办法
2165
查看次数

map.find和指向向量的指针的奇怪行为

我有一个矢量映射对的映射,如下所示:

std::map<std::pair<uint16, uint16>, std::vector<std::vector<uint32> > >
Run Code Online (Sandbox Code Playgroud)

地图填充在类的构造函数中.这个类提供了一个返回指向std::vector<std::vector<uint32> >(映射值部分)的指针的公共方法,如下所示:

typedef std::pair<uint16, uint16> key;
typedef std::vector<std::vector<uint32> > value;

value* FindValues(key someKey) {
    std::map<key, value>::const_iterator it;
    it = someStore.find(someKey);
    if (it != someStore.end()) 
        return &(value)it->second;
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

这是奇怪的时候.迭代FindValues返回的向量时,所有子向量都有一个大的负数(例如-1818161232)作为它们的第一个值.但是,如果我使用如下函数:

value FindValues(key someKey) {
    std::map<key, value>::const_iterator it;
    return someStore.find(someKey)->second;
}
Run Code Online (Sandbox Code Playgroud)

......那么价值是正常的.这仅发生在所有子向量的索引0处的值.但是,使用第二种方法,如果找不到密钥,我的应用程序会出现段错误(原因很明显).我究竟做错了什么?

c++ pointers vector map

3
推荐指数
1
解决办法
988
查看次数

Makefile while 循环

即使将 SHELL 设置为 bash 而不是 sh,以下操作也不起作用:

doc:
    while read line; do \
      eval echo "$$line" > $(DOC) \
    done < $(DOC).templ

/bin/bash: -c: line 3: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我想要做的是有一个模板文件,其中包含 bash 参数理解等 ( $(), ${}) 并在编译时“构建”它。有一个更好的方法吗?

bash templates makefile while-loop

2
推荐指数
1
解决办法
5561
查看次数

C++将const分配给环境变量或默认值

对于使用大量环境变量的应用程序,在获取环境变量并将它们放入结构或一堆结构中时,是否存在某种约定或"最佳实践" const?显然,我想回退到每个环境变量的默认值.现在,使用以下内容似乎是一种非常混乱的方式:

char* x;
const SOME_VARIABLE;
if (NULL == (x = getenv("SOME_VARIABLE")))
    SOME_VARIABLE = 5; // default value
else
    SOME_VARIABLE = x;
Run Code Online (Sandbox Code Playgroud)

getenv如果环境变量为空,我还可以编写一个包装函数来返回默认值,但我不确定这是否是最好的方法.我也可以放弃使用const,但这似乎也不是一件好事.

有什么想法吗?

c++ variables environment const getenv

0
推荐指数
1
解决办法
2407
查看次数