C我以前的编程只有代码部分用于调试目的(记录命令等).通过使用#ifdef预处理器指令可以完全禁用这些语句,如下所示:
#ifdef MACRO
controlled text
#endif /* MACRO */
Run Code Online (Sandbox Code Playgroud)
做类似事情的最佳方法是什么python?
我正在研究pypreprocessor,这是一个采用c风格指令的预处理器,我已经能够使它像传统的预处理器一样工作(它是自耗的,并且即时执行后处理代码),除了它打破了库进口.
问题是:预处理器运行文件,处理它,输出到临时文件,exec()临时文件.导入的库需要处理稍有不同,因为它们不会被执行,而是被加载并且可以被调用者模块访问.
我需要做的是:中断导入(因为预处理器在导入过程中运行),将后处理代码作为tempModule加载,并用tempModule替换原始导入以欺骗调用脚本认为tempModule是原始模块的导入.
到目前为止,我到处搜索,没有解决方案.
这个Stack Overflow问题是我到目前为止提供答案的最接近的问题: 在Python中覆盖名称空间
这就是我所拥有的.
# Remove the bytecode file created by the first import
os.remove(moduleName + '.pyc')
# Remove the first import
del sys.modules[moduleName]
# Import the postprocessed module
tmpModule = __import__(tmpModuleName)
# Set first module's reference to point to the preprocessed module
sys.modules[moduleName] = tmpModule
Run Code Online (Sandbox Code Playgroud)
moduleName是原始模块的名称,tmpModuleName是后处理代码文件的名称.
奇怪的是这个解决方案仍然完全正常运行,好像第一个模块完成正常加载一样; 除非你删除最后一行,否则你会得到一个模块未找到错误.
希望Stack Overflow上有人比我更了解进口,因为这个让我难过.
注意:我只会授予一个解决方案,或者,如果在Python中无法做到这一点; 最好,最详细的解释为什么这不是不可能的.
更新:对于任何感兴趣的人,这是工作代码.
if imp.lock_held() is True:
del sys.modules[moduleName]
sys.modules[tmpModuleName] = __import__(tmpModuleName)
sys.modules[moduleName] = __import__(tmpModuleName)
Run Code Online (Sandbox Code Playgroud)
'imp.lock_held'部分检测模块是否作为库加载.以下几行完成其余的工作.
我遇到了一个gcc v3.4.4的错误,并且在我的代码中添加#ifdef来解决该版本编译器的bug.
什么是GCC编译器预处理器预定义宏来检测编译器的版本号?
我知道人工神经网络输入必须标准化,标准化等.除了各种人工神经网络的特性和模型之外,我如何在{0,1}范围内或者在范围{-1之间预处理UTF-8编码文本. 1}在它作为神经网络的输入之前?我一直在谷歌搜索这个,但找不到任何信息(我可能使用错误的术语).
编辑2013年11月20日:
我一直认为皮特的答案是正确的.然而,我有严重的疑虑,主要是由于我最近对符号知识和ANN的研究.
Dario Floreano和Claudio Mattiussi在他们的书中解释说,通过使用分布式编码,这种处理确实是可行的.
事实上,如果你尝试谷歌学者搜索,存在大量的神经科学文章和论文,关于如何假设分布式编码被大脑用来编码符号知识.
Teuvo Kohonen在他的论文" Self Organizing Maps "中解释说:
有人可能会认为将神经适应法应用于符号集(被视为一组矢量变量)可能会创建一个显示符号之间"逻辑距离"的地形图.然而,与连续数据相比,出现了符号的不同性质的问题.对于后者,相似性总是以自然的方式显示,作为其连续编码之间的度量差异.对于没有定义度量的离散符号项(例如单词),这不再适用.符号的本质是它的意义与其编码分离.
然而,Kohonen确实设法处理SOM中的符号信息!
此外,Alfred Ultsch博士在他的论文" 神经网络与符号知识处理的整合 "中完全阐述了如何在ANN中处理符号知识(如文本).Ultsch提供以下处理符号知识的方法:神经近似推理,神经统一,内省和综合知识获取.虽然谷歌学者或其他任何地方的人都可以找到很少的信息.
皮特在他的回答中是关于语义的.人工神经网络中的语义通常是断开的.然而,下面的参考,提供了洞察研究人员如何使用RBM,训练识别不同单词输入的语义相似性,因此它不应该是不可能有语义,但需要分层方法,或者如果需要语义,则需要辅助ANN .
使用子符号神经网络进行自然语言处理,Risto Miikkulainen,1997 训练受限制的Boltzmann机器进行单词观察,GEDahl,Ryan.P.Adams,H.Rarochelle,2012
preprocessor normalize standardized textinput neural-network
使用C预处理器,这是常见的,
#if defined(NDEBUG)
// release build
#endif
#if defined(DEBUG)
// debug build
#endif
Run Code Online (Sandbox Code Playgroud)
货物的粗略等价物是:
cargo build --release 发布.cargo build 用于调试.如何使用Rust的#[cfg(...)]属性或cfg!(...)宏来做类似的事情?
我知道Rust的预处理器不像C那样工作.我查看了文档,此页面列出了一些属性.(假设此列表是全面的)
debug_assertions 可以检查,但用于检查更一般的调试情况可能会误导.
我不确定这个问题是否与货物有关.
在Drupal 6中为特定节点包含CSS或Javascript文件的最佳方法是什么.
我想在我的网站上创建一个运行有一点javascript应用程序的页面,因此CSS和javascript特定于该页面,并且根本不希望包含在其他页面加载中.
我为我的应用程序设置了两个目标(精简版和专业版),我想在每个代码中集成一些细微差别(例如专业版不会显示任何iAd横幅).
我一直在四处寻找,我发现最简单的方法是使用预处理器宏.我面临的问题是如何在Xcode 4中设置它们.我想在一个目标中设置一个名为"PRO_VERSION"的宏,在另一个目标中设置一个"LITE_VERSION".
以下是我打算如何使用它们的示例:
#ifdef PRO_VERSION
// Hide ad banners
#else
// Show ad banners
#endif
Run Code Online (Sandbox Code Playgroud) GLSL有一个完整的C风格预处理器.唯一不起作用的是#include.其中一个很棒的功能是,您可以使用#ifdef注释掉函数,从而创建一个着色器,如果不使用某些特征,可以将其稀疏.
我的问题是:
有没有办法从C代码定义宏?
使用openGL接口似乎无法做到这一点.快速入侵是在代码加载表单文件之前使用#define FOO添加几行.但它似乎有点倒退.
我在tracing.hh中有一组调试宏.它是否生成代码和输出是由真实源代码中的宏标志控制的:
// File: foo.cc
#define TRACING 0
#include "tracing.hh"
// Away we go . . .
TRACEF("debug message");
Run Code Online (Sandbox Code Playgroud)
标志TRACING应该有一个值; 我通常在0和1之间切换.
在tracing.h中,
#ifdef TRACING 会告诉我跟踪是定义的.#if TRACING 控制功能宏的定义 TRACEF()但是如果TRACING没有价值呢?然后#if TRACING产生一个错误:
In file included from foo.c:3:
tracing.hh:73:12: error: #if with no expression
Run Code Online (Sandbox Code Playgroud)
如何测试TRACING是否定义但没有价值?
我正在将一个makefile项目迁移到CMake.第一次编写makefile的人已经完成了一个用于在include文件中写入某些值的模块.
有一个主config.h文件,其中包含config_in.h.config.h文件包含以下内容:
#ifndef USE_FEATURE_A
#define USE_FEATURE_A 0
#endif
#ifndef USE_FEATURE_B
#define USE_FEATURE_B 0
#endif
Run Code Online (Sandbox Code Playgroud)
在makefile中有一个伪目标,就像with_feature_a在config_in.h中写的那样
#define USE_FEATURE_A 1
Run Code Online (Sandbox Code Playgroud)
通过这种方式,有人可以打字
make with_feature_a
make
Run Code Online (Sandbox Code Playgroud)
获得正确的构建.
我想使用这个代码库但使用CMake复制这样的东西.我在网上尝试了几种方法,但我没有让它发挥作用.
set_target_properties(with_feature_a PROPERTIES COMPILE_DEFINITIONS
"WITH_FEATURE_A=1"
)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为如果我跑
make with_feature_a
Run Code Online (Sandbox Code Playgroud)
我没有with_feature_a在预处理器命令行中看到.
我做的第二次尝试是直接用内容集写一个文件到我想要的东西,但我不明白如何将file()命令连接到我的目标.
我把它放在我的CMakeLists.txt中
file(WRITE
local/config_in.h
"#define WITH_FEATURE_A 1"
)
Run Code Online (Sandbox Code Playgroud)
但这并不是每次都执行,我不知道如何将它设置为单个目标.
任何帮助表示赞赏.感谢您阅读所有这些内容.对不起长话:)
UPDATE
这里提供的解决方案是解决问题之路上的一大亮点.问题是不允许递归定义.我举了一个例子:
在CMakeLists.txt我放置:
if (WITH_FEATURE_A)
MESSAGE(STATUS "WITH_FEATURE_A")
add_definitions(-DUSE_FEATURE_A=1)
add_definitions(-DWITH_FEABURE_B=1)
endif()
if (WITH_FEABURE_B)
MESSAGE(STATUS "WITH_FEATURE_B")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_C)
MESSAGE(STATUS "WITH_FEATURE_C")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_D)
MESSAGE(STATUS "WITH_FEATURE_D")
endif()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我用-DWITH_FEATURE_A = 1执行cmake,我很乐意在输出中看到: …