【问题标题】:How does this variable get into the function? (Python)这个变量如何进入函数? (Python)
【发布时间】:2018-07-12 09:15:36
【问题描述】:

我的一个学生在他的课程作业中引起了我的注意。我已经重写了下面发生的事情(但与课程作业不同):

def tester(number):

    print(number)    
    numbertotal = num1 + num2
    print(numbertotal)

number = input("Input a number: ")
num1 = 2
num2 = 2
tester("number")

输出:

Input a number: 12

number

4

num1 和 num2 如何进入函数?我所做的就是将字符串“数字”传递给它并打印出来。然后它确实正确地添加了 2 和 2,这没有任何意义,因为我没有传递该函数的任何一个数字。我确实传递了“数字”变量,因此它确实可以传递给它,但也恰好 num1 和 num2 在那里可用。 Python 现在是否将所有变量设为全局变量?即使这样它也不应该工作......请帮助!

【问题讨论】:

标签: python function global-variables


【解决方案1】:

Python 在运行时解析变量名,所以当你的测试函数被调用时,num1 和 num2 已经被定义了。

【讨论】:

  • 感谢您的回复。我明白你的意思了。为什么我不必把它传到那里呢?我不应该说“tester(num1,num2)”吗?
【解决方案2】:

查看locals()globals() 的输出会澄清这一点。

【讨论】:

    【解决方案3】:

    变量是全局的,所以对函数没有影响,程序的任何部分都可以“看到”它们。

    我想这恰到好处地展示了我的观点。

    def func(GLOBAL):
        print (GLOBAL)
    
    GLOBAL = 64
    
    func(32)      # <-- localvar naming overrides global
    func(GLOBAL)  # <-- this one does what you'd expect
    

    【讨论】:

    • 在上面回复你@mr-archard,因为我没有足够的代表。调用tester(n1,n2) 会有几个问题:首先,它只需要一个变量。但是,如果您将函数修复为 def tester(n1, n2): numbertotal = n1 + n2,那么它会执行预期的操作。
    • 如果在底部放置“print(numbertotal)”,则表示 numbertotal 没有像函数中那样定义。该变量不是全局变量,那么 num1 和 num2 怎么可能呢?还是因为 numbertotal 是在函数中声明的,因此是本地的?
    • 当然可以。好点子。正如你所说,它会做预期的事情。如果所有变量都是全局可用的,那么为什么存在将变量传递给函数的选项?或者是当你在函数之间发送变量时?
    • 这是因为numbertotal 只在函数内部可见,因此是局部的。正确。
    • 并且,参考您的第二条评论,将所有内容声明为全局是浪费计算资源,因为它永远不会从内存中释放。没有能够传递或返回变量的函数会将现代编程变成逐行指令和大量复制粘贴。
    猜你喜欢
    • 2017-12-30
    • 2015-11-21
    • 2011-12-10
    • 2018-07-16
    • 2022-11-10
    • 2019-01-02
    • 2016-06-04
    • 2016-06-19
    相关资源
    最近更新 更多