我正在为sensorsUbuntu 上的实用程序输出编写一个简单的正则表达式解析器.这是我正在解析的一行文本的示例:
temp1: +31.0°C (crit = +107.0°C)
Run Code Online (Sandbox Code Playgroud)
这是我用来匹配它的正则表达式(在Python中):
temp_re = re.compile(r'(temp1:)\s+(\+|-)(\d+\.\d+)\W\WC\s+'
r'\(crit\s+=\s+(\+|-)(\d+\.\d+)\W\WC\).*')
Run Code Online (Sandbox Code Playgroud)
此代码按预期工作,并与我上面给出的示例文本相匹配.我唯一感兴趣的是数字,所以这一点:
(\+|-)(\d+\.\d+)\W\WC
Run Code Online (Sandbox Code Playgroud)
它通过匹配+或-符号开始,并通过匹配来结束°C.
我的问题是,为什么\W要匹配两个(非字母数字)字符°而不是一个?代码是否会在Unicode与我的代表不同的系统上中断?如果是这样,我怎么能让它便携?
我需要在轴坐标中找到包括其相关艺术家(在这种情况下只是刻度和刻度标签)的绘图范围(如matplotlib转换教程中所定义).
这样做的背景是我自动为大量图表创建缩略图(如此SO问题),只有当我可以定位缩略图以使其不会模糊原始图中的数据时.
这是我目前的做法:
这种方法的问题在于轴坐标为您提供从(0,0)(轴的左下角)到(1,1)(右上角)的轴的范围,并且不包括刻度线和刻度标签(缩略图没有标题,轴标签,传说或其他艺术家).
所有图表都使用相同的字体大小,但图表具有不同长度的刻度标签(例如1.5或者1.2345 * 10^6),尽管这些在绘制插图之前是已知的.有没有办法将字体大小/点转换为轴坐标?或者,也许有比上面更好的方法(边界框?).
以下代码实现了上述算法:
import math
from matplotlib import pyplot, rcParams
rcParams['xtick.direction'] = 'out'
rcParams['ytick.direction'] = 'out'
INSET_DEFAULT_WIDTH = 0.35
INSET_DEFAULT_HEIGHT = 0.25
INSET_PADDING = 0.05
INSET_TICK_FONTSIZE = 8
def axis_data_transform(axis, xin, yin, inverse=False):
"""Translate between axis and data coordinates.
If 'inverse' is True, data coordinates are translated to axis coordinates,
otherwise the transformation is reversed. …Run Code Online (Sandbox Code Playgroud) 我一直在看Philip Bunge关于如何使用LaTeX列表创建"Tango"风格的帖子,并试图调整它以使默认文本样式为白色和背景为黑色(这是幻灯片,而不是文章!).这就是我添加的内容:
\definecolor{Black}{gray}{0.0}
\definecolor{White}{gray}{0.9}
...
\lstset{
basicstyle=\color{White},
backgroundcolor=\color{Black},
...
}
Run Code Online (Sandbox Code Playgroud)
这假定basicstyle设置所有文本的默认样式.列表文档说明了这一点:
在每个列表的开头选择basicstyle.您可以使用\ footnotesize,\ small,\ itshape,\ ttfamily或类似的东西.最后一个标记不得读取任何后续字符.
此输出仍显示"默认"文本为黑色.可以设置更多样式指令来覆盖给定编程语言中的大多数令牌,但即使这样做,也会遗漏一些令牌(例如括号和其他标点符号).我做错了什么?
我有一个Rust程序,它包含许多不同的结构,它们都实现了一个叫做的特征ApplyAction.另一个结构,ActionList包含一个实现的盒装对象的向量ApplyAction.我想创建一些比较ActionLists的单元测试.
有一些不同的SO问题涉及PartialEq盒装特征,我已经用它们来实现一些方法.但是,在下面的(简化)代码(以及Playground)中,断言main()失败,因为传递的对象的类型ID eq()不同.为什么?
此外,对于这样一个简单的用例来说,这似乎非常复杂 - 有更简单的方法吗?
use std::any::TypeId;
use std::boxed::Box;
use std::fmt;
use std::mem::transmute;
#[derive(Debug, Eq, PartialEq)]
pub struct MyAction<T: fmt::Debug> {
label: T,
}
impl<T: fmt::Debug> MyAction<T> {
pub fn new(label: T) -> MyAction<T> {
MyAction { label: label }
}
}
pub trait ApplyAction<T: fmt::Debug + PartialEq>: fmt::Debug {
fn get_type(&self) -> TypeId;
fn is_eq(&self, other: &ApplyAction<T>) -> bool;
}
impl<T: fmt::Debug + …Run Code Online (Sandbox Code Playgroud) 我想知道调用具有多个返回值的函数的正确语法是什么,其中一个(或多个)是类型interface{}.
返回的函数interface{}可以像这样调用:
foobar, ok := myfunc().(string)
if ok { fmt.Println(foobar) }
Run Code Online (Sandbox Code Playgroud)
但是以下代码失败并显示错误multiple-value foobar() in single-value context:
func foobar()(interface{}, string) {
return "foo", "bar"
}
func main() {
a, b, ok := foobar().(string)
if ok {
fmt.Printf(a + " " + b + "\n") // This line fails
}
}
Run Code Online (Sandbox Code Playgroud)
那么,正确的调用约定是什么?
在使用Mercurial或类似DVCS工具进行版本化的大型Libre Source软件项目中,以下哪项被认为更为传统:
default分支中保留最新的"稳定"版本的软件.标记每个版本,default以便您知道哪个版本已打包为下载.default测试后立即合并补丁.保持命名分支中的新功能等在default下一版本中合并.default用于保留仅供开发人员或非常愚蠢的人使用的前沿代码.或者......是否有一些被广泛接受的更好的工作流模式?
根据v3文档我会想到这个:
$ curl https://api.github.com/legacy/repos/search/python?language=Python&sort=forks&order=desc
Run Code Online (Sandbox Code Playgroud)
将按照分叉数的降序返回前100个Python存储库.它实际上返回一个空(json)存储库列表.
这个:
$ curl https://api.github.com/legacy/repos/search/python?language=Python&sort=forks
Run Code Online (Sandbox Code Playgroud)
返回存储库列表(在json中),但其中许多未列为Python存储库.
所以,显然我误解了Github API.检索特定语言的前N个存储库的可接受方法是什么?
这个答案通过@joki到前面的问题表明,它可以通过给浏览的文物公开网址部署在GitLab回购来动态环境中的每个活跃的分支。
用mkdocs 材料项目尝试这个,我发现了两个问题。
首先,如果 GitLab 存储库在一个组或一个子组中,则.gitlab-ci.yml文件中的 URL需要更像这样:
environment:
name: review/$CI_COMMIT_REF_NAME
url: "$CI_PAGES_URL/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
auto_stop_in: 1 week
variables:
PUBLIC_URL: "$CI_PAGES_URL/-/jobs/$CI_JOB_ID/artifacts/public/"
Run Code Online (Sandbox Code Playgroud)
其次,网站内的相关链接不好用,导致404错误很多,样式文件等东西丢失。也许上面的网址是不正确的,或者也许是site_url在mkdocs.yml需要改变的东西,如:
site_url: !!python/object/apply:os.getenv ["CI_ENVIRONMENT_URL"]
Run Code Online (Sandbox Code Playgroud)
然而,这些都不适合我。
可以在此处找到具有非常小的部署和审查应用程序的最小 MR 。
有没有人有 mkdocs 评论应用程序的工作配方?
我有一个org-mode文档,我想以PDF格式导出.我正在使用LaTeX列表包生成格式良好的代码清单,在org中看起来像这样:
#+BEGIN_LaTeX
\begin{lstlisting}[language=Java]
/** Comment comment comment
*
* blah blah blah
*
* @return comment
*/
public void foo() {
return;
}
\end{lstlisting}
#+END_LaTeX
Run Code Online (Sandbox Code Playgroud)
那里的Javadoc评论被org翻译为LaTeX itemize环境,如下所示:
\begin{lstlisting}[language=Java]
/** Comment comment comment
\begin{itemize}
\item
\item blah blah blah
\item
\item @return comment
\end{itemize}
*/
public void foo() {
return;
}
\end{lstlisting}
Run Code Online (Sandbox Code Playgroud)
我怎样才能防止这种情况发生并像我最初写的一样保留Javadoc?如果我用#+BEGIN_SRC,而不是#+BEGIN_LaTeX我所得到的回复是一个verbatim环境,但我想坚持上市,而不是verbatim或因为我已经做了放在一起一组漂亮的花式为它努力铸造.
由于类型错误,下面的代码无法编译error[E0283]: type annotations required: cannot resolve _: std::cmp::Eq。要编译此代码,需要哪种类型的注释?
此示例代码来自一个更大的程序,该程序MyHashGenerator::hash_node()用于哈希AST中的节点(类型T与AST节点中保存的值有关,但不需要AST的定义来重现类型错误)。
use std::hash::Hash;
pub trait HashGenerator<T: Clone + Eq + Hash + ToString> {
fn hash(&self, msg: &str) -> u64; // Hash a string.
fn hash_node(&self) -> u64; // Hash an AST node.
}
struct MyHashGenerator {}
impl<T: Clone + Eq + Hash + ToString> HashGenerator<T> for MyHashGenerator {
fn hash(&self, msg: &str) -> u64 {
0
}
fn hash_node(&self) -> u64 {
// error[E0283]: type …Run Code Online (Sandbox Code Playgroud) latex ×2
listings ×2
python ×2
rust ×2
curl ×1
github ×1
github-api ×1
gitlab ×1
gitlab-pages ×1
go ×1
interface ×1
json ×1
matplotlib ×1
mercurial ×1
mkdocs ×1
open-source ×1
org-mode ×1
portability ×1
regex ×1
traits ×1
types ×1
typesetting ×1
unicode ×1
versioning ×1
workflow ×1