鱼C论坛

 找回密码
 立即注册
查看: 2139|回复: 9

[已解决]关于课后作业函数的一道问题

[复制链接]
发表于 2022-7-23 00:37:35 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 咕咕鸭 于 2022-7-23 10:19 编辑



如图 @FRS5KFJB1S2F)(~`M~GA_E.png
不太理解小甲鱼这两题的解释。
第四题:
  1. >>> x = [1, 2, 3]
  2. >>> def invert(x):
  3. ...     x = x[::-1]
  4. ...
  5. >>> invert(x)
  6. >>> print(x)
  7. >>> # 请问这里会打印什么内容?
复制代码
第五题:
  1. >>> x = [1, 2, 3]
  2. >>> def invert(x):
  3. ...     x[:] = x[::-1]
  4. ...
  5. >>> invert(x)
  6. >>> print(x)
  7. >>> # 请问这里会打印什么内容?
复制代码
答案:x=[3,2,1]
就是为什么第五题,局部变量可以改变全局变量X的值
希望大佬解答,谢谢










最佳答案
2022-7-23 00:37:36
ZhKQYu 发表于 2022-7-23 12:27
因为把x作为参数传入了,而且x是列表是一种可变的数据类型
  1. >>> x = 10
  2. >>> def change(x):
  3.         x = 100

  4.        
  5. >>> change(x)
  6. >>> x
  7. 10
  8. >>> x = [1, 2, 3]
  9. >>> def change(x):
  10.         x.append(100)

  11.        
  12. >>> change(x)
  13. >>> x
  14. [1, 2, 3, 100]
复制代码

题目图片

题目图片

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 00:37:36 | 显示全部楼层    本楼为最佳答案   
ZhKQYu 发表于 2022-7-23 12:27
因为把x作为参数传入了,而且x是列表是一种可变的数据类型
  1. >>> x = 10
  2. >>> def change(x):
  3.         x = 100

  4.        
  5. >>> change(x)
  6. >>> x
  7. 10
  8. >>> x = [1, 2, 3]
  9. >>> def change(x):
  10.         x.append(100)

  11.        
  12. >>> change(x)
  13. >>> x
  14. [1, 2, 3, 100]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 05:18:56 From FishC Mobile | 显示全部楼层
图片看不清啊,狠不清楚,为啥不发文本代码
难道是打文本代码狠复杂吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 10:19:24 | 显示全部楼层
全局变更是全局可用的。
函数中前面的x是局部变量,等号后面的x是全局变量,其实并不是修改,而是把全局x处理后的值赋给局部x。
全局x没有被修改,最后打印的x还是全局x的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-23 10:21:23 | 显示全部楼层
wp231957 发表于 2022-7-23 05:18
图片看不清啊,狠不清楚,为啥不发文本代码
难道是打文本代码狠复杂吗

好了,不好意思我这边图片怪清楚的,不知道你那边看不清
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 12:27:31 | 显示全部楼层
因为把x作为参数传入了,而且x是列表是一种可变的数据类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 15:13:00 | 显示全部楼层
本帖最后由 Stubborn 于 2022-7-23 15:19 编辑

我怎么没有看到,局部变量能修改全局变量呢,你仔细看看。

首先,我们需要声明一个变量,  xx = ??。 变量名字,等于什么什么(看向第四题)

那么我们需要使用一个变量呢?例如x[5] = 2(看向第五题),这里只是打个比喻,实际上需要这么理解,把列表里面的所有数据x[:]赋值为x[::-1]

ps::补充,容器类的数据,不需要声明,可以修改里面的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 15:54:15 | 显示全部楼层
看不清
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 16:14:56 From FishC Mobile | 显示全部楼层
x[:]调用的是列表的方法
变量原地址不变,修改里面的内容
直接赋值x
会创建一个新的列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-23 17:07:18 | 显示全部楼层
谢谢大家,我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-29 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表