在两个不同的python进程之间进行进程间通信的干净而优雅的方法是什么?我目前在操作系统中使用命名管道,但感觉有点hacky.我用dbus服务重写了我的东西,但是看起来当通过SSH会话远程运行代码时,它现在尝试初始化X11,这对于我想要做的事情来说似乎完全没有必要(它们与GUI无关).所以也许dbus有点太重量了.我正准备再次使用套接字重新设计,但它看起来很低级,所以我认为可能有一个更高级别的模块我可以导入和使用,我根本就不知道它的名字,我想我应该问SO第一..
我的要求是能够运行python foo.py并让这个过程就像守护进程那样做,并能够发送消息给它python foo.py --bar.后一个调用应该只是向现有进程发送一个消息并终止,可能带有0成功的返回代码或其他失败的代码(因此需要进行一些双向通信).
在python或标准库中是否存在整数平方根?我希望它是准确的(即返回一个整数),并且如果没有解决方案则吠叫.
目前我推出了自己的天真的:
def isqrt(n):
i = int(math.sqrt(n) + 0.5)
if i**2 == n:
return i
raise ValueError('input was not a perfect square')
Run Code Online (Sandbox Code Playgroud)
但它很难看,我不相信大整数.如果我超过了这个值,我可以遍历正方形并放弃,但我认为做这样的事情会有点慢.另外我想我可能正在重新发明轮子,这样的东西肯定已经存在于python ......
请注意这些线中multiprocessing的标准库的程序包:
dict = dict
list = list
Run Code Online (Sandbox Code Playgroud)
将一些已经可用的名称重新绑定__builtins__到模块范围中有什么意义?它想要实现什么?我在git责备中搜索了一个解释,但这个提交很大,没有相关的评论.
>>> import matplotlib
>>> print matplotlib.rcsetup.all_backends
[u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'Qt5Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'nbAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']
Run Code Online (Sandbox Code Playgroud)
看看所有这些后端!
我需要关心使用哪个后端吗?例如,如果我仅使用TkAgg后端开发和测试我的东西,并且其他人使用我的代码可能GTKAgg在他们的系统上使用后端,那么我的东西可能以我不会注意到的方式为他们打破 - 或者所有后端都需要更多或者更少"工作"同样的方式?
我理解函数如何在for循环中使用range()和zip()可以使用.但是我希望range()输出一个列表 - 就像seq在unix shell中一样.如果我运行以下代码:
a=range(10)
print(a)
Run Code Online (Sandbox Code Playgroud)
输出是range(10),表明它不是列表而是不同类型的对象.zip()打印时有类似的行为,输出类似的东西
<zip object at "hexadecimal number">
Run Code Online (Sandbox Code Playgroud)
所以我的问题是它们是什么,有什么优势使它们成为现实,如何在没有循环的情况下将它们的输出发送到列表?
有没有办法将numpy 2D数组中列的顺序更改为新的任意顺序?例如,我有一个数组
array([[10, 20, 30, 40, 50],
[ 6, 7, 8, 9, 10]])
Run Code Online (Sandbox Code Playgroud)
我想改成它,比方说
array([[10, 30, 50, 40, 20],
[ 6, 8, 10, 9, 7]])
Run Code Online (Sandbox Code Playgroud)
通过应用排列
0 -> 0
1 -> 4
2 -> 1
3 -> 3
4 -> 2
Run Code Online (Sandbox Code Playgroud)
在列上.因此,在新矩阵中,我希望原始的第一列保持原位,第二列移动到最后一列,依此类推.
有一个numpy功能吗?我有一个相当大的矩阵,并期望得到更大的矩阵,所以我需要一个解决方案,如果可能的话,快速到位(排列矩阵是禁止的)
谢谢.
是否有一种干净的方法来修补对象,以便您assert_call*在测试用例中获得帮助程序,而无需实际删除操作?
例如,如何修改该@patch行以获得以下测试传递:
from unittest import TestCase
from mock import patch
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
@patch.object(Potato, 'foo')
def test_something(self, mock):
spud = Potato()
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
Run Code Online (Sandbox Code Playgroud)
我可能会一起使用side_effect,但是我希望有一种更好的方法可以在所有函数,类方法,静态方法,未绑定方法等上以相同的方式工作.
感谢David Beazley的推文,我最近发现新的Python 3.6 f字符串也可以嵌套:
>>> price = 478.23
>>> f"{f'${price:0.2f}':*>20s}"
'*************$478.23'
Run Code Online (Sandbox Code Playgroud)
要么:
>>> x = 42
>>> f'''-{f"""*{f"+{f'.{x}.'}+"}*"""}-'''
'-*+.42.+*-'
Run Code Online (Sandbox Code Playgroud)
虽然我很惊讶这是可能的,但我很遗憾这是多么实际,何时嵌套f字符串是有用的?这可以涵盖哪些用例?
注意:PEP本身没有提到嵌套f字符串,但是有一个特定的测试用例.
是否有一个参考某处确定何时用括号括起元组是否需要?
这是最近让我感到惊讶的一个例子:
>>> d = {}
>>> d[0,] = 'potato'
>>> if 0, in d:
File "<stdin>", line 1
if 0, in d:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 我有一个服务器(SQL Server 2005)有超过300个数据库.我不想一个一个地右键单击并选择Delete.
如何轻松删除所有数据库?