鱼C论坛

 找回密码
 立即注册
查看: 1800|回复: 5

[已解决]Python作用域问题

[复制链接]
发表于 2018-1-29 10:54:50 | 显示全部楼层 |阅读模式

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

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

x
  1. l=[]
  2. def w():
  3.     l.append(2)
  4.     print(l)


  5. w()
  6. print(l)  
  7. 输出
  8. [2]
  9. [2]
  10. ----------------------------------------------------
  11. l=[]
  12. def w():
  13.     l=[]
  14.     l.append(2)
  15.     print(l)


  16. w()
  17. print(l)  
  18. 输出
  19. [2]
  20. []
  21. 这样函数外边的l=[]就被屏蔽掉了
复制代码

为什么在函数内部没有定义列表l=[]的时候,函数在内部可以用append()方法修改函数外部的列表L啊?
为什么没有出现”找不到L“的错误啊,不是在函数内部是不能修改全局变量的吗,需要修改要加global关键字。。。。。
最佳答案
2018-1-29 11:03:21
作用域的概念没理解清楚
查找某个变量按照作用域规则查找
局部作用域没有就去全局作用域找
只有赋值语句才会定义新的变量 def 也是赋值语句
= 和def定义了新的变量 而append只是调用了对象的方法不会生成新的变量
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-29 11:03:21 | 显示全部楼层    本楼为最佳答案   
作用域的概念没理解清楚
查找某个变量按照作用域规则查找
局部作用域没有就去全局作用域找
只有赋值语句才会定义新的变量 def 也是赋值语句
= 和def定义了新的变量 而append只是调用了对象的方法不会生成新的变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-29 11:04:14 | 显示全部楼层
为什么不加global关键字也能改外部列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 11:06:30 | 显示全部楼层
warms 发表于 2018-1-29 11:04
为什么不加global关键字也能改外部列表

因为l是全局变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 11:10:04 | 显示全部楼层
warms 发表于 2018-1-29 11:04
为什么不加global关键字也能改外部列表

你理解的修改应该是赋值操作的修改 = +=这种
这种是会新定义局部作用域变量的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-29 11:31:49 | 显示全部楼层
#include<stdio.h>

int i=0;
void x()
{
        int i;
        i=8;
        printf("%d",i);

}

int main()
{
        x();
        printf("%d",i);               

}
python里赋值语句就是产生一个新的变量了,所以在函数内声明一个与全局变量相同名字的变量是局部变量,寻找变量是从内向外找的,所以要在函数内部修改全局变量需要加global关键字,C语言需要定义变量,如果函数内没有定义变量那么赋值语句修改的是全局变量,如果定义了变量那么赋值语句修改的就是函数内的局部变量,python不用定义类型,函数内赋值就是产生一个新变量,假如我要改全局变量我就要加global关键字,但是列表是用append()方法修改,没有产生新的变量
有点绕反正懂了。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-6 12:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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