小编nic*_*kie的帖子

在Python 3中打印空格分隔的元素列表

我有一个L元素列表,比如自然数.我想用一个空格作为分隔符将它们打印在一行中.但我不希望在列表的最后一个元素之后(或在第一个元素之前)有空格.

在Python 2中,可以使用以下代码轻松完成此操作.print声明的实现(神秘地,我必须承认)避免在换行符之前打印额外的空格.

L = [1, 2, 3, 4, 5]
for x in L:
    print x,
print
Run Code Online (Sandbox Code Playgroud)

但是,在Python 3中,似乎使用该print函数的(假设的)等效代码在最后一个数字之后产生一个空格:

L = [1, 2, 3, 4, 5]
for x in L:
    print(x, end=" ")
print()
Run Code Online (Sandbox Code Playgroud)

当然,我的问题很简单.我知道我可以使用字符串连接:

L = [1, 2, 3, 4, 5]
print(" ".join(str(x) for x in L))
Run Code Online (Sandbox Code Playgroud)

这是一个非常好的解决方案,但与Python 2代码相比,我发现它反直觉并且肯定更慢.另外,我知道我可以选择是否打印空间,例如:

L = [1, 2, 3, 4, 5]
for i, x in enumerate(L):
    print(" " if i>0 else "", x, sep="", …
Run Code Online (Sandbox Code Playgroud)

python pretty-print python-3.x

30
推荐指数
2
解决办法
8万
查看次数

模板化类中模板化成员函数的特化

我有一个带有模板化成员函数的模板化类

template<class T>
class A {
public:
    template<class CT>
    CT function();
};
Run Code Online (Sandbox Code Playgroud)

现在我想以两种方式专门化模板化成员函数.首先是与类相同的类型:

template<class T>
template<>  // Line gcc gives an error for, see below
T A<T>::function<T>() {
    return (T)0.0;
}
Run Code Online (Sandbox Code Playgroud)

类型bool的第二个:

template<class T>
template<>
bool A<T>::function<bool>() {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这是我试图测试它的方式:

int main() {
    A<double> a;
    bool b = a.function<bool>();
    double d = a.function<double>();
}
Run Code Online (Sandbox Code Playgroud)

现在gcc给了我上面标记的行:

error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize
Run Code Online (Sandbox Code Playgroud)

所以gcc告诉我,如果我想专攻功能,我必须专攻A,对吗?我不想这样做,我希望外类的类型是开放的...

最后的答案是:这是不可能的?或者有办法吗?

c++ template-specialization

18
推荐指数
2
解决办法
5128
查看次数

缺少pandoc中链接和其他类型元素的属性

我试图使用pandoc(有hakyll,但这可能不重要)来实现以下目的:

  1. 阅读降价文件.
  2. 将其转换为HTML.
  3. target="_blank"属性添加到自动生成的每个链接.

问题在于,in 的定义Inlinepandoc似乎只支持某些类型的Inlines的属性,例如,for SpanCode,而不是其他类型,例如for LinkImage.

这是一个任意的限制pandoc,还是因为我不理解的某些原因而故意制作的?此外,有没有办法实现我想要的,而不采用低级字符串处理或使用RawInline构造函数?


这是一个MWE:

import Text.Pandoc
import Text.Pandoc.Walk

fixLinks :: Pandoc -> Pandoc
fixLinks = walk fixLink
  where fixLink (Link inlines (url, title)) =
          Link inlines (url, "I want to add a target=_blank to this link!")
        fixLink inline = inline

main = do
  let md = "This is a link to [StackOverflow](http://stackoverflow.com/)." …
Run Code Online (Sandbox Code Playgroud)

haskell pandoc

11
推荐指数
1
解决办法
466
查看次数

在OS X中设置pythonpath

一位新的PHP开发人员在这里尝试使用"Tango With Django"教程学习Python/Django.

我在第2.2.2节,我必须设置pythonpath,我遇到以下问题:

当我在终端中键入以下内容时:echo $pythonpath我得到一个空行而不是正确的路径.

我按照故障排除步骤找到了site-packages目录所在的位置: Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

根据他们的指示,我更新了我的.bashrc文件,所以现在看起来像这样:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
export PYTHONPATH=$PYTHONPATH:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我不明白,当我发现时,我仍然会得到一个空白echo $pythonpath.

因为我在pythonpath设置时遇到了困难,所以我跳过了它,但是在安装Setuptools,Pip和Django时遇到了问题.

谁能告诉我我做错了什么?我可以在Tango与Django旁边看到的任何资源?

python django pythonpath

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

C++类中定义的友元函数的成员访问控制

我知道以下 C++ 代码片段应该在 的定义中产生错误g,因为它p.t.x是私有的,无法在那里访问。

class P {
  class T {
    int x;
    friend class P;
  };
  T t;

  friend void g(P &p);
};

void g(P &p) { p.t.x = 42; }
Run Code Online (Sandbox Code Playgroud)

令我困惑的是下一个片段。不同之处仅在于朋友函数的定义g现在出现class 中P

class P {
  class T {
    int x;
    friend class P;
  };
  T t;

  friend void g(P &p) { p.t.x = 42; }
};
Run Code Online (Sandbox Code Playgroud)

Clang++(6.0.0-1ubuntu2 和 Apple 版本 clang-1100.0.33.8)编译后者没有错误,而 GNU C++(7.5.0-3ubuntu1~18.04)产生与前一个片段相同的错误。

我知道g后一种情况中定义的函数与前一种情况中定义的函数不在同一范围内(参见相关问题和 …

c++ g++ friend-function language-lawyer clang++

6
推荐指数
1
解决办法
119
查看次数

使用QuickCheck测试故意错误情况

我已经看到QuickCheck如何用于测试monadic和非monadic代码,但是如何使用它来测试处理错误的代码,即打印一些消息然后调用exitWith

haskell quickcheck

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

C 中的 # 和 ## 宏

方案一:

#include <stdio.h>
#define foo(x, y) #x #y

int main()
{
  printf("%s\n", foo(k, l)); //prints kl
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

方案2:

#include <stdio.h>
#define foo(m, n) m ## n

int main()
{
  printf("%s\n", foo(k, l)); //compiler error
}
Run Code Online (Sandbox Code Playgroud)

为什么两个程序的输出会有如此大的差异?这两个程序之间的确切区别是什么?

c macros

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

lambda calculus语法LLR

我正在尝试编写一个lambda演算解析器,我定义的语法似乎不在LLR中:

E ::= x | \x.E | EE | (E)
Run Code Online (Sandbox Code Playgroud)

我减少左递归:

E ::= xE' | \x.EE' | (E)E'
E'::= EE' | <empty>
Run Code Online (Sandbox Code Playgroud)

似乎不对,有人可以帮忙吗?

compiler-construction haskell lambda-calculus context-free-grammar left-recursion

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