gpt4 book ai didi

Python:当我在另一个函数中调用一个函数时没有变化

转载 作者:行者123 更新时间:2023-12-01 01:45:40 24 4
gpt4 key购买 nike

所以一些上下文,我的第一个函数就是这里的这个(我试图调用的函数):

def Dish_change_price(dish: Dishes, change: int) -> float:
percent = change/100
dish = dish._replace(price=dish.price + dish.price*percent)
return dish.price

有了这个,我会在这个函数中调用它:

def Dishlist_change_price(dishlist: DL, change: int) -> float:
for i in dishlist:
Dish_change_price(i, change)
print(i.price)

执行完函数 (Dishlist_change_price(DL, 100)) 后,我希望它打印的价格翻倍(变化以百分比表示),但它会打印价格不变。但是,当我将 Dish_change_price 函数的主体直接放入 Dishlist 函数中时,它就会执行我想要的操作。如:

def Dishlist_change_price(dishlist: DL, change: int) -> float:
percent = change/100
for i in dishlist:
i = i._replace(price=i.price + i.price * percent)
print(i.price)

以下是供引用的列表:

from collections import namedtuple
Dishes = namedtuple('Dishes', 'name price calories')
d1 = Dishes("Filet Mignon", 40, 720)
d2 = Dishes("Fried Chicken", 10, 1500)
d3 = Dishes("Sake Salmon", 15, 500)
d4 = Dishes("Filet Mignon", 40, 720)
d5 = Dishes("Pho", 11, 600)

D1 = Dishes("Pad Thai", 11, 650)
D2 = Dishes("Dim Sum", 30, 800)
D3 = Dishes("Double-Double Burger", 5, 750)
D4 = Dishes("15 Wings", 10, 900)

DL = [d1, d2, d3, d4, d5]
DL2 = [D1, D2, D3, D4]
DL.extend(DL2)

我不明白为什么直接调用该函数不会改变每个菜肴,但放入正文中会这样做。如果这是一个非常愚蠢的问题,很容易解决,我深表歉意。

最佳答案

您需要将引用重新指向从函数返回的 Dishes 元组。让您感到困惑的是您到处都使用变量“i”。在这里,这将起作用:

def Dishlist_change_price(dishlist: DL, change: int) -> float:
for i in dishlist:
i = Dish_change_price(i, change)
print(i.price)

需要注意的是,您的原始代码可以与其他可变的对象类型一起使用。但命名元组不是,因此它成为一个新的对象引用。如果您在每个中运行 print(id(i)) ,您将看到身份(内存中的位置)将有所不同,并且您正在打印原始价格。

关于Python:当我在另一个函数中调用一个函数时没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51370261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com