Python3:关于函数中变量使用的理论题

Python 3: Theoretical question about the use of variables in functions

我有一个关于 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 传递对变量引用的对象(值)的引用。不是变量本身。

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

为了完整回答这里发生的原因和情况,首先我们需要谈谈"scope"的概念。 就内存而言,每个函数(以及 for 循环、while 循环等)"lives in its own world"。那是什么意思?假设我有一个名为 "foo1" 的函数和另一个名为 "foo2" 的函数。在 foo1 中,我有一个名为 x 的变量。从 foo2 内部 - 我无法访问该变量 (x),因为它 "lives" 在 foo1 的范围 ("world") 中。 在 python 中,您有一个全局作用域(the.py 文件本身)和每个函数的作用域。在非全局范围内创建的变量称为 "local" 变量。 这将我们带到函数参数 - 在您的例子中,"bookstore" 函数中名为 "book" 和 "price" 的变量。注意 - 这些是函数范围内的局部变量 "bookstore"。他们如何获得他们的价值观?来自函数调用! 在你的例子中,在 "print" 函数中你调用了 "bookstore" 有两个参数 - "book_entry" 和 "price_entry"。当你这样做时,你将这些变量的内容复制到函数的范围内,并根据你将它们发送给函数的顺序给它们一个新的名字 - "book" 和 "price" [=21] =]. 然后,从函数中 return 一个字符串。 因此,计算机首先执行对 "bookstore" 的调用,然后使用 "bookstore" returned 执行 "print"。