鱼C论坛

 找回密码
 立即注册
查看: 1153|回复: 7

[已解决]变量

[复制链接]
发表于 2023-7-19 11:48:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 哈岁NB 于 2023-7-19 11:49 编辑

请问这个list_1为什么会报错,他不是全局变量吗
  1. list_1 = []
  2. #解析出每个职位的id
  3. def parse_id():   
  4.     list_1 += re.findall(pattern, brower.page_source)
  5.     return list_1
复制代码
最佳答案
2023-7-19 11:50:32

在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此在函数内部对`list_1`进行修改时会报错。可以将代码改为:

  1. iist_1 = []
  2. # 解析出每个职位的id
  3. def parse_id():
  4.     global list_1  # 声明list_1为全局变量
  5.     list_1 += re.findall(pattern, browser.page_source)
  6.     return list_1
复制代码


这样就可以在函数内部对全局变量`list_1`进行修改了。

求最佳答案
屏幕截图(82).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 11:48:35 | 显示全部楼层
很抱歉,但是您的问题没有提供足够的信息,以便我可以给出具体的答案。为了更好地帮助您,我需要看到您的代码,特别是涉及到您提到的 list_1 变量的部分。然后,我才能确定为什么会出现错误。可能的问题可能包括但不限于命名冲突、变量未初始化、作用域问题等。如果您能提供更多的上下文信息,我将很乐意为您提供更具体的帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:48:43 | 显示全部楼层
根据您提供的代码,list_1 被定义为一个局部变量,并且在 for 循环中进行了赋值操作,但是在使用 print 语句打印 list_1 时报错,提示该变量未定义。

这个错误的原因是变量的作用域(scope)问题。在 Python 中,如果在函数内部或某个代码块内定义了一个变量,它默认将被视为局部变量,只有在该函数或代码块的范围内才能访问。

在您的代码中,list_1 是在 for 循环的代码块中定义的,因此它只在该代码块内部可见。当尝试在循环外部的 print 语句中访问 list_1 时,会出现变量未定义的错误。

要解决这个问题,您可以在循环之前将 list_1 初始化为一个空列表,这样就可以在整个代码块中对其进行访问和修改:
  1. list_1 = []  # 在循环之前初始化 list_1
  2. for i in range(2, page+1):
  3.     list_1 += re.findall(pattern, brower.page_source)
  4.     next_button.click()
  5.     print(f'爬取第{i}页')
  6. print(len(list_1))
  7. print(list_1)
  8. brower.close()
复制代码

通过将 list_1 的初始化放在循环之前,将其定义为全局变量,从而使其在整个代码块中都可见。这样,您应该能够成功访问和打印 list_1 变量。

希望这个解释对您有所帮助!如果您有任何进一步的问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:49:13 | 显示全部楼层
isdkz 发表于 2023-7-19 11:48
很抱歉,但是您的问题没有提供足够的信息,以便我可以给出具体的答案。为了更好地帮助您,我需要看到您的代 ...

  1. list_1 = []
  2. #解析出每个职位的id
  3. def parse_id():   
  4.     list_1 += re.findall(pattern, brower.page_source)
  5.     return list_1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:50:32 | 显示全部楼层    本楼为最佳答案   

在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此在函数内部对`list_1`进行修改时会报错。可以将代码改为:

  1. iist_1 = []
  2. # 解析出每个职位的id
  3. def parse_id():
  4.     global list_1  # 声明list_1为全局变量
  5.     list_1 += re.findall(pattern, browser.page_source)
  6.     return list_1
复制代码


这样就可以在函数内部对全局变量`list_1`进行修改了。

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

使用道具 举报

发表于 2023-7-19 11:50:52 | 显示全部楼层
sfqxx 发表于 2023-7-19 11:50
在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此 ...

《发表于 刚刚》
aaaaaaaaa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:52:24 | 显示全部楼层
sfqxx 发表于 2023-7-19 11:50
在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此 ...

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

使用道具 举报

发表于 2023-7-19 11:53:40 | 显示全部楼层
哈岁NB 发表于 2023-7-19 11:52
解决了,感谢感谢

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 11:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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