小编Pho*_*nix的帖子

依赖Python函数参数评估顺序是否安全?

假设在Python中从左到右计算函数参数是否安全?

参考说明它发生的方式,但也许有一些方法来改变这个可能会破坏我的代码的顺序.

我想要做的是为函数调用添加时间戳:

l = []
l.append(f(), time.time())
Run Code Online (Sandbox Code Playgroud)

我知道我可以按顺序评估参数:

l = []
res = f()
t = time.time()
l.append(res, t)
Run Code Online (Sandbox Code Playgroud)

但它看起来不那么优雅,所以如果我可以依赖它,我更喜欢第一种方式.

python arguments operator-precedence

27
推荐指数
2
解决办法
3241
查看次数

python正则表达式是否有理由不编译r'(\ s*)+'?

我不明白为什么'(\s*)+'会出错'nothing to repeat'.同时'(\s?)+'也很好.

我发现这个问题已经有一段时间了解(例如正则表达式错误 - 没有什么可重复)但我仍然在Python 3.3.1中看到它.

所以我想知道这种行为是否有合理的解释.

实际上我想匹配一行重复的单词或数字,例如:

'foo foo foo foo'
Run Code Online (Sandbox Code Playgroud)

我想出来了:

'(\w+)\s+(\1\s*)+'
Run Code Online (Sandbox Code Playgroud)

由于第二组,它失败了:(\1\s*)+ 在大多数情况下,我可能在单词之间不会有超过1个空格,因此(\1\s?)+可行.出于实际目的,该选项也应该起作用(\1\s{0,1000})+

更新: 我想我应该补充一点,我只在python中看到过这个问题.在perl中它起作用:

`('foo foo foo foo' =~ /(\w+)\s+(\1\s*)+/) `
Run Code Online (Sandbox Code Playgroud)

不确定它是否相同,但vim也有效:

`\(\<\w\+\>\)\_s\+\(\1\_s*\)\+`
Run Code Online (Sandbox Code Playgroud)

Update2: 我发现python的另一个regex实现,据说有一天会替换当前的rege.我检查过,上述有问题的情况不会发生错误.该模块必须单独安装.它可以在这里或通过pypi 下载

python regex

9
推荐指数
1
解决办法
317
查看次数

检查是否在Python中设置类实例变量的最佳方法是什么?

我有一个变量,可能会或可能不会在实例中获取值:

class EC():
   __init__(self, a=False):
   ...
   if a: self.__var = ...
Run Code Online (Sandbox Code Playgroud)

后来我想检查实例中是否存在__var.因为在名称前加上__会将内部名称更改为_EC__var,所以检查代码会变得有点乱:

if ''.join(['_',self.__class__.__name__,'__name']) in self.__dict__: ...
Run Code Online (Sandbox Code Playgroud)

上面的代码是否正常?如果不是什么是首选的替代品?

我能想到的一个选择是给__var一些值,例如:

_no_value = object()
...
   def __init__(self, a):
      self.__var = _no_value
      ...
      if a: self.__var = ...
Run Code Online (Sandbox Code Playgroud)

所以稍后我可以将__var_no_value进行比较,而不是将内部变量弄得乱七八糟.

python

3
推荐指数
2
解决办法
8740
查看次数

为什么python正则表达式中的'\ A'在[]内部不起作用?

我试图得到一个正则表达式,它匹配行的开头或某个单词之后的单词.我试过了:

r"[\A|my_word](smth)"
Run Code Online (Sandbox Code Playgroud)

但它失败了,因为它与\ A在这种情况下不匹配.这有什么问题?

事实证明\ A在[]内部不起作用:

In [163]: type(re.search(r"\A123", "123"))
Out[163]: <type '_sre.SRE_Match'>

In [164]: type(re.search(r"[\A]123", "123"))
Out[164]: <type 'NoneType'>
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么.

我正在使用Python 2.6.6

编辑:经过一些评论我意识到我与[\ A | my_word]一起使用的例子很糟糕.实际表达式是[\ AV]以匹配字符串的开头或V.我遇到的主要问题是我很好奇为什么[\ A]不起作用.

python regex

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

标签 统计

python ×4

regex ×2

arguments ×1

operator-precedence ×1