有没有办法在模块内部设置全局变量?当我尝试以最明显的方式执行此操作时,如下所示,Python解释器说该变量__DBNAME__
不存在.
...
__DBNAME__ = None
def initDB(name):
if not __DBNAME__:
__DBNAME__ = name
else:
raise RuntimeError("Database name has already been set.")
...
Run Code Online (Sandbox Code Playgroud)
并在将模块导入另一个文件后
...
import mymodule
mymodule.initDB('mydb.sqlite')
...
Run Code Online (Sandbox Code Playgroud)
追溯是: __DBNAME__
有任何想法吗?我正在尝试使用模块来设置单例,根据这个人的建议.
我认为这将是我可以轻松谷歌的东西,但也许我不是在问正确的问题......
如何在给定的javascript函数中设置"this"指的是什么?
例如,像大多数jQuery的功能一样,例如:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Run Code Online (Sandbox Code Playgroud)
如何在调用时编写/调用我自己的独立函数,这些函数具有适当的"this"引用?我使用jQuery,所以如果有一个特定于jQuery的方法,那就是理想的.
以下代码在Python 2.5和3.0中按预期工作:
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
Run Code Online (Sandbox Code Playgroud)
但是,当我取消注释行(B)时,我得到了UnboundLocalError: 'c' not assigned
一行(A).的值a
和b
被正确地打印.这让我感到困惑,原因有两个:
为什么在行(A)处抛出运行时错误,因为后面的行(B)语句?
为什么变量a
和b
打印符合预期,同时c
引发错误?
我能想到的唯一解释是,赋值创建了一个局部变量,即使在创建局部变量之前,它也优先于"全局"变量.当然,变量在存在之前"窃取"范围是没有意义的.c
c+=1
c
有人可以解释一下这种行为吗?
我知道my
Perl中有什么.它定义了一个仅存在于定义它的块范围内的变量.怎么our
办?有our
什么不同my
?
使用实例方法作为事件处理程序的回调改变的范围this
从"我的实例"到"无论只是调用的回调".所以我的代码看起来像这样
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
Run Code Online (Sandbox Code Playgroud)
它有效,但这是最好的方法吗?这对我来说很奇怪.
我有一个handlebars.js模板,就像这样:
{{externalValue}}
<select name="test">
{{#each myCollection}}
<option value="{{id}}">{{title}} {{externalValue}}</option>
{{/each}}
</select>
Run Code Online (Sandbox Code Playgroud)
这是生成的输出:
myExternalValue
<select name="test">
<option value="1">First element </option>
<option value="2">Second element </option>
<option value="3">Third element </option>
</select>
Run Code Online (Sandbox Code Playgroud)
正如所料,我可以访问每个元素的id
和title
字段myCollection
来生成我的选择.在select之外,我的externalValue
变量被正确打印("myExternalValue").
不幸的是,在期权的文本中,externalValue
价值从未打印出来.
我的问题是:我怎样才能在循环内访问handlebars.js范围之外的变量?
一如既往,先谢谢.
在下面的程序中,如果我$foo
在第一个if
语句中将变量设置为值1 ,那么它的作用就是在if语句之后记住它的值.但是,当我将同一个变量设置if
为while
语句内部的值2时,它在while
循环之后就被遗忘了.它的行为就像我$foo
在while
循环中使用某种变量的副本而我只修改那个特定的副本.这是一个完整的测试程序:
#!/bin/bash
set -e
set -u
foo=0
bar="hello"
if [[ "$bar" == "hello" ]]
then
foo=1
echo "Setting \$foo to 1: $foo"
fi
echo "Variable \$foo after if statement: $foo"
lines="first line\nsecond line\nthird line"
echo -e $lines | while read line
do
if [[ "$line" == "second line" ]]
then
foo=2
echo "Variable \$foo updated to $foo inside if inside while loop"
fi
echo "Value …
Run Code Online (Sandbox Code Playgroud) 注意:这是在PHP中处理变量范围的参考问题.请关闭符合此模式的许多问题中的任何一个.
什么是PHP中的"变量范围"?一个.php文件中的变量是否可以在另一个中访问?为什么我有时会得到"未定义的变量"错误?
我不是在问Python的范围规则; 我一般都了解 Python for循环中的作用域是如何工作的.我的问题是为什么设计决策是以这种方式做出的.例如(没有双关语):
for foo in xrange(10):
bar = 2
print(foo, bar)
Run Code Online (Sandbox Code Playgroud)
以上将打印(9,2).
这让我感到很奇怪:'foo'实际上只是控制循环,而'bar'是在循环中定义的.我可以理解为什么'bar'可能需要在循环外部访问(否则,for循环将具有非常有限的功能).我不明白为什么在循环退出后控制变量必须保持在范围内.根据我的经验,它只会使全局命名空间变得混乱,并且更难以追踪其他语言中的解释器会捕获的错误.
如果我输入:
void doThis(){
System.out.println("Hello Stackoverflow.");
}
Run Code Online (Sandbox Code Playgroud)
什么是默认范围doThis()
?
上市?受保护的?私人的?