小编Nli*_*tis的帖子

与python列表混淆:它们还是不是迭代器?

在Nutshell中研究Alex Marteli的Python,书中暗示任何具有next()方法的对象(或者至少可以用作迭代器).它还表明大多数迭代器是通过对被调用方法的隐式或显式调用构建的iter.

在书中读到这篇文章后,我感受到了尝试它的冲动.我启动了一个python 2.7.3解释器,并做到了这一点:

>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
...     print x.next()
Run Code Online (Sandbox Code Playgroud)

但结果如下:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)

在混乱中,我试图研究x对象的结构,dir(x)我注意到它有一个__iter__函数对象.所以我发现它可以用作迭代器,只要它支持那种类型的接口.

所以当我再次尝试时,这一次略有不同,尝试这样做:

>>> _temp_iter = next(x)
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list object …
Run Code Online (Sandbox Code Playgroud)

python iterator list

71
推荐指数
4
解决办法
5万
查看次数

为什么允许向已经实例化的对象添加属性?

我正在学习python,虽然我认为我得到了Python的整个概念和概念,但今天我偶然发现了一段我并不完全理解的代码:

假设我有一个应该定义Circles但缺少一个body的类:

class Circle():
    pass
Run Code Online (Sandbox Code Playgroud)

由于我没有定义任何属性,我该怎么做:

my_circle = Circle()
my_circle.radius = 12
Run Code Online (Sandbox Code Playgroud)

奇怪的是Python接受上述语句.我不明白为什么Python没有引发undefined name error.我明白通过动态类型我只需要随时将变量绑定到对象,但是类中是否不radius存在Circle允许我这样做的属性?

编辑:你的答案中有很多精彩的信息!谢谢大家的所有精彩答案!遗憾的是我只能将一个标记为答案.

python attributes declaration python-3.x

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

什么是测试线束?

我在理解测试工具和相关的常用术语(如测试用例,自动化测试中的测试脚本)方面遇到了一些困难.

所以这就是我到目前为止所做的:自动化测试是使用特殊软件(除被测试的软件之外)来控制测试的执行并将实际结果与预期结果进行比较.它还涉及建立测试前提条件.这种测试最适合经常进行的测试.

现在,我遇到了测试工具的一些问题.我读到它包含一组测试用例,输入文件,输出文件和测试脚本.现在我的问题是测试用例和测试脚本之间有什么区别?另外,您如何使用该软件测试AUT的不同功能?我还遇到了一些术语,如套件主和案例代理.

automation

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

这是什么意思?:*(int32*)0 = 0;

在下面的代码中,*(int32 *) 0 = 0;含义是什么?

void
function (void)
{
  ...

  for (;;)
     *(int32 *) 0 = 0;     /* What does this line do? */
}
Run Code Online (Sandbox Code Playgroud)

几点说明:

  • 代码似乎无法访问,因为在该特定代码段之前有一个退出语句.
  • int32typedef'但你不应该太在意它.
  • 对于任何感兴趣的人来说,这段代码来自编译器中语言的运行时.

c

37
推荐指数
4
解决办法
3236
查看次数

为什么C++标准库与编译器捆绑在一起而不是os?

如果这是一个天真的问题,我很抱歉,但是我无法理解这些问题.

为什么C++标准库与不同的编译器实现(g++'s libstdc++clangs libc++)捆绑在一起而不是捆绑在一个(类UNIX)操作系统上,就像C标准库那样?为什么它不与C库一起维护,考虑到它是它的超集?

c c++

25
推荐指数
3
解决办法
2556
查看次数

Xstream no-args构造函数错误

当它试图创建'Transacao'的实例时,我收到以下错误

`Error: Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

---- Debugging information ----

message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor 

cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException 

cause-message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

class : br.com.cbmp.ecommerce.resposta.Transacao 

required-type : br.com.cbmp.ecommerce.resposta.Transacao 

path : /transacao
Run Code Online (Sandbox Code Playgroud)

我知道XStream 1.3.1和JDK7存在一个错误,但我目前正在使用XStream 1.3.1和JDK6.任何想法为什么这个错误仍在发生?

谢谢

java constructor xstream

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

在python中有一种方法可以在我将它传递给函数之前知道对象是否"实现了一个接口"?

我知道这可能听起来像一个愚蠢的问题,特别是对于那些了解python本质的人,但我只是想知道,有没有办法知道一个对象是否"实现了一个接口"以便说出来?

举一个我想说的例子:

假设我有这个功能:

def get_counts(sequence):
     counts = {}
     for x in sequence:
         if x in counts:
             counts[x] += 1
         else:
             counts[x] = 1
     return counts
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法确保传递给函数的对象是iterable我知道在Java或C#中我可以通过让方法接受任何实现特定接口的对象来实现这一点,让我们说(例如)iIterable像这样:void get_counts(iIterable sequence)

我的猜测是,在Python中,我必须采用抢占式内省检查(在一个decorator 或许?中)并exception在对象没有__iter__属性的情况下抛出自定义.但有更多的pythonic方式来做到这一点?

python exception introspection object

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

如何成为一名优秀的Python编码器?

我从c ++开始,但众所周知,c ++是一个怪物.我仍然要接受它,我喜欢C++(它需要进一步编程)

但是,目前我一直在使用python一段时间.我看到你们如何将一些长算法变成简单算法.

我知道编程是一种进步,可能需要多年的经验.我也了解自己 - 我不是一个天生的程序员,软件工程也不是我的首选.但是,我想自己做大量的编程,并创建项目.

我怎样才能成为更好的python程序员?

python

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

在x86中,为什么我有两次相同的指令,使用反向操作数?

我正在用x86asm 做几个实验,试图看看共同语言如何构建映射到汇编.在我目前的实验中,我试图具体了解C语言指针如何映射到寄存器间接寻址.我写了一个像指针程序一样的hello-world:

#include <stdio.h>

int
main (void)
{
    int value    = 5;
    int *int_val = &value;

    printf ("The value we have is %d\n", *int_val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并使用gcc -o pointer.s -fno-asynchronous-unwind-tables pointer.c:: [1] [2] 将其编译为以下asm

        .file   "pointer.c"
        .section        .rodata
.LC0:
        .string "The value we have is %d\n"
        .text
        .globl  main
        .type   main, @function
main:
;------- function prologue
        pushq   %rbp
        movq    %rsp, %rbp
;---------------------------------
        subq    $32, %rsp
        movq    %fs:40, %rax
        movq    %rax, -8(%rbp)
        xorl    %eax, %eax
;---------------------------------- …
Run Code Online (Sandbox Code Playgroud)

c linux assembly gcc x86-64

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

如何在python中对字符串进行二进制编码?

我正在尝试为练习构建一个md5破解器.在此之前,我的代码是:

def offline_wordlist_attack(list_path):
      with fileinput.input(files=(list_path)) as wordlist:
          for word in wordlist:
              md5_hash_object = hashlib.md5() # constructing an md5 hash object
              md5_hash_object.update(binascii.a2b_uu(word))
              word_digest = md5_hash_object.digest() # performing the md5 digestion of the word   
              print(word_digest) # Debug
Run Code Online (Sandbox Code Playgroud)

我的问题是md5_hash_object.update(binascii.a2b_uu(word)).该hashlib的Python 3文档指出传递的字符串update()应该是二进制表示.文档m.update(b"Nobody inspects")用作示例.在我的代码中,我不能简单地附加b在变量前面word.所以我尝试使用binascii库,但该库也在文档中有一条说明:

注意

编码和解码功能不接受Unicode字符串.只能处理bytestring和bytearray对象.

有人可以帮我解决这个问题吗?它变得越来越好.

binary ascii md5 python-3.x

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