小编Le *_*ous的帖子

为什么xrange能够在Python中重新开始?

我从大多数pythonic方法中遇到了这个代码,用于计算可迭代的匹配元素

r = xrange(1, 10)
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 3
Run Code Online (Sandbox Code Playgroud)

r迭代一次.然后它再次迭代.我想如果一个迭代器被消耗掉,那么它就结束了,它不应该再次迭代.

生成器表达式只能迭代一次:

r = (7 * i for i in xrange(1, 10))
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 0
Run Code Online (Sandbox Code Playgroud)

枚举(L):

r = enumerate(mylist) …
Run Code Online (Sandbox Code Playgroud)

python iterator xrange

29
推荐指数
2
解决办法
1497
查看次数

当我们有iframe时为什么要使用Shadow DOM?

我听说过shadow DOM,它似乎解决了Web小部件开发中的封装问题.DOM和CSS规则被封装,这有利于维护.但那不是iframes的用途吗?iframe使W3C有必要提出Shadow DOM或HTML5 Web组件有什么问题?

iframe html5 web

29
推荐指数
2
解决办法
8542
查看次数

在Lisp中,什么是推动是为了利弊?

(push x list)
Run Code Online (Sandbox Code Playgroud)

扩展到

(setq list (cons x list))
Run Code Online (Sandbox Code Playgroud)

什么扩展到以下:

(setq list (append list2 list))
Run Code Online (Sandbox Code Playgroud)

?这有一个标准的宏吗?

lisp macros common-lisp

10
推荐指数
1
解决办法
2913
查看次数

当我定义一个宏并且只为临时变量使用一个非常稀有的名称时会出现什么问题?

让Over Lambda第3章"不需要的捕获"说:

"当然,我们可以想到足够罕见的名称,以便问题永远不会出现.是的,在许多情况下,软件包和智能变量命名可以解决变量捕获的问题.但是,最严重的变量捕获错误不会直接出现在代码中由程序员创建的.大多数变量捕获的问题只有表面时,其他宏使用宏的方式,你没有预料到(与宏相结合). "

然后它没有给我一个大胆的部分的例子.这样的例子之一是什么?设想一个假想的Lisp开发团队,其疯狂的老板禁止使用gensym或任何创建无符号符号的东西,程序员只需投掷字母数字骰子就可以得到随机变量名称,如temp-27s63f8sk2n或sum-3t84hj4df,只要他们错过了gensym.什么是团队陷入困境的例子?

说到这一点,Emacs 24.3.1定义了dotimes和dolist而不使用uninterned符号.奇怪的.

lisp macros scope

8
推荐指数
1
解决办法
88
查看次数

是什么让用户定义的对象不在Python中抛出AttributeError?

可能重复:
为什么我不能直接向任何python对象添加属性?
为什么不能在python中向对象添加属性?

以下代码不会抛出AttributeError

class MyClass():
    def __init__(self):
        self.a = 'A'
        self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'
Run Code Online (Sandbox Code Playgroud)

这与之形成鲜明对比

>>> {}.a = 'A'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud)

有什么区别?它是关于dict是一个内置类,而MyClass是用户定义的吗?

python oop

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

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

为什么print-circle默认为nil?

CLHS说

An attempt to print a circular structure with *print-circle* set
 to nil may lead to looping behavior and failure to terminate.
Run Code Online (Sandbox Code Playgroud)

然后是这样的:

为什么这个Lisp宏作为一个整体工作,即使每个部分都不起作用?

显然,*print-circle*设置为零会导致意外.为什么*print-circle*在许多系统上默认设置为nil?如果我从代码的开头全局设置为t,会出现什么问题?

lisp printing common-lisp

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

是闭括号、闭括号还是闭括号?

Lisp 中(和的正确术语是)什么?

  • 开括号
  • 开括号
  • 关闭括号
  • 闭合括号
  • 关闭括号

他们都接受条款吗?

lisp parentheses

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

将float赋值给int变量不会导致任何警告

因此,给出以下代码:

int main(void) {
  int i;
  i = 12.1234;
  i++;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译了代码,我期望并希望编译器给我一个警告,但事实并非如此.我的编译器配置错了吗?有没有办法让我的编译器发出警告?

这是我用的

cc -Wall test.c

c warnings types implicit-conversion

5
推荐指数
2
解决办法
3399
查看次数

一个名称的多个变量或Lisp中一个变量的多个绑定

我很困惑/不确定如何使用术语变量或绑定.我认为我的不确定性可归结为三个相关的简单问题.

(let ((hi 'outer))
  (let ((hi 'inner))
    (print hi))
  (print hi))
Run Code Online (Sandbox Code Playgroud)

问题A:在上面的代码中,以下哪项是正确的?

  1. 只有一个变量.一个变量有两个绑定:外部绑定和内部绑定.

  2. 一个名称有两个变量:外部变量和内部变量.

当我在互联网上阅读有关局部变量的文章时,有时文章似乎选择1,有时候2.两者是否同样正确?

(let ((hi 0))
  (print hi)
  (setq hi 1)
  (print hi)
  (setq hi 2)
  (print hi))
Run Code Online (Sandbox Code Playgroud)

问题B:以上哪项适合上述代码?

  1. 有一个绑定正在被重用.

  2. 有三个绑定.

我从未见过任何使用单词绑定的材料,选择2作为答案,但另一方面,人们可能仍然认为"名称hi被绑定三次.三个绑定发生.代码执行三个绑定. " 所以我不确定.

(defun fac (n)
  (if (> n 1)
      (* n (fac (1- n)))
    1))
(fac 4)
Run Code Online (Sandbox Code Playgroud)

问题C:正在执行递归函数时,哪个是正确的?

  1. 一个变量会同时绑定几个.

  2. 一个名称将同时存在多个变量.

这似乎与问题A类似,但问题A涉及两个let表单,每个表单只执行一次,而这个问题更像是一个let表单,它同时在多个实例中执行.

这些问题是针脚的角度吗?我想知道这些问题,因为关于在循环中使用闭包的着名问题有很多文章,我认为理解那些文章需要知道一个变量是什么以及一个绑定是什么.

lisp variables

4
推荐指数
1
解决办法
310
查看次数

在python中以串行方式检查具有许多正则表达式的字符串时,会有太多缩进

当我编写如下代码时,我会深陷缩进

match = re.search(some_regex_1, s)
if match:
    # do something with match data
else:
    match = re.search(some_regex_2, s)
    if match:
        # do something with match data
    else:
        match = re.search(soem_regex_3, s)
        if match:
            # do something with match data
        else:
            # ...
            # and so on
Run Code Online (Sandbox Code Playgroud)

我试着重写为:

if match = re.search(some_regex_1, s):
    # ...
elif match = re.search(some_regex_2, s):
    # ...
elif ....
    # ...
...
Run Code Online (Sandbox Code Playgroud)

但Python不允许这种语法.在这种情况下,我该怎么做才能避免深度缩进?

python conditional indentation

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

是否需要在C中修剪功能?

我正在阅读关于修剪维基百科文章并看到了ltrim的这种实现(左边修剪)

char *
ltrim(char *str)
{
  char *ptr;
  int  len;

  for (ptr = str; *ptr && isspace((int)*ptr); ++ptr);

  len = strlen(ptr);
  memmove(str, ptr, len + 1);

  return str;
}
Run Code Online (Sandbox Code Playgroud)

如果我跳过memmove并返回ptr isntead会发生坏事吗?

char *
ltrim(char *str)
{
  char *ptr;
  int  len;

  for (ptr = str; *ptr && isspace((int)*ptr); ++ptr);

  return ptr;
}
Run Code Online (Sandbox Code Playgroud)

c trim memmove

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