pythonif变量作用域
1. python with语句中的变量有作用域吗
2. python局部变量的问题
Python 不存在块级作用域的
if else 属于块级作用域
3. PYTHON 的变量作用域与内存分配
原理:python中任何变量都是对象,所以参数只支持引用传递方式。即通过名字绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中的同一个存储空间。
回答问题2:
每一次给变量赋值就是把这个名称的值在一个新内存中存储 你print (id (a)) 会发现每一次f(x),a的内存地址都是新的。所以你的问题二中L=[4,3] 与之前的L[]不是同一个名称,所以append上a就是[4,3,3](简明点就是L=[4,3]与L=[1,2]是两不同名的玩意)
讨论问题1:
在你的程序中a=1,a=2,a=5是int对象的三个实例,所以占用的是三段不同的内存,自然在程序执行完收回内存的时候才会被清理;而L是通过列表的append方法进行变化时,print (f(1))
print (f(2)) print (f(5))是对对一个实例进行操作的,所以内存地址不变; 同理print (f(3,[4,3]))直接给L赋值时,由于 是一个新的列表实例了,内存位置自然变化。
产生以上的问题的根本原因就是python的精髓:万物皆对象 (赋值的过程是对象的实例化)
看完自己的回答后:感觉真的很绕,不过我是尽力了,希望你能看懂,不明白的话,在追问里注明吧!
4. python 在函数里面定义的变量,在外面就不能用了我不是很想用global
严格的说,象你这么用是绝对属于没有定义的。
不过有时候又可以是因为,如版果你在程序开头函数前权面定义一些变量,原则上它会自动变成global的。 除非你另外启线程,或者是有可能有与它重名的变量,否则可以直接在函数体内使用,当然也可以在后面的语句中使用。
函数式编程要记着IPO这个准则。就是每个函数最好都是有输入input有输出output。函数体就是处理process。尽量不要使用全局变量,也不要使用默认值。一个正规的做法是这样:
def example(a):
a=0
return a
a=1
print example(a)
这是一个标准用法,你就不用为global变量头痛了。
5. 没看python的基础,求教python变量的作用域问题,下面附代码,感谢!
count = 0
def onOpen(self): #文件导入
path = QtGui.QFileDialog.getOpenFileName(self, 'Open file','./')
file = open(path)
data = file.read()
self.newItem = QtGui.QTableWidgetItem(file.name)
self.table.setItem(0,count,self.newItem)
global count
count += 1
这样就行了,python有点扯,全局标量要申明下。
6. python变量的作用域到底怎么理解怎么用呢谢谢!
你可以 在 B页面 里面直接 调用 一下 函数
运行一下 ,你可以发现应该和 刚才 执行A 页面 报的是同样的错误;
这是 因为 在B 页面里面 并没有 s1List 这样一个数组
在运行A页面时,因为有了 from b import * ,python解释器就可以找的getS1和getS2这样的函数名;可以 在 import 之后 print dir() 来查看 当前作用域下可用的名字 ,可以看到 getS1 和getS2 都在其中
之所以 执行 A页面错误,是A页面调用 函数 getS1 时,在B页面中 执行 函数时找不到 s1List这个数组,因为在A 页面的那个 s1List 是不在 B页面的作用范围内的。
7. python 2.7 变量作用域的疑问
在函数中定义和修改全局变量,需要使用global关键字。但访问全局变量(不修改它的值),可以省略global关键字。python这样设计的意义在于,防止python程序员不小心修改了全局变量。使用global关键字后,程序员很清楚自己正在做什么。
在例三中,b()函数并没有修改全局变量u。u是一个对象的引用,有唯一的对象ID。在修改了变量的引用,导致变量ID改变是,才算是“修改了对象”。例如:
u={}
deffoo():
globalu
u=1
returnu
printfoo()
这是全局变量u被修改,因为它由一个字典变成了一个int对象,它的值发生了变化。
望点赞,谢谢支持!
8. python中lambda对于变量作用域的问题
从使用的地方往外查找。所以才有局部变量覆盖全局变量的现象。
9. python 函数作用域问题,
类在定义的时候是有作用域的,这个作用域内的变量只能在 class 块内访问,而不能在类的方法(函数)中访问。
10. Python 变量初值突变问题或者叫变量作用域问题
不是不相干,是你把x和i的值修改了 比如这句: x=2 squared = [x ** 2 for x in range(4)] 你在第一句的时候x是2 但是第二句展开的话就变成了 x = 0