可能重复:
在Python for循环中访问索引
list = [1,2,2,3,5,5,6,7]
for item in mylist:
...
Run Code Online (Sandbox Code Playgroud)
如何在循环中的某个时刻找到我正在查看的项目的索引?我可以看到有一个index()方法,lists但它总是给我一个值的第一个索引,所以它不适用于具有重复项的列表
foo() 没有定义.
>>> 0 and foo() (1)
0 # trivial
>>> 0 and foo() or 1 (2) # expecting it as 0 and (foo() or 1)
1 # does NOT short-circuit on 0
>>> 1 or foo() (3) # trivial
1
>>> 1 or foo() and 0 (4) # expecting it as 1 or (foo() and 0)
1 # DOES short-circuit on 1
Run Code Online (Sandbox Code Playgroud)
我没有看到(2)和(4)的一致行为.
如果我们按(2)的评估方式去:
0 and foo() or 1
false or true (1)
true (1)
Run Code Online (Sandbox Code Playgroud)
然后我希望(4)为:
1 or …Run Code Online (Sandbox Code Playgroud) class Foo:
pass
>>> f = test.Foo()
Run Code Online (Sandbox Code Playgroud)
让我们看看类实例......
>>> dir(f)
['__add__', [__class__] ...]
Run Code Online (Sandbox Code Playgroud)
哦!让我们看看类实例元数据......
>>> dir(f.__class__)
['__add__', [__class__] ...]
Run Code Online (Sandbox Code Playgroud)
嗯...期待属性__class__; 但返回的属性f
尝试打击和试用......
>>> dir(f.__class__.__class__)
['__abstractmethods__', '__base__' ...]
Run Code Online (Sandbox Code Playgroud)
嗯...为什么两次魅力?
我有一个自动生成C代码的python脚本.这是一个小片段:
source = open("auto_comps.c", "w")
filter_proto = """bool filter_%s_%s(char *record,
size_t field_offset,
uint64_t value,
uint64_t delta)"""
...
for op in 'eq', 'ne', 'lt', 'gt', 'le', 'ge':
for atype in 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t':
source.write(filter_proto%(op,atype))
Run Code Online (Sandbox Code Playgroud)
我不想在脚本中为C代码显式创建缩进.目前我让脚本生成带有haywire缩进的代码,然后使用IDE选择整个代码并从那里缩进.
但是,因此每次我必须调整脚本时,我必须手动执行此过程.此外,另一个开发人员可能没有拥有IDE的奢侈品,可能会疯狂地看着自动生成的C代码.
有没有一种方法可以在关闭源文件之前以编程方式从脚本中缩进代码?
潜入Python -
这是fileinfo.py本书中使用的一小段.这是打开MP3文件并读取最后128个字节以获取并稍后解析元数据.
try:
fsock = open(filename, "rb", 0)
try:
fsock.seek(-128, 2)
tagdata = fsock.read(128)
finally:
fsock.close()
.
. # process tagdata: will NEVER raise IOError though
.
except IOError:
pass
Run Code Online (Sandbox Code Playgroud)
这可以重构为:
try:
fsock = open(filename, "rb", 0)
try:
fsock.seek(-128, 2)
tagdata = fsock.read(128)
except IOError:
pass
finally:
fsock.close()
.
. # process tagdata
.
Run Code Online (Sandbox Code Playgroud)
在我学习的时候,我甚至习惯了这个问题Java.我们是否应该保留可以在try..except块内实际引发异常的逻辑,或者为了保持在一个地方执行某项特定工作的代码; 保留其他代码,永远不会在一个try...except?
python ×5