Python 3:关于在函数中使用变量的理论问题[关闭]

问题描述 投票:-5回答:2

基于以下示例,我对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,price中输入变量[book_entry&price_entry]?

  2. 变量之间如何进行通讯? def函数是唯一的连接,但是变量名称不同,代码如何在不产生错误的情况下接受这种差异?

python python-3.x theory
2个回答
0
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.