我有一个基于python的GTK应用程序,可以加载几个模块.它是从(linux)终端运行的,如下所示:
./myscript.py --some-flag setting
用户可以从程序中下载(使用Git)较新的版本.如果存在/下载,则会出现一个按钮,我希望用新编译的内容(包括依赖项/导入)重新启动程序.优选地,它还将使用内容sys.argv来重新启动它以保持所有标志不变.
所以我找不到/需要的是一个很好的重启过程,杀死程序的当前实例并使用相同的参数启动一个新的.
优选地,该解决方案也适用于Windows和Mac,但它不是必需的.
作为一个最小的案例,我有一个Example类似于一系列其他类的抽象容量.
class Example(object):
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
class Test(Example):
def __init__(self, foo='bar'):
super(Test, self).__init__(foo=foo)
Run Code Online (Sandbox Code Playgroud)
在实际情况下,Example做更多的事情.
有没有办法Test通知PyCharm Test将有一个字段Test.foo甚至更好,让它知道foo预计会是一个字符串?
需要明确的是,请考虑将字段设置委托Example给Test不可能.
我得到的最接近的@ivar是Epydoc,但我无法让它发挥作用
我找到了几个关于“如何找到用户桌面的路径”的问题和答案,但在我看来它们都已不复存在(至少是我找到的那些)。原因是如果用户安装的 Linux 不是英语,他或她很可能在~/Desktop. 例如,对于瑞典语,我相信它在~/Skrivbord. 谁知道用户决定将他或她的桌面放在哪里?
出于这个原因,以下不会做(或它的任何变体):
os.sep.join((os.path.expanduser("~"), "Desktop"))
Run Code Online (Sandbox Code Playgroud)
所以问题是:
在 linux 上,我如何在 python 中获取用户桌面的真实路径而不预设英文默认目录结构?
问题
我需要使用一组候选位置(X和中的值Y)构建一个2D网格.然而,可能存在应该被过滤掉的假阳性候选者,以及假阴性(其中需要针对给定周围位置值的预期位置创建位置).可以预期网格的行和列是直的,并且旋转(如果小的话).
此外,我没有关于(0,0)网格位置的可靠信息.但我知道:
grid_size = (4, 4)
expected_distance = 105
Run Code Online (Sandbox Code Playgroud)
(例外距离只是网格点之间间距的粗略估计,应允许在10%的范围内变化).
示例数据
这是理想的数据,没有误报,也没有漏报.该算法需要能够处理删除多个数据点并添加错误的数据点.
X = np.array([61.43283582, 61.56626506, 62.5026738, 65.4028777, 167.03030303, 167.93965517, 170.82191781, 171.37974684, 272.02884615, 272.91089109, 274.1031746, 274.22891566, 378.81553398, 379.39534884, 380.68181818, 382.67164179])
Y = np.array([55.14427861, 160.30120482, 368.80213904, 263.12230216, 55.1030303, 263.64655172, 162.67123288, 371.36708861, 55.59615385, 264.64356436, 368.20634921, 158.37349398, 54.33980583, 160.55813953, 371.72727273, 266.68656716])
Run Code Online (Sandbox Code Playgroud)
码
以下函数评估候选项并返回两个词典.
第一个具有每个候选位置(作为2长度元组)作为键和值是位于右侧和下方的位置的2长度元组(使用来自图像如何显示的逻辑).这些邻居本身要么是2长的元组坐标,要么是a None.
第二个字典是第一个字典的反向查找,使得每个候选者(位置)具有支持它的其他候选者位置的列表.
import numpy as np
from collections import defaultdict
def get_neighbour_grid(X, Y, expect_dist=(105, 105)):
t1 = (expect_dist[0] + expect_dist[1]) / 2.0 * …Run Code Online (Sandbox Code Playgroud) 我需要测试从文件(和evaled)读入的对象ConfigParser是否为映射.
这里的术语不完全确定,但让我解释一下.鉴于我的对象被调用,O它必须支持以下列方式使用:
def tester(**kwargs):
print kwargs
tester(**O)
Run Code Online (Sandbox Code Playgroud)
如果O不支持**,则会导致TypeError,例如TypeError: test() argument after ** must be a mapping, not tuple.
这是一个非常简单的场景,但我需要知道O在使用之前它会工作,我需要绝对肯定它不会失败.如果我测试O的是可迭代的,我会使用类似的东西:
try:
iter(O)
except:
O = tuple()
Run Code Online (Sandbox Code Playgroud)
正如In Python中所讨论的,如何确定对象是否可迭代?
我找不到映射的任何并行.如在相同的答案上面所讨论的,使用isinstance和collections不是好的解决方案.
因此,在加载像这样的对象时,我必须将我的测试器函数(没有打印)作为我自己的映射测试
try:
tester(**O)
except TypeError:
O = {}
Run Code Online (Sandbox Code Playgroud)
或者python是否有内置的方法来测试这个,就像迭代一样?似乎应该有一个.
编辑
实际上上面的链接答案从未反对isinstance方法,应该更好地阅读它...
我怎么能用逗号分割一个字符串,其中包含逗号本身?我们说这个字符串是:
object = """{"alert", "Sorry, you are not allowed to do that now, try later", "success", "Welcome, user"}"""
Run Code Online (Sandbox Code Playgroud)
如何确保在拆分后我只获得四个元素?
我有一个非常混乱的情节,带有需要很长的 y-ticklabels。我已经将它们用textwrap. 然而,这使得标签在类别之间重叠(或至少过于接近)。
我无法通过间隔刻度、放大图形、更改字体或缩小文本来解决它。(我已经突破了这些限制)
在我看来,如果我可以将行间距/高度调整为小于字体要求的值,我可以解决并使其工作。
因此,为简单起见,想象一下以下刻度标签迫切需要行/行高度之间更短的行距:
from matplotlib import pyplot as plt
plt.barh(0.75, 10, height=0.5)
plt.ylim(0, 2)
plt.yticks([1], ["A very long label\nbroken into 2 line"])
plt.subplots_adjust(left=0.3)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我检查plt.tick_params()了rcParams没有找到任何明显的解决方案。我正在使用乳胶来格式化文本,但尝试\hspace(0.5em}在刻度标签字符串中使用似乎不起作用/只会让事情变得更糟。
关于如何减少行距的任何建议将不胜感激。
我有两个数组,看起来像这样:
X = np.array([ 157, 262, 368, 472, 577, 682, 786, 891, 996, 1100, 1204,
1310, 1415, 1520, 1625, 1731, 1879])
Y = np.array([ 30, 135, 240, 345, 450, 555, 660, 765, 870, 975, 1080,
1185, 1290, 1395, 1500, 1605])
Run Code Online (Sandbox Code Playgroud)
阵列将:
我想Z基于以下内容将这两个插入到一个新数组中:
Xi可以仅包括Z元素.(同样的规则适用于中的元素.)YjYYabs(Xi - Yj)XYjabs(Xi - Yj)Y我看到我可以通过一堆嵌套的for循环来做到这一点,但是我想知道是否有一些更聪明,更整洁的方法呢?
(我意识到,我提出这个问题的方式,听起来像是从教科书中剪下来的.它不是.但也许这是一个经典的排序功能,谁知道,但对我来说,作为一名生物学家......我只能说是我不知道如何以高效,整洁的方式解决它.)
编辑:不是那么漂亮的例子
new_list = list()
for i in X:
delta_i = np.abs(Y - …Run Code Online (Sandbox Code Playgroud) 我想确保我只打印最多80个字符的长行,但我有一个字符串s,可以更短,更长.所以我想把它分成几行而不分裂任何单词.
长字符串示例:
s = "This is a long string that is holding more than 80 characters and thus should be split into several lines. That is if everything is working properly and nicely and all that. No mishaps no typos. No bugs. But I want the code too look good too. That's the problem!"
Run Code Online (Sandbox Code Playgroud)
我可以设计出这样做的方法,例如:
words = s.split(" ")
line = ""
for w in words:
if len(line) + len(w) <= 80:
line += "%s " …Run Code Online (Sandbox Code Playgroud)