python - 关于为什么没有更新结果的问题?
问题描述
我正在查看我的评论论文,但不理解以下编码。
def function_b(b_list, high_num):
c_list = [0, 0, 0, 0, 0, 0,0]
i = 0
for num in b_list:
if num > high_num:
c_list[i] = num
i = i + 1
b_list = c_list
def main():
b_list = [1,3, 6, 4, 1, 2, 8]
high_num = 4
function_b(b_list, high_num)
print(b_list)
main()
结果是 [1, 3, 6, 4, 1, 2, 8] 为什么 b_list 没有用 c_list 更新?
解决方案
正如这个答案所解释的:
如果你将一个可变对象传递给一个方法,该方法会得到一个对同一个对象的引用,你可以随心所欲地改变它,但是如果你在方法中重新绑定引用,外部作用域将一无所知,之后大功告成,外部引用仍将指向原始对象。
换句话说,该行b_list = c_list
仅更改b_list
函数中指向的内容。它不会改变b_list
指向 in 的内容main
。所以解决方法是修改 的元素b_list
,而不是指向b_list
一个全新的列表。
另一个提示来自这个问题。如果您需要数组的索引以及该索引处的值,则可以使用该enumerate
函数。
把它们放在一起,函数可以写成这样:
def function_b(b_list, high_num):
for i, num in enumerate(b_list): # use 'enumerate' to get both index and value
if num <= high_num: # check for small numbers in the list
b_list[i] = 0 # change the small numbers to 0
推荐阅读
- google-chrome - Swagger UI 有时不加载
- c++ - 延迟加载具有相同名称的不同库
- sql - 从 3 种不同的情况中选择
- nosql - Oracle NoSQL 数据库云服务中不同读取一致性的读取单元是如何使用的?
- php - GAE Cron 作业仅返回状态 500
- javascript - 如何在 JavaScript 中从 cloudinary url 创建文件对象
- git - Changes into parent repo reflected into child repos in Git
- azure - Azure B2C 禁用身份提供者注册 SignUpAndSignIn 策略 - Apple 身份提供者 IDP
- c# - Authorize.net Accept Hosted Customer Profile Page has no button to return
- html - 为什么我不能增加这个 DIV 的高度?