小编mar*_*eau的帖子

在几个上下文管理器上创建一个"with"块?

假设您有三个通过上下文管理器获取的对象,例如A锁,数据库连接和ip套接字.您可以通过以下方式获取它

with lock:
   with db_con:
       with socket:
            #do stuff
Run Code Online (Sandbox Code Playgroud)

但有没有办法在一个街区内完成?就像是

with lock,db_con,socket:
   #do stuff
Run Code Online (Sandbox Code Playgroud)

此外,如果有一组具有上下文管理器的未知长度的对象,是否有可能以某种方式做到:

a=[lock1, lock2, lock3, db_con1, socket, db_con2]
with a as res:
    #now all objects in array are acquired
Run Code Online (Sandbox Code Playgroud)

如果答案是"不",是不是因为需要这样的功能意味着设计不好,或者我应该建议它?:-P

python with-statement contextmanager

180
推荐指数
4
解决办法
5万
查看次数

如何查看有效的电子邮件地址?

是否有一种很好的方法来检查表单输入使用正则表达式,以确保它是一个正确的样式电子邮件地址?自昨晚以来一直在搜索,如果这是一个子网站的电子邮件地址,那么回答人们关于这个主题的问题的每个人似乎都有问题.

python regex email-address email-validation

179
推荐指数
9
解决办法
25万
查看次数

在单行命令行中执行Python多行语句

我正在使用Python -c来执行单行循环,即:

$ python -c "for r in range(10): print 'rob'"
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,如果我在for循环之前导入模块,则会出现语法错误:

$ python -c "import sys; for r in range(10): print 'rob'"
  File "<string>", line 1
    import sys; for r in range(10): print 'rob'
              ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

将此作为单行程序对我来说很重要,这样我就可以将它包含在Makefile中.

python shell command-line heredoc

178
推荐指数
10
解决办法
14万
查看次数

我可以在Python中执行有序的默认dict吗?

我想结合OrderedDict(),并defaultdict()collections一个对象,这应是一个有序的,默认的字典.这可能吗?

python dictionary

174
推荐指数
7
解决办法
4万
查看次数

在文件之间使用全局变量?

我对全局变量如何工作感到困惑.我有一个大型项目,大约有50个文件,我需要为所有这些文件定义全局变量.

我所做的是在我的项目main.py文件中定义它们,如下所示:

# ../myproject/main.py

# Define global myList
global myList
myList = []

# Imports
import subfile

# Do something
subfile.stuff()
print(myList[0])
Run Code Online (Sandbox Code Playgroud)

我想用myListsubfile.py,如下

# ../myproject/subfile.py

# Save "hey" into myList
def stuff():
    globals()["myList"].append("hey")
Run Code Online (Sandbox Code Playgroud)

我试过的另一种方式,但也没有用

# ../myproject/main.py

# Import globfile    
import globfile

# Save myList into globfile
globfile.myList = []

# Import subfile
import subfile

# Do something
subfile.stuff()
print(globfile.myList[0])
Run Code Online (Sandbox Code Playgroud)

在里面subfile.py我有这个:

# ../myproject/subfile.py

# Import globfile
import globfile

# Save "hey" into myList …
Run Code Online (Sandbox Code Playgroud)

python share globals

174
推荐指数
5
解决办法
21万
查看次数

"this"模块的源代码是什么?

如果您打开Python解释器,并输入"import this",如您所知,它会打印:

Tim Peters的Python之禅

美丽胜过丑陋.
显式优于隐式.
简单比复杂更好.
复杂比复杂更好.
Flat优于嵌套.
稀疏优于密集.
可读性很重要.
特殊情况不足以打破规则.
虽然实用性胜过纯洁.
错误不应该默默地传递.
除非明确沉默.
面对模棱两可,拒绝猜测的诱惑.
应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
虽然这种方式起初可能并不明显,除非你是荷兰人.
现在比永远好.
虽然从未往往比好正确的现在.
如果实施很难解释,这是一个坏主意.
如果实现很容易解释,那可能是个好主意.
命名空间是一个很棒的主意 - 让我们做更多的事情吧!

在python源代码(Lib/this.py)中,这个文本是由一段奇怪的代码生成的:

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx …
Run Code Online (Sandbox Code Playgroud)

python

173
推荐指数
5
解决办法
5万
查看次数

在每个列表元素上调用int()函数?

我有一个包含数字字符串的列表,如下所示:

numbers = ['1', '5', '10', '8'];
Run Code Online (Sandbox Code Playgroud)

我想将每个列表元素转换为整数,所以它看起来像这样:

numbers = [1, 5, 10, 8];
Run Code Online (Sandbox Code Playgroud)

我可以使用循环来完成它,如下所示:

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;
Run Code Online (Sandbox Code Playgroud)

它必须如此丑陋吗?我确信在一行代码中有更多的pythonic方法可以做到这一点.请帮帮我.

python list

172
推荐指数
5
解决办法
22万
查看次数

在Python 2.6中不推荐使用BaseException.message

当我使用以下用户定义的异常时,我收到一条警告,即在Python 2.6中不推荐使用BaseException.message:

class MyException(Exception):

    def __init__(self, message):
        self.message = message

    def __str__(self):
        return repr(self.message)
Run Code Online (Sandbox Code Playgroud)

这是警告:

DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
self.message = message
Run Code Online (Sandbox Code Playgroud)

这有什么问题?我需要更改什么来摆脱弃用警告?

python exception deprecated

168
推荐指数
4
解决办法
8万
查看次数

什么是pythonic方法来检测python'for'循环中的最后一个元素?

我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和"pythonic"方式).有一段代码只能元素之间调用,在最后一个元素中被抑制.

以下是我目前的工作方式:

for i, data in enumerate(data_list):
    code_that_is_done_for_every_element
    if i != len(data_list) - 1:
        code_that_is_done_between_elements
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?

注意:我不想使用hacks,例如使用reduce;)

python for-loop idioms fencepost

166
推荐指数
10
解决办法
15万
查看次数

多处理:如何在类中定义的函数上使用Pool.map?

当我运行类似的东西:

from multiprocessing import Pool

p = Pool(5)
def f(x):
     return x*x

p.map(f, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是,将此作为类的函数:

class calculate(object):
    def run(self):
        def f(x):
            return x*x

        p = Pool()
        return p.map(f, [1,2,3])

cl = calculate()
print cl.run()
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/sw/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/sw/lib/python2.6/threading.py", line 484, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/sw/lib/python2.6/multiprocessing/pool.py", line 225, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Run Code Online (Sandbox Code Playgroud)

我看过Alex Martelli的一篇文章处理同样的问题,但它不够明确.

python pickle multiprocessing

165
推荐指数
10
解决办法
9万
查看次数