我正在尝试学习Express,在我的应用程序中,我有中间件将会话对象从Request对象传递给我的Response对象,以便我可以在我的视图中访问它:
app.use((req, res, next) ->
res.locals.session = req.session
next()
)
Run Code Online (Sandbox Code Playgroud)
但app.locals也适用于视图吗?如果我这样做也一样app.locals.session = req.session
吗?对于各种类型的东西是否有约定app.locals
并res.locals
用于?
我也搞不清楚的区别是什么之间res.render()
和res.redirect()
?什么时候应该使用?
谢谢阅读.任何与Express相关的帮助表示赞赏!
TL; DR:我想要一个在包含范围内查找的locals().
大家好.
我正在向一些化学家朋友讲授Python编程课程,我想确保我真正了解范围.
考虑:
def a():
x = 1
def b():
print(locals())
print(globals())
b()
Run Code Online (Sandbox Code Playgroud)
Locals打印一个空的环境,globals打印通常的全局变量.如何访问存储x的环境?很明显,口译员知道它,因为我可以参考它.
相关:什么时候发生范围?仅当包含x = 3时,a = x + 2上的以下nameErrors:
def a():
x = 1
def b():
a = x+2
x = 3
b()
Run Code Online (Sandbox Code Playgroud)
如果您注释掉x = 3,则代码可以正常工作.这是否意味着python在解释代码之前会对代码进行词法范围传递?
这可能是基本的,但可以帮助我理解命名空间.一个很好的解释可能会逐步执行函数定义执行时发生的事情,然后执行函数对象后发生的事情.递归可能使事情变得复杂.
结果对我来说并不明显; 我原以为:
locals_1将包含var; locals_2将包含var和locals_1; 和locals_3将包含var,locals_1和locals_2
# A function calls locals() several times, and returns them ...
def func():
var = 'var!'
locals_1 = locals()
locals_2 = locals()
locals_3 = locals()
return locals_1, locals_2, locals_3
# func is called ...
locals_1, locals_2, locals_3 = func()
# display results ...
print 'locals_1:', locals_1
print 'locals_2:', locals_2
print 'locals_3:', locals_3
Run Code Online (Sandbox Code Playgroud)
结果如下:
locals_1: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_2: {'var': 'var!', 'locals_1': {...}, 'locals_2': {...}}
locals_3: {'var': 'var!', …
Run Code Online (Sandbox Code Playgroud) 对于给定的Jade / Pug模板,我想获取模板中出现的所有变量的列表。
我的动机如下:在我的软件中,使用了不同的模板来生成一些HTML代码段。根据给定的上下文(即,给出了某些变量的值),我只建议那些模板,其中可以分配模板中的所有变量。
示例:对于这样的模板myTemplate
:
html
head
title= myTitle
body
h1 #{value.headline}
p #{paragraph.text}
Run Code Online (Sandbox Code Playgroud)
我想得到一些这样的输出:
var variableNames = extractVariableNamesFromTemplate('myTemplate');
// variableNames = [ 'myTitle', 'value.headline', 'paragraph.text' ]
Run Code Online (Sandbox Code Playgroud)
是否有可用的现成产品?优选地,一种解决方案将考虑所有特定于语言的特征,例如包括,扩展等。
我找不到这种行为的充分解释.
>>> def a():
... foo = 0
... print locals()
... def b():
... print locals()
... b()
>>> a()
{'foo': 0}
{}
Run Code Online (Sandbox Code Playgroud)
但:
>>> def a():
... foo = 0
... print locals()
... def b():
foo
... print locals()
... b()
>>> a()
{'foo': 0}
{'foo': 0}
Run Code Online (Sandbox Code Playgroud)
我理解在第二种情况下有一个闭包,但我找不到实际是什么以及在什么条件下应该返回函数的详细描述locals()
.
我记得听说在块的开头排列所有范围成员不再推荐使用C和C++,但这是否意味着它在生成代码时会以某种方式阻碍编译器,或者只是不再需要这样做,因为它并不总是方便吗?如果本地化是按需声明的话,AKA是否更有效地使编译器生成最佳分配?
例如,
a = 1
b = 2
c = 3
Run Code Online (Sandbox Code Playgroud)
打电话的时候locals()
,我明白了
{ 'a': 1, 'c': 3, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None }
Run Code Online (Sandbox Code Playgroud)
如何从locals()中检索局部变量作为我定义的顺序?
我是编程的新手,所以请不要因为提出愚蠢的问题而杀了我.我一直在努力理解Python中的所有类业务,我到了无法通过谷歌找到我的问题的答案.
在我的程序中,我需要根据函数返回的字符串从其他类中调用一个类.我发现了两种解决方案:一种是使用getattr()
,另一种是使用globals()
/ locals()
.
决定采用第二种解决方案并使其正常工作,但我真的不明白它是如何工作的.
所以有代码示例:
class Test(object):
def __init__(self):
print "WORKS!"
room = globals()['Test']
room()
Run Code Online (Sandbox Code Playgroud)
type(room())
得到:
<class '__main__.Test'>
Run Code Online (Sandbox Code Playgroud)
type(room)
得到:
<type 'type'> # What????
Run Code Online (Sandbox Code Playgroud)
它看起来像是room()
一个类对象,但不应该room
代替room()
?
请帮助我,因为如果我编写一些我不了解的代码,这有点傻.
我一直在使用字典对象加载变量,但值会更新.我在这里错过了什么?
assert "run_LMM" in all_variables.keys()
locals().update(all_variables)
assert "run_LMM" in locals()
Run Code Online (Sandbox Code Playgroud)
最后一行是我得到一个断言错误.这是怎么回事?
我的emacs设置为全局使用2个空格进行缩进:
(setq-default indent-tabs-mode nil)
(setq tab-width 2)
(setq js-indent-level 2)
(setq css-indent-offset 2)
Run Code Online (Sandbox Code Playgroud)
但我想贡献一个web项目(主要是html,css和js),它使用4个空格进行缩进.所以我想.dir-locals.el
在项目目录中设置一个文件.该文件具有以下设置(随add-dir-local-variable
命令添加):
((nil . ((tab-width . 4)
(js-indent-level . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((js-mode
(tab-width . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((js-mode
(js-indent-level . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((html-mode
(tab-width . 4))) …
Run Code Online (Sandbox Code Playgroud) 我一直在这种情况下结束,我想使用字典非常像'locals'给出的字典,但只包含函数范围有限的变量.有没有办法在python中执行此操作?
更多关于我为什么要这样做的事情:我正在玩Django,当我去给我的模板上下文时,我被迫要么手动制作字典(违反DRY原则)要么传入本地人()然后需要更多的条目(浪费).是否有一些我缺少的django可以减轻python级解决方案的需要?
澄清:
所以,我反复击中的情况就是我所拥有的:
@render_to('my_template.html')
def myview(request):
var1 = #blahblah
var2 = #...
# do stuff with vars
return {'var1': val1,'var2':val2}
Run Code Online (Sandbox Code Playgroud)
因此,我不会重复这些变量和命名约定,而是:
@render_to('my_template.html')
def myview(request):
var1 = #blahblah
var2 = #...
# do stuff with vars
return locals()
Run Code Online (Sandbox Code Playgroud)
我觉得它更干净,但我知道它有点马虎,因为当地人()中有大约30个条目然后我真的需要.
这是pythonic实现吗?
我正在使用包装器从字符串参数动态调用嵌套函数,以减少调用不存在的函数的机会.这是一个例子,我想对arg1和arg2进行不同的比较(根据==,> =,<等等)...
class ComparisonClass(object):
def__init__(self):
pass
def comparison(self,arg1,arg2,comparison):
def equal_to():
pass
def greater_than():
pass
def less_than():
pass
return locals()[comparison]()
def comparison_equal_to(self,arg1,arg2):
return self.comparison(arg1,arg2,'equal_to')
def comparison_greater_than(self,arg1,arg2):
return self.comparison(arg1,arg2,'greater_than')
def comparison_less_than(self,arg1,arg2):
return self.comparison(arg1,arg2,'less_than')
Run Code Online (Sandbox Code Playgroud) locals ×13
python ×9
scope ×2
c ×1
c++ ×1
closures ×1
django ×1
django-views ×1
emacs ×1
environment ×1
express ×1
globals ×1
indentation ×1
node.js ×1
pug ×1
python-3.x ×1
request ×1
templates ×1