在史前时期(Python 1.4),我们做到了:
fp = open('filename.txt')
while 1:
line = fp.readline()
if not line:
break
print line
Run Code Online (Sandbox Code Playgroud)
在Python 2.1之后,我们做了:
for line in open('filename.txt').xreadlines():
print line
Run Code Online (Sandbox Code Playgroud)
在我们在Python 2.3中获得方便的迭代器协议之前,可以做到:
for line in open('filename.txt'):
print line
Run Code Online (Sandbox Code Playgroud)
我见过一些使用更详细的例子:
with open('filename.txt') as fp:
for line in fp:
print line
Run Code Online (Sandbox Code Playgroud)
这是前进的首选方法吗?
[编辑]我得到了with语句确保关闭文件...但为什么不包含在文件对象的迭代器协议中?
我不是百分百肯定,但我相信我在家用和办公室PC上安装了Windows安装程序的v5节点.
在我的家用电脑上,全局安装发生在%APPDATA%下:
(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd
Run Code Online (Sandbox Code Playgroud)
在我的办公室电脑上,他们在程序文件下:
(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd
Run Code Online (Sandbox Code Playgroud)
我需要向PyCharm的文件监视器提供许多这些全局工具的完整路径,并且由于我共享它的项目文件,因此在用户文件夹下没有全局资源是有意义的.
为什么全局安装最终会出现在不同的文件夹中,如何强制它们到达所有团队成员共有的位置?
我们有 100 多个私有包,到目前为止我们一直在使用 s3pypi 在 s3 存储桶中设置私有 pypi。我们的私有包相互依赖(以及公共包),并且(当然)我们的 GitLab 管道找到它所依赖的包的最新功能版本是很重要的。即我们对最新签入的代码不感兴趣。我们仅在测试之后创建新轮子,并且 qa 已经运行到 master 的推送(这是解释-e <vcs>
需求不起作用的冗长方式)。
我们的设置非常有效,直到有人在官方 pypi 上创建了一个新的公共包,该包隐藏了我们的包名称之一。我们可以通过增加版本号来强制选择我们的私有包,使其高于 pypi.org 上的新包 - 或者通过将我们的包重命名为尚未在 pypi.org 上使用的内容。
这显然是一个笨拙和脆弱的解决方案,但显然功能是这样设计的。
在初始存储桶设置后 s3pypi 不需要维护或管理。上面的票建议使用devpi但这似乎是一个非常繁重的解决方案,需要管理/监控/等。
GitLab 的 pypi 解决方案似乎处于单个包级别(这意味着我们必须列出多达 100 个以上的 url——每个包一个)。这似乎不切实际,但也许我不明白一些东西(我也可以看到我们组下的包注册表菜单,但文档指向“package-pypi”文档)。
我们不可能是第一个遇到这个问题的小公司..?有没有比在 pypi.org 上注册我们所有包的虚拟版本更好的方法(版本 = 0.0.1,所以 s3pypi 版本将是首选)?
使用我认为非常标准的嵌入式svg:
<!DOCTYPE html>
<html>
<body style="padding:50px">
<svg width="100" height="100">
<circle cx="50" cy="50" r="20" />
</svg>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
IE(11)给我一个警告"HTML1500:标签不能自动关闭.使用明确的结束标签." (DevTools,Console选项卡).
确实,如果我<circle..
改为:
<circle cx="50" cy="50" r="20"></circle>
Run Code Online (Sandbox Code Playgroud)
警告消失了,但这对我来说很奇怪..
IE devtools偶尔会发现真正的非闭合标记错误,因此看到它从这种噪声中变得无用时会很难过.
有没有办法让IE变得快乐,而不是在各处添加结束标签?
更新:请注意,问题是关于"外国元素",而不是"虚空元素"(http://www.w3.org/html/wg/drafts/html/master/single-page.html#elements-2).<svg>
不是自我关闭的(它被定义为属于Container元素类别:http://www.w3.org/TR/SVG/struct.html#SVGElement).
<circle..
被定义为基本形状元素(http://www.w3.org/TR/SVG/shapes.html#CircleElement),这意味着它是自动关闭的.在阅读html5规范的8.1.2时:
其开始标记被标记为自闭的外来元素不能包含任何内容(因为没有结束标记,因此不能在开始标记和结束标记之间放置内容).其开始标记未标记为自闭合的外部元素可以包含文本,字符引用,CDATA部分,其他元素和注释,但文本不得包含字符U + 003C LESS-THAN SIGN(<)或不明确的&符号.
看来(我)像它说的内部标签<svg>
元素(即外来元素)是自动关闭,如果SVG规格的说,他们是和定义的开始标记(8.1.2.1)时,#6说,/
在<tagname ... />
是可选的,例如<br/>
,但不是<circle ../>
:
然后,如果元素是void元素之一,或者如果元素是外来元素,则可能存在单个U + 002F SOLIDUS字符(/).此字符对void元素没有影响,但在外部元素上,它将开始标记标记为自动关闭.
所以我认为该文件符合原样.我不确定使用结束</circle>
标签是否符合要求.
我刚开始自学Python,我需要一些关于这个脚本的帮助:
old_string = "didnt work"
new_string = "worked"
def function():
exec("old_string = new_string")
print(old_string)
function()
Run Code Online (Sandbox Code Playgroud)
我想得到它old_string = "worked"
.
我正在使用Sphinxdoc生成api文档,并且在编写docstring时遇到了pep8一致性问题.
如下所示,OWASP站点的链接在第105列结束,远远超过pep8规定的最大行长度
def handle_csrf(...):
"""The general recommendation by people in the know [OWASP]_, is
'to implement the Synchronizer Token Pattern (STP_)'.
.. [OWASP] The Open Web Application Security Project
(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)
.. _STP: http://www.corej2eepatterns.com/Design/PresoDesign.htm
"""
Run Code Online (Sandbox Code Playgroud)
有没有办法包装网址,同时仍然保持生成的文档中的URL?
插入反斜杠不起作用.
我有一个现有项目,其中包含一个使用语义变量的 scss 文件:
$background-color: white;
body {
background-color: $background-color;
}
Run Code Online (Sandbox Code Playgroud)
当我向正文添加主题类时,我想将背景更改为黑色:
<body class="theme-dark">...</body>
Run Code Online (Sandbox Code Playgroud)
如果我删除课程(或切换到主题灯),则返回白色。
我还没有找到任何轻量级的方法来在 scss 中执行此操作(为每个主题参数化一个类似乎是一种非常难以维护的方法)。
我找到了一个混合 scss/css-自定义属性解决方案:
原来的:
.theme-light {
--background-color: white;
}
Run Code Online (Sandbox Code Playgroud)
更新(基于阿马尔的回答):
:root {
--background-color: white;
}
.theme-dark {
--background-color: black;
}
$background-color: var(--background-color);
body {
background-color: $background-color;
}
Run Code Online (Sandbox Code Playgroud)
将 scss 变量定义为具有 css 变量扩展作为值,即(从上面):
$background-color: var(--background-color);
Run Code Online (Sandbox Code Playgroud)
生成以下 css:
:root { --background-color: white; }
.theme-dark { --background-color: black; }
body { background-color: var(--background-color); }
Run Code Online (Sandbox Code Playgroud)
这似乎就是我们想要的......?
我喜欢它,因为它只需要更改$background-color
(不是非常大的 scss 文件中的每个用法)的定义,但我不确定这是否是一个合理的解决方案?我对 scss 还很陌生,所以也许我错过了一些功能..?
我需要访问search_fields
模型的管理选项上定义的属性.很久以前,它非常简单直接(但没有记录),即model._meta.admin.search_fields
.
到达管理员是困难的部分,我能得到的最接近的是:
def admin_options(model):
from django.contrib import admin
return admin.site._registry.get(model)
Run Code Online (Sandbox Code Playgroud)
我找不到记录的._registry
成员(并且下划线似乎暗示它不公开).这对于未运行的站点也不起作用admin.autodiscover()
.后备代码执行此操作:
try:
appname = model.__module__.split('.models')[0]
admin_module = appname + '.admin'
__import__(admin_module) # registers admin option classes with AdminSite
except:
return None
else:
return admin.site._registry.get(model)
Run Code Online (Sandbox Code Playgroud)
是否有官方(或更简单)的方式来获取模型的管理选项?
我正在寻找一种方法来使应用程序默认设置和设置易于使用,很难出错,并且开销很小..
目前我的组织如下:
myapp/defaults.py
# application defaults
import sys
if sys.platform == 'win32':
MYAPP_HOME_ROOT = os.path.dirname(os.environ['USERPROFILE'])
else:
MYAPP_HOME_ROOT = '/home'
Run Code Online (Sandbox Code Playgroud)
在我的项目中我有:
mysite/settings.py
from myapp.defaults import * # import all default from myapp
MYAPP_HOME_ROOT = '/export/home' # overriding myapp.defaults
Run Code Online (Sandbox Code Playgroud)
通过此设置,我可以以常规django方式导入和使用设置(from django.conf import settings
和settings.XXX
).
update-3(为什么我们需要这个)
DEBUG
True为True时,您通常会想要做一些不同的事情,但任何其他全局设置都可能有用:例如MYAPP_IDENTICON_DIR = os.path.join(settings.MEDIA_ROOT, 'identicons')
(https://en.wikipedia.org/wiki/Identicon)MYAPP_IDENTICON_DIR = 's3://myappbucket.example.com/identicons'
在(全局)settings.py
文件中为其站点定义的用户应获取此值,而不是应用程序的默认值.import .. settings; settings.FOO
)的常规方法保持接近的解决方案都优于需要新语法的解决方案(因为新语法会分歧,我们会获得使用app到app的设置的新的独特方式).(原帖后面提出了两个关键问题,上述假设未说明.)
问题#1: …
可重用的应用程序文档(https://docs.djangoproject.com/en/1.9/intro/reusable-apps/)告诉您列出模板和静态文件MANIFEST.in
,但它python setup.py bdist_wheel
看起来根本不像查看该文件.
我已经看到了对data_files
这些文件的引用,但这些文件相对于python安装(sys.prefix
)而不是软件包安装(并且sys.prefix
与site-packages
跨系统不一致).
我是否正确假设myapp/templates/myapp/foo.html
应该最终进入.../site-packages/myapp/templates/myapp/foo.html
并且类似于静态文件,并且用户需要运行manage.py collectstatic
之后pip install myapp
?
更新(示例):
以下结构:
(build2) go|c:\srv\tmp\myapp> tree
.
|-- MANIFEST.in
|-- myapp
| |-- static
| | `-- myapp
| | `-- foo.css
| |-- templates
| | `-- myapp
| | `-- foo.html
| |-- urls.py
| `-- views.py
`-- setup.py
5 directories, 6 files
Run Code Online (Sandbox Code Playgroud)
setup.py
import setuptools
from distutils.core import …
Run Code Online (Sandbox Code Playgroud)