在python中我尝试这个:
admin = "Vaibhav"
def print_admin(default):
# global admin
if default == "default":
print(admin)
else:
admin = "other"
print(admin)
print_admin("")
print_admin("default")
它给了我一个错误:
error:UnboundLocalError: local variable 'admin' referenced before assignment
如果我使用global关键字,那么它在两种情况下都只使用global。 如果参数和全局(“Vaibhav”)中没有给出“default”,我希望能够使用本地(“其他”)。
这在javascript中完美无效,但在python中无效。
用于执行相同操作的Javascript代码:
let admin_name = "Vaibhav";
function printAdminName(admin_name_default) {
if (admin_name_default != "default") {
let admin_name = "Other";
console.log(admin_name)
}
else {
console.log(admin_name);
}
}
printAdminName("default");
printAdminName();
输出: Vaibhav的 其他
**我也想知道为什么这个在javascript而不是python中工作,因为两者都是非常相似的语言。我想知道这个概念有什么不同。因为我花了很多时间逻辑地弄清楚它。
答案 0 :(得分:1)
谈论变量的范围:
admin = "Vaibhav"
def print_admin(default):
if default == "default":
## This is global
global admin
print(admin)
else:
## This is local to your function
print_admin.admin = "other"
print(print_admin.admin)
print_admin("")
print_admin("default")
虽然我不太明白你为什么要在这个函数中注册一个全局变量,但是如果由于某种原因你必须使用声明来限制你的局部变量。
答案 1 :(得分:0)
在Python中,您不能使用相同的名称来引用本地变量和全局变量。使用例如global admin
强制所有出现的admin
引用全局变量,这意味着更改admin
的值也会更改全局定义的admin
,这似乎不是什么你想要的。
完全有可能(和Pythonic)读取全局变量而不写入它们(更改它们),在这种情况下不需要global
关键字。考虑
admin = "Vaibhav"
def print_admin(default):
if default == "default":
# Read in the global admin
admin_local = admin
else:
admin_local = "other"
print(admin_local)
print_admin("")
print_admin("default")
在这里,我们通过不同地命名它们来区分admin
的全局和本地版本。当您希望将两者都称为不同的变量时,这是必须的。