- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取带有指定“日志”标签的主题:
在嵌套函数内 get_topics_with_log_tag
,我设置变量topics_with_log_tag
非本地:
def log(request):
"""Show all topics and entries with log tags"""
topics = Topic.objects.all()
#select entries with log tag
def get_topics_with_log_tag(topics):
nonlocal topics_with_log_tag
topics_with_log_tag = []
for topic in topics:
for entry in topic.entry_set.all():
if "#log" in entry.tags:
topics_with_log_tag.append(topic)
get_topics_with_log_tag(topics)
SyntaxError: no binding for nonlocal 'topics_with_log_tag' found
topics_with_log_tag = []
topics = Topic.objects.all()
#select entries with log tag
def get_topics_with_log_tag(topics):
# nonlocal topics_with_log_tag
topics_with_log_tag = []
for topic in topics:
for entry in topic.entry_set.all():
if "#log" in entry.tags:
topics_with_log_tag.append(topic)
return topics_with_log_tag
topics_with_log_tag = get_topics_with_log_tag(topics)
nonlocal
有什么问题? ?
class Topic(models.Model):
"""A topic the user is learning about."""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User)
def __str__(self):
"""Return a string representation of the model."""
return self.text
class Entry(models.Model):
"""Something specific learned about a topic"""
topic = models.ForeignKey(Topic)
title = models.CharField(max_length=200)
text = models.TextField()
tags = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
最佳答案
如何nonlocal
作品
如果您使用 nonlocal
,这意味着 Python 将在函数的开头,从上面(和更远)的一个作用域中查找具有相同名称的变量。但是在这里你没有定义这样一个。我们可以通过定义一个更高的级别来修复它:
def log(request):
"""Show all topics and entries with log tags"""
topics = Topic.objects.all()
#select entries with log tag
topics_with_log_tag = []
def get_topics_with_log_tag(topics):
nonlocal topics_with_log_tag
topics_with_log_tag = []
for topic in topics:
for entry in topic.entry_set.all():
if "#log" in entry.tags:
topics_with_log_tag.append(topic)
get_topics_with_log_tag(topics)
global
在这种情况下,您不需要声明这样的变量(在这种情况下,它是在上层声明的),但这实际上也是一种反模式。
Topic
s,然后对于每个主题,您执行一个额外的查询来获取所有
Entry
s,然后对于每个
Entry
你获取所有
Tag
s,然后查看其中一个标签是否为
#log
.现在假设您有 10 个主题,每个主题有 10 个条目,每个条目有 5 个标签。这会导致您在数据库级别执行 500 多个查询。我们可以构造一个过滤器,如:
topics_with_log_tag = Topics.objects.filter(entry__tags__contains='#log').distinct()
topics_with_log_tag = (Topics.objects
.filter(entry__tags__contains='#log')
.distinct())
tags
的主题例如
'#logarithm'
.它只检查它是否包含某个子字符串。为了防止这种情况,您将需要更高级的过滤或更好的标签表示(带有结束标记)。
'#foo,#bar,'
),那么我们可以查询
'#log,'
.
关于django - `SyntaxError: no binding for nonlocal ' topics_with_log_tag ' found` 虽然它是有界的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50412193/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 1 年前。 Improve t
问题 在 Python 中,如果我有一个带有局部变量和嵌套函数的函数,我可以在 nonlocal 的帮助下在嵌套函数中分配这些变量: def f(): x = 0 def _g():
def a(): mem=['a'] def b(): mem=[]
如何获取当前作用域的非局部变量?函数 vars、locals 和 globals 存在,但是是否有获取 nonlocals 的函数? 为什么在调用 vars 时没有列出非本地人? 更新 我的问题是无法
考虑一个简单的情况,例如在 BST 中找到第 k 个最小的元素。 在我下面的解决方案中: class Solution: def kthSmallest(self, root: TreeNod
这个问题在这里已经有了答案: nonlocal keyword in Python 2.x (10 个答案) 关闭 5 个月前。 我得到了一段这样的代码: foo = None def outer(
在 Python 3.3.1 中,这有效: i = 76 def A(): global i i += 10 print(i) # 76 A() print(i) # 86 这也有效:
如何以与访问全局变量类似的方式访问 OuterClass 变量? 例如: global_variable = 'global_variable' class InnerClass: def _
我正在尝试在 Python 2.6 中实现一个闭包,我需要访问一个非局部变量,但似乎这个关键字在 python 2.x 中不可用。在这些版本的 python 中,应该如何访问闭包中的非局部变量? 最佳
这个问题已经有答案了: Short description of the scoping rules (9 个回答) 已关闭10 个月前。 def min_diff(arry_): max_ =
我想获取带有指定“日志”标签的主题: 在嵌套函数内 get_topics_with_log_tag ,我设置变量topics_with_log_tag非本地: def log(request):
我是一名优秀的程序员,十分优秀!