【问题标题】:Python 3: Theoretical question about the use of variables in functions [closed]Python 3:关于在函数中使用变量的理论问题[关闭]
【发布时间】:2020-01-09 06:52:19
【问题描述】:

基于以下示例,我有一个关于 Python 3.0 的理论问题:

def bookstore(book,price):
    return ("book Type: "+ book.capitalize() + " costs $" + price)

book_entry=input('Enter book type: ')
price_entry=input('Enter book type price: ')

print (bookstore(book_entry,price_entry))

偶然我得到了这个脚本,但我不完全理解为什么需要这样做。 它是关于以下部分:

def bookstore(book,price):       AND       print (bookstore(book_entry,price_entry))
  1. 为什么要在打印函数中输入变量 [book_entry & price_entry] 而不是在定义函数 [book,price] 中?

  2. 如何在变量之间进行通信? def函数是唯一的连接,但是变量名不同,代码怎么能接受这个不同而不报错呢?

【问题讨论】:

  • 变量名无关紧要。只有参数的数量和位置对于未命名的参数很重要。 Python 还有其他类型的不需要固定位置的参数(关键字参数)
  • 函数调用和参数传递是计算机编程中的基本概念。这个问题对 SO 来说太笼统了。

标签: python python-3.x theory


【解决方案1】:

为了对这里发生的原因和内容给出完整的答案,首先我们需要谈谈“范围”的概念。 就内存而言,每个函数(以及 for 循环、while 循环等)都“生活在自己的世界中”。这意味着什么?假设我有一个名为“foo1”的函数和另一个名为“foo2”的函数。在 foo1 中,我有一个名为 x 的变量。从 foo2 内部 - 我无法访问该变量 (x),因为它“存在”在 foo1 的范围(“世界”)中。 在 python 中,您有一个全局范围(.py 文件本身)和每个函数的范围。在非全局范围内创建的变量称为“局部”变量。 这将我们带到函数参数 - 在您的情况下,“书店”函数中名为“书”和“价格”的变量。注意 - 这些是函数“书店”范围内的局部变量。他们如何获得他们的价值观?从函数调用! 在您的情况下,在“print”函数中,您使用 2 个参数调用“bookstore” - “book_entry”和“price_entry”。当您这样做时,您将这些变量的内容复制到函数的范围内,并根据您将它们发送到函数“书店”的顺序给它们一个新名称 - “book”和“price”。 然后,从函数中返回一个字符串。 所以,发生的事情是计算机首先执行对“书店”的调用,然后使用“书店”返回的内容执行“打印”。

【讨论】:

    【解决方案2】:

    函数的参数是对对象的引用,它们是按值传递的。当您将变量传递给函数时,python 会将引用传递给变量所引用的对象(值)。不是变量本身。

    如果函数中传递的值是不可变的,则该函数不会修改调用者的变量。如果值是可变的,该函数可以就地修改调用者的变量:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2018-07-06
      • 2013-08-30
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多