在同一函数中使用全局和局部变量的python

2024-09-30 13:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在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。 如果参数中没有给出“default”,我希望能够使用local(“other”),如果参数中没有给出,我希望能够使用global(“Vaibhav”)。你知道吗

这在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();

输出: 瓦伊巴夫 其他

**我还想知道为什么这在javascript而不是python中工作,因为这两种语言非常相似。我想知道是什么概念造成了这种差异。因为我花了很多时间来理清逻辑。你知道吗


Tags: namedefault参数ifadminlocaljavascriptglobal
2条回答

在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的全局版本和本地版本。当您希望将两者都称为不同的变量时,这是必须的。你知道吗

谈论变量的范围:

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")

虽然我不太明白为什么要在这个函数中加入一个全局变量,但是如果出于某种原因必须这样做,可以用声明来约束局部变量。你知道吗

相关问题 更多 >

    热门问题