让我们假设我有一个这样的列表:
mylist = ["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
要获得打印的值及其索引,我可以enumerate
像这样使用Python的函数
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在里面使用它时,list comprehension
它给了我这个错误
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:在列表理解中使用枚举的正确方法是什么?
我有一个非常基本的模板(basic_template.html),并希望填写使用另一个部分模板格式化的数据.basic_template.html可能包含使用部分模板格式化的一些内容.
我应该如何构建views.py中的代码?
我这样做的原因是稍后将使用Ajax填充.我这样做了吗?
我mock
在Python中使用起来相当困难:
def method_under_test():
r = requests.post("http://localhost/post")
print r.ok # prints "<MagicMock name='post().ok' id='11111111'>"
if r.ok:
return StartResult()
else:
raise Exception()
class MethodUnderTestTest(TestCase):
def test_method_under_test(self):
with patch('requests.post') as patched_post:
patched_post.return_value.ok = True
result = method_under_test()
self.assertEqual(type(result), StartResult,
"Failed to return a StartResult.")
Run Code Online (Sandbox Code Playgroud)
测试实际上返回正确的值,但是r.ok
是Mock对象,而不是True
.你如何在Python的mock
库中模拟属性?
我正在通过标准的Django教程为应用程序创建管理员.在设置中评论管理相关的东西并运行syncdb后,我收到此消息:
DoesNotExist at /admin/ Site matching query does not exist.
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题吗?
在Python中,假设我有一些继承自Shape的类Circle.形状需要x坐标和y坐标,此外,圆需要半径.我希望能够通过做类似的事情来初始化Circle,
c = Circle(x=1., y=5., r=3.)
Run Code Online (Sandbox Code Playgroud)
Circle继承自shape,因此我需要使用命名参数__init__
,因为不同的类需要不同的构造函数.我可以手动设置x,y和r.
class Shape(object):
def __init__(self, **kwargs):
self.x = kwargs['x']
self.y = kwargs['y']
class Circle(Shape):
def __init__(self, **kwargs):
super(Circle, self).__init__(**kwargs)
self.r = kwargs['r']
Run Code Online (Sandbox Code Playgroud)
或者,我可以自动使用我的圆圈属性 self.__dict__.update(kwargs)
class Shape(object):
def __init__(self, **kwargs):
self.__dict__.update(**kwargs)
class Circle(Shape):
def __init__(self, **kwargs):
super(Circle, self).__init__(**kwargs)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是代码更少,我不需要维护样板self.foo = kwargs['foo']
.缺点是Circle不需要哪些参数.这被认为是作弊还是这种好风格(只要Circle的界面有详细记录)?
谢谢大家,感谢您的深思熟虑.在self.__dict__.update(**kwargs)
我试验组织我的代码时,hack对我很有用,但我会确保通过明确地正确传递参数并在生产代码中进行明确的错误检查来替换它.
也许这更像是一个样式问题,而不是技术问题,但我有一个带有几个成员变量的python类,我想让它工作,以便在用户首次创建类的实例时初始化一些成员变量(即在__init__
函数中)我希望从稍后将调用的成员函数的参数定义其他成员变量.所以我的问题是我应该初始化函数中的所有成员变量__init__
(并将稍后定义的变量设置为虚拟值)或者在__init__
函数中初始化一些变量,在稍后的函数中初始化一些变量.我意识到这可能很难理解,所以这里有几个例子.
此示例var3
最初在__init__
函数中设置为0 ,然后在my_funct函数中设置为所需的值.
class myClass(object):
def __init__(self,var1,var2):
self.var1=var1
self.var2=var2
self.var3=0
def my_funct(self,var3):
self.var3=var3
Run Code Online (Sandbox Code Playgroud)
并且在此示例中,var3
没有在所限定的所有__init__
功能
class myClass(object):
def __init__(self,var1,var2):
self.var1=var1
self.var2=var2
def my_funct(self,var3):
self.var3=var3
Run Code Online (Sandbox Code Playgroud)
我认为任何一种方式都不会产生很大的不同(可能是内存使用量略有不同).但我想知道其中一个是否因为某些原因而优先于另一个.
我正在使用Django 1.3,我意识到它有一个collectstatic命令来收集静态文件到STATIC_ROOT.这里我有一些其他需要使用STATICFILES_DIR提供的全局文件.
我可以让他们使用相同的目录吗?
谢谢.
我想为没有模型的管理面板创建自定义页面.首先我将index.html复制到项目文件夹:
mysite/
templates/
admin/
index.html
Run Code Online (Sandbox Code Playgroud)
然后添加到应用程序阻止我的代码:
<div class="module">
<table summary="{% blocktrans with name="preferences" %}Models available in the preferences application.{% endblocktrans %}">
<caption><a href="preferences" class="section">{% blocktrans with name="preferences" %}Preferences{% endblocktrans %}</a></caption>
<tr>
<th scope="row"><a href="preferences">Preferences</a></th>
<td><a href="preferences" class="changelink">{% trans 'Change' %}</a></td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
这很好用,然后我创建新页面/templates/admin/preferences/preferences.html并添加到urls.py:
url(r'^admin/preferences/$', TemplateView.as_view(template_name='admin/preferences/preferences.html')),
Run Code Online (Sandbox Code Playgroud)
并将代码添加到preferences.html:
{% extends "admin/base_site.html" %}
{% block title %}Test page{% endblock %}
Run Code Online (Sandbox Code Playgroud)
运行它并查看错误消息"请求的管理页面不存在.".我做错了什么?
我对这两个术语感到困惑,这就是我所知道的:
多态性是通过公共接口处理不同类型的对象的能力.鸭子打字时,是一种动态类型,允许不同类型的对象响应相同的方法.
据我所知,多态性更多的是创建一个可以跨不同类共享的接口.而鸭子打字是关于松散打字,只要在消息的接收者上找到方法就可以调用方法.
它是否正确?我对两者感到很困惑,他们似乎有关系,但我不知道他们的关系是什么.非常感谢提前!
我正在阅读Python文档中的赋值语句(http://docs.python.org/reference/simple_stmts.html#assignment-statements).
因此引用:
如果目标是括在括号中或方括号中的目标列表:对象必须是与目标列表中的目标具有相同数量的项目的可迭代对象,并且其项目从左到右分配给相应的目标.
读完之后,我想写一个这样的样本:
a = 5
b = 4
a, b = a + b, a
print a, b
Run Code Online (Sandbox Code Playgroud)
我的假设是a和b都应该具有9的值.
但是,我被证明是错的.'a'的值为9,'b'的值为5.
有人可以帮助我更好地理解这一点吗?为什么要分配旧值'a'而不是新值?根据文档,首先会分配一个值?我错过了什么吗?
python ×8
django ×4
oop ×3
django-admin ×2
comma ×1
dictionary ×1
django-sites ×1
django-views ×1
duck-typing ×1
html ×1
iteration ×1
list ×1
mocking ×1
polymorphism ×1
python-mock ×1
testing ×1
tuples ×1
unit-testing ×1