小编Tay*_*mon的帖子

有什么理由不使用'+'连接两个字符串?

Python中常见的反模式是+在循环中连接一系列字符串.这很糟糕,因为Python解释器必须为每次迭代创建一个新的字符串对象,并最终获得二次时间.(在某些情况下,CPython的最新版本显然可以优化它,但是其他实现不能,因此不鼓励程序员依赖它.)''.join是正确的方法.

不过,我听人说(这里包括对堆栈溢出),你应该永远不会使用+字符串连接,而是始终使用''.join或格式字符串.我不明白为什么如果你只是连接两个字符串就是这种情况.如果我的理解是正确的,它不应该花费二次时间,我认为a + b比任何一个''.join((a, b))或更清晰,更可读'%s%s' % (a, b).

+用于连接两个字符串是一种好习惯吗?还是有一个我不知道的问题?

python anti-patterns string-concatenation

117
推荐指数
4
解决办法
18万
查看次数

检查两个数组是否具有相同的内容(按任何顺序)

我正在使用带有Rails 1.2.3的Ruby 1.8.6,并且需要确定两个数组是否具有相同的元素,无论它们是否处于相同的顺序.保证其中一个数组不包含重复项(另一个可能,在这种情况下答案是否定的).

我的第一个想法是

require 'set'
a.to_set == b.to_set
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更有效或惯用的方式.

ruby arrays comparison

83
推荐指数
8
解决办法
6万
查看次数

检查哈希的键是否包含所有一组键

我正在寻找一种更好的方法

if hash.key? :a &&
   hash.key? :b &&
   hash.key? :c &&
   hash.key? :d
Run Code Online (Sandbox Code Playgroud)

最喜欢的东西

hash.includes_keys? [ :a, :b, :c, :d ] 
Run Code Online (Sandbox Code Playgroud)

我想出来了

hash.keys & [:a, :b, :c, :d] == [:a, :b, :c, :d]
Run Code Online (Sandbox Code Playgroud)

但我不喜欢两次添加数组

ruby

55
推荐指数
5
解决办法
3万
查看次数

如何从stdin读取一行,阻塞直到找到换行符?

我试图从命令行的stdin一次读取任意长度的一行.我不确定我是否能够包含GNU readline并且更喜欢使用库函数.

我读过的文档表明它getline应该有效,但在我的实验中它并没有阻止.我的示例程序:

#include <stdio.h>
int main()
{
    char *line = NULL;
    if (getline(&line, NULL, stdin) == -1) {
        printf("No line\n");
    } else {
        printf("%s\n", line);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

生成No line,这使它不适合接受用户输入.

我该怎么做呢?我知道这应该是微不足道的,但我无法弄明白.

c io

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

一个以上的goroutine打印到stdout是否安全?

我的程序中有多个goroutine,每个都在fmt.Println没有任何显式同步的情况下进行调用.这是安全的(即,每条线路是否单独出现而没有数据损坏),或者我是否需要创建另一个带有同步的goroutine来专门处理打印?

concurrency synchronization go goroutine

22
推荐指数
3
解决办法
7238
查看次数

固定宽度整数是否超过乘法?

对于三个n位有符号整数a,bc(例如32位)a * (b + c) == (a * b) + (a * c),考虑到整数溢出,总是这样吗?

我认为这是与语言无关的,但如果不是,我对Java的答案特别感兴趣.

java language-agnostic math integer-overflow

17
推荐指数
2
解决办法
860
查看次数

为什么整数除以零会导致浮点异常?

在C程序中除以零会导致错误消息的异常终止Floating point exception (core dumped).这对于浮点除法并不足为奇,但为什么在整数除以零时会这样说呢?整数除法实际上是否使用引擎盖下的FPU?

(顺便说一下,这都是在x86下的Linux上.)

c divide-by-zero

15
推荐指数
3
解决办法
4030
查看次数

Racket宏可以使用关键字参数吗?

我想在Racket中创建一个可以接受关键字参数的语法形式,这是某些函数的方式.

把它简化为一个简单的例子,我试着写:

(define-syntax sum-of-products
  (syntax-rules (#:extra)
    [(sum-of-products ([a b] ...))
     (+ (* a b) ...)]
    [(sum-of-products ([a b] ...) #:extra extra)
     (+ extra (* a b) ...)]))
Run Code Online (Sandbox Code Playgroud)

这样以下就可以了:

(sum-of-products ([2 2] [3 3])) ? 13
(sum-of-products ([2 2] [3 3]) #:extra 5) ? 18
Run Code Online (Sandbox Code Playgroud)

不幸的是,Racket称这种"语法错误",显然这种尝试不正确.

可以这样做吗?

macros scheme keyword-argument racket

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

为什么在Django dev服务器中运行两次?

我想让Django开发服务器在开始运行之前做一些事情.为此,我创建了一个新应用程序,将其添加到顶部INSTALLED_APPS,然后management/commands/runserver.py使用以下代码在应用程序中创建一个文件:

from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand
class Command(RunserverCommand):
    def run(self, *args, **options):
        self.stdout.write('About to start running on ' + self.addr)
        super(Command, self).run(*args, **options)
Run Code Online (Sandbox Code Playgroud)

(当然,我想要做的事情比向stdout写一行更复杂,但这是演示问题的最简单的例子.我覆盖的原因run,而不是handle或其他方法,是因为我需要self.addr已经在此代码运行时设置.)

当我运行时./manage.py runserver,"关于开始在127.0.0.1上运行"一行不会出现一次,而是在服务器开始运行之前出现两次.为什么会发生这种情况以及可以采取哪些措施呢?

python django django-manage.py django-commands

11
推荐指数
2
解决办法
3006
查看次数

如何在Vagrant中使用config.ssh.forward_env?

我希望我的主机系统中的某些环境变量在我的Vagrant VM中可见,使用该config.ssh.forward_env设置.我正在使用Vagrant 1.8.1.这是我的Vagrantfile:

Vagrant.configure(2) do |config|
  config.vm.box = 'ubuntu/trusty64'
  config.ssh.forward_env = ['FOO']
end
Run Code Online (Sandbox Code Playgroud)

创建它之后,我运行了以下命令:

vagrant up
export FOO=bar
vagrant ssh -c 'echo $FOO'
Run Code Online (Sandbox Code Playgroud)

我期望最后一行输出bar,但它输出一个空行(后跟Connection to 127.0.0.1 closed.).我究竟做错了什么?

ssh environment-variables vagrant

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