我正在努力为下面的班级组织找到一个"pythonic"方法:
我有一个基类,其构造函数初始化了属性,例如:
class Animal(object):
    def __init__(self, class_, species, is_domesticated):
        self.class_ = class_
        self.species = species
        self.is_domesticated = is_domesticated
然后,当我进行子类化时,我想"硬编码"这些属性中的一个或多个,如下所示:
class Mammal(Animal):
    def __init__(self, species, is_domesticated):
        Animal.__init__(self, 'Mammal', species, is_domesticated)
因此,哺乳动物就像这样实例化:
monkey = Mammal('Primate', false)
问题是,我想使用*args以便在更改基类定义时单独保留任何派生类.因此,哺乳动物的定义变为:
class Mammal(Animal):
    def __init__(self, *args):
        Animal.__init(self, *(args + (class_='Mammal',)))
哪个(不用说)看起来很可怕.一些提示将不胜感激=)
假设该函数some_descriptively_named_function返回 4- tupleof 4 个返回参数。我想调用some_descriptively_named_function,遵守 80 个字符的行长度限制,并将所有 4 个输出解压缩到一个描述性命名的变量中:
some_desc_name1, some_desc_name2, some_desc_name3, some_desc_name4 = some_descriptively_named_function() 
一种选择是:
some_desc_name1, some_desc_name2, some_desc_name3, some_desc_name4 = (
    some_descriptively_named_function()
)
但是,对于四个未打包的值,即使这样也可以推动它的行长。如果我想对每个论点做一个简短的评论,要很好地阐述它并不容易。
以下工作,但不清楚这是否被认为是好的或非常糟糕。
(some_desc_name1, # Comment 1
 some_desc_name2, # Comment 3
 some_desc_name3, # Comment 3
 some_desc_name4  # Comment 4
) = some_descriptively_named_function()
这对于行长当然很好,但是尝试考虑 PEP8 如何适用于发生在行首的括号是很奇怪的。
是否有一个既定的(希望与 PEP8 相关的)Python 风格指南?
为什么这会成功
qs = Model.objects.filter(pk=1)
kwargs = {'name': 'me',
           'age_desc': 'getting older'
}
qs.update(**kwargs)
但不是这个?
qs = Model.objects.filter(pk=1)
nt =  collections.namedtuple('nt','name, age_desc')
kwargs = nt('me', 'getting older') 
qs.update(**kwargs)
难道就没有办法使用namedtuples的时候才来开箱参数,而不是类型的字典的django?
比方说,我有一个包含许多子元素的结构,其中一些子结构是结构:
v = [1, 2, 3, [4, (5, 6)]]
如何将这些解包为一系列仅包含结构内容而不包含结构的名称?
尝试使用星号表达式a, b, c, d, e, f = v引发一段ValueError时间会为名称分配结构.我怎样才能解压缩它们以获得:
print(a, b, c, d, e, f)
打印:
1 2 3 4 5 6
我经常对Python的可迭代解包缺乏灵活性感到沮丧.请看以下示例:
a, b = "This is a string".split(" ", 1)
工作良好.正如预期的那样a包含"This"和b包含"is a string".现在让我们试试这个:
a, b = "Thisisastring".split(" ", 1)
现在,我们得到一个ValueError:
ValueError: not enough values to unpack (expected 2, got 1)
不理想,当期望的结果是"Thisisastring"在a和None或更好,但""在b.
有很多黑客可以解决这个问题.我见过的最优雅的是:
a, *b = mystr.split(" ", 1)
b = b[0] if b else ""
不漂亮,并且对Python新手来说非常困惑.
那么最恐怖的方式是什么?将返回值存储在变量中并使用if块?该*varname黑客?别的什么?
我正在使用python 3.6.
我对第09行和第10行的解包感到困惑.我期望dy_outer在09行等于(0,-1)并dy_inner在09行等于(side-1,0).类似地,我期望dx_outer并且dx_inner在第10行分别等于(0,-1)和(side-1,0).
但是,当set_trace关闭时,我发现第09行dy_outer和dy_inner第9行的值分别等于0和-1.和上也是如此dx_outer,并dx_inner从第10行; 它们分别等于0和-1.
offsets 是一个元组的元组,所以当你迭代它时,它应该解包每个元组,而不是第一个元组中的每个元素. 
我对Python范围的直觉是不正确的?
01 def cover(board, lab = 1, top = 0, left =0, side = None):
02    if side is None:
03        side = len(board)
04    
05    s = side // 2
06    
07    offsets = (0, -1), (side-1, 0)
08    
09    for dy_outer, dy_inner in offsets:
10        for dx_outer, dx_inner in offsets:
11            set_trace()
12            if not …我尝试编写一个脚本,根据我对文件的命名,将文件从一个文件夹移动到一组文件夹。
例如,“Physics - a”将从“ts”文件夹移动到“/Physics/Assignments”,以便组织我的笔记。
它在后台持续运行,并在将某些内容放入“ts”文件夹时为这些文件分配新的位置。
我的脚本有效,但分配两个文件后,出现以下错误:
第 14 行,add = name.split('-') ValueError: 没有足够的值来解压(预期为 2,实际为 1)。
我不明白为什么会发生这种情况,也不明白如何解决它。
import os
import time
from datetime import date
def clean():
    os.chdir('/Users/Chadd/Desktop/ts')
    i = 0
    while i < len(os.listdir()):
        i = 0
        
        name, ext = os.path.splitext(os.listdir()[i])
        code, add = name.split('-')
        folder = code.strip().upper()
        if add.strip() == 'a':
            add = 'Assignments'
        if add.strip() == 'p':
            add = 'Past Papers'
        if add.strip() == 'n':
            add = 'Notes'
        if add.strip() == 't':
            add = 'Tutorials'
        today …Very often I process single elements of tuples like this:
size, duration, name = some_external_function()
size = int(size)
duration = float(duration)
name = name.strip().lower()
If some_external_function would return some equally typed tuple I could use map in order to have a (more functional) closed expression:
size, duration, name = map(magic, some_external_function())
Is there something like an element wise map? Something I could run like this:
size, duration, name = map2((int, float, strip), some_external_function())
Update: I know I can …
python functional-programming variable-assignment python-3.x iterable-unpacking
我正在 python 中创建一个函数,它允许我创建两个并行图,并且它们共享两个轴:
\ndef PlotManager(data1,data2,fig):\n    f, (ax1, ax2) = fig.subplots(2, 1, sharey=True,sharex=True)\n\n    #Plot1 sopra\n    x_axis = data1.index\n    #Plot and shade the area between the upperband and the lower band grey\n    ax1.fill_between(x_axis,data1[\'Upper\'],data1[\'Lower\'], color = \'grey\', alpha= 0.5)\n    #Plot the closing price and the moving average\n    ax1.plot(x_axis,data1[\'Close\'],color = \'gold\',lw = 3,label = \'Close Price\', alpha= 0.5)\n    ax1.plot(x_axis,data1[\'SMA\'],color = \'blue\',lw = 3,label = \'Simple Moving Average\', alpha= 0.5)\n    ax1.scatter(x_axis,data1[\'Buy\'],color="green", lw=3,label="Buy",marker = "^", alpha=1)\n    ax1.scatter(x_axis,data1[\'Sell\'],color="red", lw=3,label="Sell",marker = "v", alpha = 1)\n    #Set the …我可以确定Python字典中的顺序吗?
该函数op.GetTangent(id)返回一个包含两个与'vl'和相关的值的字典'vr'.我想以懒惰的方式解开它.
vr, vl = op.GetTangent(id).values()
我可以确定vr并且vl具有正确的价值,还是可以存在交换的情况?
python ×9
python-3.x ×4
args ×1
dictionary ×1
django ×1
inheritance ×1
iterable ×1
matplotlib ×1
oop ×1
pep8 ×1
scope ×1
split ×1
string ×1
while-loop ×1