无法在函数中使用变量:“未解析的引用”

时间:2019-05-13 00:36:16

标签: python function variables

我对Python还是很陌生(约8个小时的经验,在两天内学习),并做一些自己创建的练习来练习新近学习的信息。目前专注于类和函数。 该代码与出售水果有关:有一个类别的水果,它带有名称,颜色,price_usd及其对象。还有一个“购物车”列表和total_cost(最初设置为0)。我已经使代码正常工作,但是现在尝试不使用函数重复代码。

我创建了一个名为“购买”的函数,该函数会打印选择的水果,将其添加到购物车中,并将其值添加到total_cost中。但是,我获得了total_cost的“未解析引用”(但不是购物车的引用,这也是函数之外的变量吗?)

Error message: "UnboundLocalError: local variable 'total_cost' referenced before assignment)

(显示的代码是一个单独的文件,具有我要解决的问题,然后将其包含在主文件中。但是,没有新的变量,因为主文件只有很多条件语句和新对象。)< / p>

尝试在函数之前和之后创建total_cost。还尝试“手动”将fruit_choice.price_usd添加到total_cost: “总成本=总成本+ fruit_choice.price_usd” 它创建了局部变量“ total_cost”,并为第二个total_cost给出了“未解决的引用”

import fruit as fr


apple = fr.Fruits("Apple", "red", price_usd=0.88)

shopping_cart = []

# total_cost = 0


def buy(fruit_choice):

    print(f"A(n) {fruit_choice.name} has been added to your shopping cart.")

    shopping_cart.append(fruit_choice.name)
    ##############################################
    total_cost += fruit_choice.price_usd

    print(f" The total cost is: {total_cost}")
    ##############################################

total_cost = 0

print(shopping_cart, "\n", buy(apple))

(错误消息的来源是### ...之间。)

我希望将fruit_choice.price_usd添加到total_cost中。如果是这样的话,会更容易,因为每个水果的代码都是相同的。

在此先感谢您的宝贵帮助!

1 个答案:

答案 0 :(得分:1)

如果您想使用在函数外部创建的变量,则需要将其作为参数传递或像这样使用global关键字:

使用 @RequestMapping(value = "add", method = RequestMethod.POST) @ResponseBody public ResponseEntity add(@RequestBody String jsonCar ) throws Exception { Car car = new Gson().fromJson(jsonCar, Car.class); // repository.save(car); System.out.println("Json== " + jsonCar); System.out.println("pojo==" + car); return new ResponseEntity<>(HttpStatus.CREATED); } 关键字:

global

作为参数:

apple = fr.Fruits("Apple", "red", price_usd=0.88)

shopping_cart = []

# total_cost = 0


def buy(fruit_choice):


    print(f"A(n) {fruit_choice.name} has been added to your shopping cart.")
    global total_cost;
    shopping_cart.append(fruit_choice.name)
    ##############################################
    total_cost += fruit_choice.price_usd

    print(f" The total cost is: {total_cost}")
    ##############################################

total_cost = 0

print(shopping_cart, "\n", buy(apple))

apple = fr.Fruits("Apple", "red", price_usd=0.88) shopping_cart = [] # total_cost = 0 def buy(fruit_choice,total_cost): print(f"A(n) {fruit_choice.name} has been added to your shopping cart.") global total_cost; shopping_cart.append(fruit_choice.name) ############################################## total_cost += fruit_choice.price_usd print(f" The total cost is: {total_cost}") return total_cost ############################################## total_cost=buy(apple) print(shopping_cart, "\n",total_cost) 变量需要在第一次调用total_cost之前创建,如果在定义buy()之前或之后创建变量并不重要