我告诉我第1行和第5行(新的调试/编程,不确定是否有帮助)
def hi():
print 'hi'
def loop(f, n): #f repeats n times
if n<=0:
return
else:
f()
loop(f, n-1)
loop(hi(), 5)
hi
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
为什么它会给我这个错误?
我想匹配除字符串之外的所有字符串"ABC".例:
"A" --> Match
"F" --> Match
"AABC" --> Match
"ABCC" --> Match
"CBA" --> Match
"ABC" --> No match
Run Code Online (Sandbox Code Playgroud)
我尝试过[^ABC],但它忽略了"CBA"(和其他人).
我想解析一个hh:mm:ss字符串.一个简单的是([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 期望2:3:24或02:03:24字符串.
我想更进一步,即使在像这样的情况下也要通过验证
基本上,如果找到一个":",则将":"之前的数字视为MM,将":"之后的数字视为SS.如果发现两个":",则认为是HH:MM:SS
我想出了这种模式.
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常.我想知道任何其他更简单的正则表达式,它可以完成这项工作.
我很确定应该有更多的Pythonic方法 - 但是我想不出一个:如何将二维列表合并到一维列表中?类似于zip/map但有两个以上的迭代器.
示例 - 我有以下列表:
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
我希望有
result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我想出的是:
def add_list(array):
number_items = len(array[0])
result = [0] * number_items
for index in range(number_items):
for line in array:
result[index] += line[index]
return result
Run Code Online (Sandbox Code Playgroud)
但对我来说,这看起来并不是非常优雅/ Pythonic.除了不检查2D阵列中的所有"线"是否具有相同的长度,可以相互添加等等.有什么更好的方法呢?
为什么正则表达式不(?<=fo).*匹配foo(反之(?<=f).*)?
"foo" =~ /(?<=f).*/m => 1
"foo" =~ /(?<=fo).*/m => nil
Run Code Online (Sandbox Code Playgroud)
这似乎只在单线模式打开时发生(点匹配换行符); 没有它,一切都很好:
"foo" =~ /(?<=f).*/ => 1
"foo" =~ /(?<=fo).*/ => 2
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.9.3和2.0.0上测试过.
编辑:更多观察:
添加行尾锚点不会改变任何内容:
"foo" =~ /(?<=fo).*$/m => nil
Run Code Online (Sandbox Code Playgroud)
但与懒惰的量词一起,它"有效":
"foo" =~ /(?<=fo).*?$/m => 2
Run Code Online (Sandbox Code Playgroud)
编辑:还有一些观察:
.+与它的等价物一样工作{1,},但仅限于Ruby 1.9(在这种情况下,这似乎是两者之间唯一的行为差异):
"foo" =~ /(?<=fo).+/m => 2
"foo" =~ /(?<=fo).{1,}/ => 2
Run Code Online (Sandbox Code Playgroud)
在Ruby 2.0中:
"foo" =~ /(?<=fo).+/m => nil
"foo" =~ /(?<=fo).{1,}/m => nil
Run Code Online (Sandbox Code Playgroud)
.{0,} 被破坏(1.9和2.0):
"foo" …Run Code Online (Sandbox Code Playgroud) 这里有没有人使用VB.NET并且强烈偏好或反对使用Not foo Is Nothing而不是foo IsNot Nothing?如果是这样,为什么?
例如
If var1 IsNot Nothing Then
...
End If
Run Code Online (Sandbox Code Playgroud)
和
If Not var1 Is Nothing Then
...
End If
Run Code Online (Sandbox Code Playgroud)
我只是想知道哪一个更好?
他们都同样可以接受吗?
在Python 2中,要获得字符串中十六进制数字的字符串表示,您可以这样做
>>> '\x12\x34\x56\x78'.encode('hex')
'12345678'
Run Code Online (Sandbox Code Playgroud)
在Python 3中,它不再起作用(在Python 3.2和3.3上测试):
>>> '\x12\x34\x56\x78'.encode('hex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex
Run Code Online (Sandbox Code Playgroud)
这里至少有一个答案提到hex在Python 3中已经删除了编解码器.但是,根据文档,它在Python 3.2中被重新引入,作为"字节到字节映射".
但是,我不知道如何使这些"字节到字节映射"工作:
>>> b'\x12'.encode('hex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
Run Code Online (Sandbox Code Playgroud)
而且文档也没有提到(至少不是我看的地方).我一定错过了一些简单的东西,但我看不出它是什么.
我有一个类似于以下内容的字符串:
12,44,foo,bar,(23,45,200),6
Run Code Online (Sandbox Code Playgroud)
我想创建一个与逗号匹配的正则表达式,但只创建不在括号内的逗号(在上面的例子中,除了23和45之后的两个逗号之外的所有逗号).我该怎么做(Java正则表达式,如果这有所不同)?
首先,我发布这个是因为当我在寻找下面问题的解决方案时,我在stackoverflow上找不到一个.所以,我希望在这里添加一点知识库.
我需要处理目录中的一些文件,并且需要以数字方式对文件进行排序.我lambda在wiki.python.org上找到了一些关于排序的例子 - 特别是使用模式 - 我把它放在一起:
#!env/python
import re
tiffFiles = """ayurveda_1.tif
ayurveda_11.tif
ayurveda_13.tif
ayurveda_2.tif
ayurveda_20.tif
ayurveda_22.tif""".split('\n')
numPattern = re.compile('_(\d{1,2})\.', re.IGNORECASE)
tiffFiles.sort(cmp, key=lambda tFile:
int(numPattern.search(tFile).group(1)))
print tiffFiles
Run Code Online (Sandbox Code Playgroud)
我仍然是Python的新手,并且想问社区是否可以对此进行任何改进:缩短代码(删除lambda),性能,样式/可读性?
谢谢Zachary