鱼C论坛

 找回密码
 立即注册
查看: 648|回复: 12

[已解决]不知道为什么可以修改全局变量的问题

[复制链接]
发表于 2018-7-23 09:27:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
10 进制转2进制
我的代码写完之后,才发现修改了全局变量,而且把list放进里面,会出错。。这样反而会出结果
#!/usr/bin/env python
# -*- coding: utf-8 -*-


list1 = []


def bin2(x):
    if x == 0:
        return list1
    else:
        list1.append(str(x % 2))
        bin2(x//2)


bin2(62)
print(list1)
str1 = ''
while list1:
    str1 += list1.pop()
print(str1)
最佳答案
2018-7-23 09:39:10
本帖最后由 凌九霄 于 2018-7-23 09:53 编辑

传入可变参数如list、set、dict,在函数内部对参数做出修改,参数本身发生变化。tuple、str不变,要修改需要加global关键字

十进制转2进制

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

使用道具 举报

发表于 2018-7-23 09:39:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 凌九霄 于 2018-7-23 09:53 编辑

传入可变参数如list、set、dict,在函数内部对参数做出修改,参数本身发生变化。tuple、str不变,要修改需要加global关键字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 09:42:26 | 显示全部楼层
全局变量的意思就是所有的地方都可以使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 09:49:33 | 显示全部楼层
BngThea 发表于 2018-7-23 09:42
全局变量的意思就是所有的地方都可以使用

但是我修改成功了,而且没用上global
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 09:50:06 | 显示全部楼层
jhr622250 发表于 2018-7-23 09:49
但是我修改成功了,而且没用上global

还有我,为什么把全局变量放进函数内部就出错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 09:55:14 | 显示全部楼层
jhr622250 发表于 2018-7-23 09:50
还有我,为什么把全局变量放进函数内部就出错啊

放内部的话每次递归都会被置空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 09:57:43 | 显示全部楼层
凌九霄 发表于 2018-7-23 09:39
传入可变参数如list、set、dict,在函数内部对参数做出修改,参数本身发生变化。tuple、str不变,要修改需 ...

嗯嗯,我有点明白了,知道为什么修改成功了。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 10:02:29 | 显示全部楼层
凌九霄 发表于 2018-7-23 09:55
放内部的话每次递归都会被置空

嗯嗯,谢谢,。。但是我刚才试了一下,输出list1,NameError: name 'list1' is not defined。为什么不能输出空列表啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 10:06:08 | 显示全部楼层
凌九霄 发表于 2018-7-23 09:55
放内部的话每次递归都会被置空
def bin2(x):
    list1 = []
    if x == 0:
        return list1
    else:
        list1.append(str(x % 2))
        bin2(x//2)


'''bin2(62)
print(list1)
str1 = ''
while list1:
    str1 += list1.pop()'''
print(bin2(7))

输出是none对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 10:08:00 | 显示全部楼层
本帖最后由 凌九霄 于 2018-7-23 10:09 编辑
jhr622250 发表于 2018-7-23 10:02
嗯嗯,谢谢,。。但是我刚才试了一下,输出list1,NameError: name 'list1' is not defined。为什么不能 ...


下面的print(list1)之类没有注释吧,肯定是未定义了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 10:11:19 | 显示全部楼层
凌九霄 发表于 2018-7-23 10:08
下面的print(list1)之类没有注释吧,肯定是未定义了
#!/usr/bin/env python
# -*- coding: utf-8 -*-





def bin2(x):
    list1 = ['empty']
    if x == 0:
        return list1
    else:
        list1.append(str(x % 2))
        bin2(x//2)


'''bin2(62)
print(list1)
str1 = ''
while list1:
    str1 += list1.pop()'''
print(bin2(7))
为什么输出还是none而不是['empty']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 10:39:36 | 显示全部楼层
jhr622250 发表于 2018-7-23 10:11
为什么输出还是none而不是['empty']


1、当函数没有显式return,默认返回None值

2、当递归函数有return时,在递归的地方也要return,不然永远返回的是None

所以
def bin2(x):
    list1 = []
    if x == 0:
        return list1
    else:
        list1.append(str(x % 2))
        return bin2(x//2)

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

使用道具 举报

 楼主| 发表于 2018-7-23 11:06:02 | 显示全部楼层
凌九霄 发表于 2018-7-23 10:39
1、当函数没有显式return,默认返回None值

2、当递归函数有return时,在递归的地方也要return,不然 ...

谢谢讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 17:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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