我在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,虽然我认为我得到了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
允许我这样做的属性?
编辑:你的答案中有很多精彩的信息!谢谢大家的所有精彩答案!遗憾的是我只能将一个标记为答案.
我在理解测试工具和相关的常用术语(如测试用例,自动化测试中的测试脚本)方面遇到了一些困难.
所以这就是我到目前为止所做的:自动化测试是使用特殊软件(除被测试的软件之外)来控制测试的执行并将实际结果与预期结果进行比较.它还涉及建立测试前提条件.这种测试最适合经常进行的测试.
现在,我遇到了测试工具的一些问题.我读到它包含一组测试用例,输入文件,输出文件和测试脚本.现在我的问题是测试用例和测试脚本之间有什么区别?另外,您如何使用该软件测试AUT的不同功能?我还遇到了一些术语,如套件主和案例代理.
在下面的代码中,*(int32 *) 0 = 0;
含义是什么?
void
function (void)
{
...
for (;;)
*(int32 *) 0 = 0; /* What does this line do? */
}
Run Code Online (Sandbox Code Playgroud)
几点说明:
int32
是typedef
'但你不应该太在意它.如果这是一个天真的问题,我很抱歉,但是我无法理解这些问题.
为什么C++标准库与不同的编译器实现(g++
's libstdc++
和clang
s libc++
)捆绑在一起而不是捆绑在一个(类UNIX)操作系统上,就像C标准库那样?为什么它不与C库一起维护,考虑到它是它的超集?
当它试图创建'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.任何想法为什么这个错误仍在发生?
谢谢
我知道这可能听起来像一个愚蠢的问题,特别是对于那些了解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方式来做到这一点?
我从c ++开始,但众所周知,c ++是一个怪物.我仍然要接受它,我喜欢C++(它需要进一步编程)
但是,目前我一直在使用python一段时间.我看到你们如何将一些长算法变成简单算法.
我知道编程是一种进步,可能需要多年的经验.我也了解自己 - 我不是一个天生的程序员,软件工程也不是我的首选.但是,我想自己做大量的编程,并创建项目.
我怎样才能成为更好的python程序员?
我正在用x86
asm 做几个实验,试图看看共同语言如何构建映射到汇编.在我目前的实验中,我试图具体了解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) 我正在尝试为练习构建一个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对象.
有人可以帮我解决这个问题吗?它变得越来越好.
python ×4
c ×3
python-3.x ×2
ascii ×1
assembly ×1
attributes ×1
automation ×1
binary ×1
c++ ×1
constructor ×1
declaration ×1
exception ×1
gcc ×1
iterator ×1
java ×1
linux ×1
list ×1
md5 ×1
object ×1
x86-64 ×1
xstream ×1