我正在用Python编写脚本并遇到一些问题:
class LightDMUser(QObject):
def __init__(self, user):
super(LightDMUser, self).__init__()
self.user = user
@pyqtProperty(QVariant)
def background(self): return self.user.get_background()
@pyqtProperty(QVariant)
def display_name(self): return self.user.get_display_name()
@pyqtProperty(QVariant)
def has_messages(self): return self.user.get_has_messages()
@pyqtProperty(QVariant)
def home_directory(self): return self.user.get_home_directory()
@pyqtProperty(QVariant)
def image(self): return self.user.get_image()
@pyqtProperty(QVariant)
def language(self): return self.user.get_language()
@pyqtProperty(QVariant)
def layout(self): return self.user.get_layout()
@pyqtProperty(QVariant)
def layouts(self): return self.user.get_layouts()
@pyqtProperty(QVariant)
def logged_in(self): return self.user.get_logged_in()
@pyqtProperty(QVariant)
def name(self): return self.user.get_name()
@pyqtProperty(QVariant)
def real_name(self): return self.user.get_real_name()
@pyqtProperty(QVariant)
def session(self): return self.user.get_session()
Run Code Online (Sandbox Code Playgroud)
如您所见,此代码非常多余.我尝试像这样冷凝它:
class LightDMUser(QObject):
attributes = ['background', 'display_name', 'has_messages', 'home_directory', …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个合理的函数定义weighted_sample,它不会为给定权重列表返回一个随机索引(这类似于
def weighted_choice(weights, random=random):
""" Given a list of weights [w_0, w_1, ..., w_n-1],
return an index i in range(n) with probability proportional to w_i. """
rnd = random.random() * sum(weights)
for i, w in enumerate(weights):
if w<0:
raise ValueError("Negative weight encountered.")
rnd -= w
if rnd < 0:
return i
raise ValueError("Sum of weights is not positive")
Run Code Online (Sandbox Code Playgroud)
给出一个具有恒定权重的分类分布)但随机抽样k的那些,没有替换,就像random.sample行为相比random.choice.
就像weighted_choice可以写成一样
lambda weights: random.choice([val for val, cnt in enumerate(weights) …Run Code Online (Sandbox Code Playgroud)