我对全局变量如何工作感到困惑.我有一个大型项目,大约有50个文件,我需要为所有这些文件定义全局变量.
我所做的是在我的项目main.py文件中定义它们,如下所示:
# ../myproject/main.py
# Define global myList
global myList
myList = []
# Imports
import subfile
# Do something
subfile.stuff()
print(myList[0])
Run Code Online (Sandbox Code Playgroud)
我想用myList在subfile.py,如下
# ../myproject/subfile.py
# Save "hey" into myList
def stuff():
globals()["myList"].append("hey")
Run Code Online (Sandbox Code Playgroud)
我试过的另一种方式,但也没有用
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff()
print(globfile.myList[0])
Run Code Online (Sandbox Code Playgroud)
在里面subfile.py我有这个:
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList …Run Code Online (Sandbox Code Playgroud) 我想知道常量变量存储在哪里.它与全局变量在同一个内存区域吗?还是在堆栈上?
我有一个iPhone应用程序,我的主题有一些自定义颜色.由于这些颜色将为我的UI修复,我想定义要包含的类中的颜色(Constants.h和Constants.m).我怎么做?(简单地定义它们不起作用,因为UIColors是可变的,并且会导致错误 - Initalizer不是恒定的).
/* Constants.h */
extern UIColor *test;
/* Constants.m */
UIColor *test = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
谢谢!
我发现自己最近在clojure代码中使用了以下习语.
(def *some-global-var* (ref {}))
(defn get-global-var []
@*global-var*)
(defn update-global-var [val]
(dosync (ref-set *global-var* val)))
Run Code Online (Sandbox Code Playgroud)
大多数情况下,这甚至不是多线程代码,可能需要refs给你的事务语义.它只是感觉refs不仅仅是线程代码,而且基本上适用于任何需要不变性的全局.这有更好的做法吗?我可以尝试重构代码以仅使用绑定或让但是对于某些应用程序来说这会变得特别棘手.
当我extern在方法或变量声明之前使用单词时,我是否将其设置为全局,因此在整个项目中可读/可写/可用?
如果我在关键字之前使用extern,那么我的项目的一部分仍然无法访问它吗?例如,仅由子类...例如当我使用"protected"时.
extern是一个C关键字,对吗?Objective-C中是否有等价物?我实际上不明白为什么他们在Objective-C项目中使用C关键字.
谢谢
locals()函数的文档特别警告不要修改其输出,因为解释器可能无法反映本地范围的更改.我假设这意味着Python规范不需要它,即使它在CPython中工作.
我想知道globals()是否相同.文档中没有任何警告,但我觉得奇怪的是,这会有所不同,因为每个函数显然在不同的范围内执行相同的操作.
如果它是安全的,修改globals()'输出将改善我正在处理的项目的简单性和兼容性.
不久之前,我提出了一个JavaScript设计模式(模块模式 - 见下文),我从John Resig的例子中得到了一个解决某人问题的一部分,我收到了以下评论:
"......这种模式有点过于设计而不是那么好.仍然渗透到全球范围.而你不打开自己的异步装载机.但它比ad-hoc编码更好!"
所以…
如果"泄漏"到全局范围意味着"您的对象被附加到浏览器窗口(对象)"......那么所有内容都已经被追加(全局):
这"泄漏"到全球范围:
window.jQuery
Run Code Online (Sandbox Code Playgroud)
...只需调用: window.jQuery并将其解析为函数();
这"泄漏"到全球范围:
function HelloWorld() { alert(‘Howdy’); }
Run Code Online (Sandbox Code Playgroud)
......打电话给window.HelloWorld()你:你会得到'你好'.
这"泄漏"到全球范围:
var myVariable = 10;
Run Code Online (Sandbox Code Playgroud)
......打电话给window.myVariable你:你会得到10分
如果评论者是正确的,那么以上所有"泄漏"到全球范围.所以,就个人而言,我没有看到一种不"泄漏"到全局范围内的方法,因为即使你的表单控件也存在(也是如此).
因此,这是我的问题......
这是我上面提到的模块模式:
<script type="text/javascript">
var myNamespace = (function($) {
var publicInstances = {};
// ***********************
// myObject
publicInstances.myObject = myObject;
function myObject() {
/// <summary>A pointer to this</summary>
var self = this;
this.someProperty = new String();
this.initialize = function() { …Run Code Online (Sandbox Code Playgroud) 你好.我最近学习了PHP并试图声明一个全局数组,因此我可以访问函数内部.但我似乎错过了一些东西,因为我得到错误'未定义的变量:'
这是我的代码:
global $second_array;
$second_array = array();
function operatii($v) {
$var1 = $second_array[count($second_array)-1];
$var2 = $second_array[count($second_array)-2];
$rez = null;
echo $var1 . $var2 . "este?";
}
for ($i = 0; $i < count($a); $i++){
if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
operatii($a[$i]);
} else {
array_push($second_array, $a[$i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎能够$second_array在for循环中使用它,但不能在operatii函数中使用它.
我怎么解决这个问题?
我正在重新组织我的代码,从而创建新的命名空间.我正在为模块更改"静态"类(每种方法中带有@staticmethod的类).这是要走的路,对吧?
问题是我对如何在这些模块之间共享资源有疑问.
假设我有一个模块,我从中与数据库建立了所有连接,当然所有类/方法都共享存储数据库游标的变量(我使用的是SQLite).现在,在不同的模块中,他们还必须共享光标.

所以,我的想法:
在每个模块中声明全局变量.但全球化是邪恶的,吃孩子并偷走我们的工作.所以我不知道这是不是要走的路.
'''Sub Module 1'''
global database_cursor
Run Code Online (Sandbox Code Playgroud)使用原始database_cursor导入"father"database_module并使用如下内容:
'''Sub Module 1'''
db_cursor = database_module.database_cursor
Run Code Online (Sandbox Code Playgroud)在这种情况下,第二个看起来很好,但我认为在许多情况下会导致递归导入,我想这是要避免的.
我有一个C#库.