Boibot 发表于 2021-9-6 00:22:11

在菜鸟论坛看到的传可变对象实例,print ("函数外取值: ", mylist)


#!/usr/bin/python3

# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append()
   print ("函数内取值: ", mylist)
   return

# 调用changeme函数
mylist =
changeme( mylist )
print ("函数外取值: ", mylist)


传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

函数内取值:]
函数外取值:]

mylist = ,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?

Boibot 发表于 2021-9-6 00:22:48

今天见了

大马强 发表于 2021-9-6 07:02:21

你都知道这是个全局变量了,原数据为 在函数changeme()append了 ,这不是改变了吗

逃兵 发表于 2021-9-6 08:15:21

mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变

打个比方
mylist就像是个衣橱
它没有变成桌子凳子
只是在衣橱中增加了一顶帽子
没有改变它依旧是同一个衣橱的本质

傻眼貓咪 发表于 2021-9-6 10:31:13

def changeme( mylist ):
   arr = mylist[:] # 如果不想影響全局變量,可以在函數裡面定義新列表取代
   arr.append()
   print ("函数内取值: ", arr)
   return # 沒有返回值,return 可有可無

mylist =
changeme( mylist )
print ("函数外取值: ", mylist)

Boibot 发表于 2021-9-6 21:49:50

大马强 发表于 2021-9-6 07:02
你都知道这是个全局变量了,原数据为 在函数changeme()append了 ,这不是改变 ...

忘了全局变量是可以改变的

Boibot 发表于 2021-9-6 23:47:53

逃兵 发表于 2021-9-6 08:15
mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变



回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?

Boibot 发表于 2021-9-6 23:48:24

大马强 发表于 2021-9-6 07:02
你都知道这是个全局变量了,原数据为 在函数changeme()append了 ,这不是改变 ...

回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?就这理解不了

Boibot 发表于 2021-9-7 00:00:42

傻眼貓咪 发表于 2021-9-6 10:31


回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?

大马强 发表于 2021-9-7 07:07:12

Boibot 发表于 2021-9-6 23:48
回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ...

列表有特殊性,参考4楼大佬

Boibot 发表于 2021-9-7 08:10:09

mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变
页: [1]
查看完整版本: 在菜鸟论坛看到的传可变对象实例,print ("函数外取值: ", mylist)