假设您有三个通过上下文管理器获取的对象,例如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 -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中.
我想结合OrderedDict(),并defaultdict()从collections一个对象,这应是一个有序的,默认的字典.这可能吗?
我对全局变量如何工作感到困惑.我有一个大型项目,大约有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)
我想用myList在subfile.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解释器,并输入"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) 我有一个包含数字字符串的列表,如下所示:
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 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)
这有什么问题?我需要更改什么来摆脱弃用警告?
我想知道对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;)
当我运行类似的东西:
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 ×10
command-line ×1
deprecated ×1
dictionary ×1
exception ×1
fencepost ×1
for-loop ×1
globals ×1
heredoc ×1
idioms ×1
list ×1
pickle ×1
regex ×1
share ×1
shell ×1