我在解释器上测试了一些代码,我注意到了这个sqlite3.Row
类的一些意外行为.
我的理解是print obj
总是得到相同的结果print str(obj)
,并且obj
在解释器中输入将得到相同的结果print repr(obj)
,但是不是这样的情况sqlite3.Row
:
>>> print row # the row object prints like a tuple
(u'string',)
>>> print str(row) # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>
>>> row # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
Run Code Online (Sandbox Code Playgroud)
我认为sqlite3.Row
必须是它的子类tuple
,但我仍然不明白幕后可能会导致这种行为的是什么.有谁能解释一下?
这是在Python 2.5.1上测试的,不确定其他Python版本的行为是否相同. …
我正在阅读文档中有效十进制字符串语法的词法定义,decimal.Decimal
以下内容让我觉得奇怪:
nan ::= 'NaN' [digits] | 'sNaN' [digits]
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来很奇怪,但显然数字可以包含在'NaN'之后没有任何问题,但是'NaN'之后除了数字之外的任何字符都会引发InvalidOperation
.
>>> Decimal('NaN10')
Decimal('NaN10')
Run Code Online (Sandbox Code Playgroud)
所以我对此有几个问题:
NaN
?NaN
数字的实例与"正常"的行为有何不同NaN
?NaN
除了以这种方式初始化之外,有没有办法获得数字?Decimal
类之外还有其他地方NaN
吗?谢谢!
我正在努力学习python,而且我对它很陌生,我无法想象这一部分.基本上,我现在正在做的是获取网页的源代码,并取出所有不是文字的东西.
网页上有很多\n和\ t,我想找到一些可以找到它的东西,并删除它与下一个'之间的所有内容.
def removebackslash(source):
while(source.find('\') != -1):
startback = source.find('\')
endback = source[startback:].find(' ') + startback + 1
source = source[0:startback] + source[endback:]
return source
Run Code Online (Sandbox Code Playgroud)
就是我拥有的.它不会像这样工作,因为\'
它不会关闭字符串,但是当我更改\
为时\\
,它会将字符串解释为\\
.我无法弄清楚任何被解释的东西'\'
考虑一个包含以下内容的文本文件:
apple apple pear plum apple cherry pear apple
cherry plum plum pear apple cherry pear pear apple plum
Run Code Online (Sandbox Code Playgroud)
并考虑perl one-liner:
perl -pe "s/apple/green/g and s/pear/yellow/g and s/plum/blue/g and s/cherry/red/g" < fruits.txt
Run Code Online (Sandbox Code Playgroud)
这取代了每种水果的颜色.
现在,这可以用一个s /// g以某种方式完成,而不是上面的四个吗?
我也关注水果词的顺序.
如果我的样本不包含"apple",则其他替换都不会完成.我该怎么解决这个问题?
请注意:我希望将解决方案保持为单行.
因此,定义哈希,读取文件以及需要多行perl代码的其他解决方案并不能让我前进.
这更像是一种好奇心,而不是一个项目所依赖的生死攸关的问题.现在困扰我好几天了,并且认为一个更有经验的perl用户可以帮助解决心跳,或者让我摆脱困境,直接告诉我这不可能按照我想要的方式完成.
如有疑问,我通常会将导入语句放在模块的顶部.通常,这会减少重复,这很好.但是,在只有一个函数(或类)需要导入的情况下,是否存在性能下降?
在调用函数时,是否只导入以下内容?
def func():
from task import test
Run Code Online (Sandbox Code Playgroud)
如果是这样,我想这可能是一个微小的效率.我还假设你可以为更快的垃圾收集和变量作用域获得一些附加点,因为导入的对象不会被添加到全局字典中.正如另一张海报很好地说:
这主要是由于查找变量.查找全局范围中的变量需要查找字典.相反,编译器静态地确定本地名称并通过索引引用它们,因此不需要查找字典.
那些公平的假设是我完全偏离基础吗?
谢谢
我有一个看起来像这样的结构:
[ {'id': 4, 'children': None},
{'id': 2, 'children':
[ {'id': 1, 'children':
[ {'id': 6, 'children': None},
{'id': 5, 'children': None} ]
},
{'id': 7, 'children':
[ {'id': 3, 'children': None} ]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我还有一个选定的ID列表[4, 5, 6, 7]
.我想遍历列表,并为列表中的每个对象添加selected
一个值,1
如果选中它,0
如果不是,则添加值.
目前我正在使用此函数递归执行此操作:
def mark_selected(tree, selected):
for obj in tree:
obj['selected'] = 1 if obj['id'] in selected else 0
if obj['children'] is not None:
obj['children'] = mark_selected(obj['children'], selected)
return tree
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但我想知道是否有更聪明的方法来做到这一点,可能使用列表理解或生成器.
任何人都可以为此提出更优雅的解决方案吗?
我正在读一个有损的比特流,我需要一种方法来恢复尽可能多的可用数据.可以有1代替0和0代表1,但准确度可能超过80%.
如果算法可以补偿丢失/太多位,则可以获得奖励.
我正在读取的信号源是噪声模拟(麦克风通过FFT),读取时序可能因计算机速度而异.
我记得读过CD-ROM中使用的算法吗?层,所以我猜测使用几个层是一个不错的选择.我不记得细节,所以如果有人可以分享一些很棒的想法!:)
编辑:添加样本数据
Best case data: in: 0000010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111 out: 0010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111011 Bade case (timing is off, samples are missing): out: 00101010000101101001011011001110000001001001011011001110000001001000011000000100001011101010011011001 in: 00111101001011111110010010111111011110000010010000111000011101001101111110000110111011110111111111101
Edit2:我能够控制发送的数据.目前正在尝试实现简单的XOR检查(虽然这还不够).
我昨天在这个问题上看到了一些我以前没见过的代码,特别是这一行:
for xyz[num] in possible[num]:
...
Run Code Online (Sandbox Code Playgroud)
因此,当此循环运行时,元素将possible[num]
被分配到xyz
位置的列表num
.我真的很困惑,所以我做了一些测试,这里有一些更明确的等效代码:
for value in possible[num]:
xyz[num] = value
...
Run Code Online (Sandbox Code Playgroud)
我绝对打算总是使用第二种格式,因为我发现第一种格式比它的价值更令人困惑,但我很好奇......所以:
是否有充分的理由使用这个"功能",如果没有,为什么允许?
以下是我提出的几个愚蠢的用例(愚蠢因为有更好的方法可以做同样的事情),第一个用于将字母表的字母旋转13个位置,第二个用于创建字典,将字符从rot13映射到字符13个位置.
>>> import string
>>> rot13 = [None]*26
>>> for i, rot13[i%26] in enumerate(string.ascii_lowercase, 13): pass
...
>>> ''.join(rot13)
'nopqrstuvwxyzabcdefghijklm'
>>> rot13_dict = {}
>>> for k, rot13_dict[k] in zip(rot13, string.ascii_lowercase): pass
...
>>> print json.dumps(rot13_dict, sort_keys=True)
{"a": "n", "b": "o", "c": "p", "d": "q", "e": "r", "f": "s", "g": "t", "h": "u", "i": "v", …
Run Code Online (Sandbox Code Playgroud) 我有一个充满IP地址的列表.我想遍历列表并打印每个IP地址.当我尝试这样做时:
def printList(theList):
for item in theList:
print item
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
['8.0.226.5']
['8.0.247.5']
['8.0.247.71']
['8.0.249.28']
['8.0.249.29']
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切,包括循环中的"print item [0]".我究竟做错了什么?
我目前正在使用以下内容来计算两次差异.外出非常快,因此无论如何我都不需要显示仅为0.00的小时和分钟.我如何在Python中实际移位小数位?
def time_deltas(infile):
entries = (line.split() for line in open(INFILE, "r"))
ts = {}
for e in entries:
if " ".join(e[2:5]) == "OuchMsg out: [O]":
ts[e[8]] = e[0]
elif " ".join(e[2:5]) == "OuchMsg in: [A]":
in_ts, ref_id = e[0], e[7]
out_ts = ts.pop(ref_id, None)
yield (float(out_ts),ref_id[1:-1], "%.10f"%(float(in_ts) - float(out_ts)))
INFILE = 'C:/Users/kdalton/Documents/Minifile.txt'
print list(time_deltas(INFILE))
Run Code Online (Sandbox Code Playgroud)