Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

View: New views
13 Messages — Rating Filter:   Alert me  

Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by christanxw :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
Python是不是没有块(Block Scope)方式的作用域的呢?
Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

def fun():
    if True:
        a=10
    else:
        b=a
    print a             # 这里可以访问if Block里的变量

def fun2():
    try:
        a=1
        raise 'err'
    except:
        b=a
    print b              # 这里可以访问Try Block里的变量
   
fun()
fun2()

这样也可以运行。

[CPyUG:109667] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by 森南 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/11/19 christanxw <christanxw@...>:
>
>
> Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
> Python是不是没有块(Block Scope)方式的作用域的呢?
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。
3.0 可以,增加了一个关键词
>
> def fun():
>    if True:
>        a=10
>    else:
>        b=a
此处不可能执行到的

>    print a             # 这里可以访问if Block里的变量
>
> def fun2():
>    try:
>        a=1
>        raise 'err'
>    except:
>        b=a
>    print b              # 这里可以访问Try Block里的变量
>
> fun()
> fun2()
>
> 这样也可以运行。
>
> --
> View this message in context: http://old.nabble.com/Python%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E6%9C%89%E4%BA%BA%E6%84%BF%E6%84%8F%E8%B0%88%E8%B0%88%E5%90%97%EF%BC%8C%E6%84%9F%E8%A7%89%E5%BE%88%E6%80%AA%E5%BC%82%E5%95%8A-tp26421058p26421058.html
> Sent from the python-chinese @ googlegroups mailing list archive at Nabble.com.
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109675] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by Leo Jay :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/11/19 christanxw <christanxw@...>:

>
>
> Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
> Python是不是没有块(Block Scope)方式的作用域的呢?
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。
>
> def fun():
>    if True:
>        a=10
>    else:
>        b=a
>    print a             # 这里可以访问if Block里的变量
>
> def fun2():
>    try:
>        a=1
>        raise 'err'
>    except:
>        b=a
>    print b              # 这里可以访问Try Block里的变量
>
> fun()
> fun2()
>
> 这样也可以运行。
>
>

在python里,只有模块,类和函数这三样才是变量的作用域.
if, try, for 都不是单独的作用域.
所以在if里定义的变量在外面还可以用

--
Best Regards,
Leo Jay

--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109683] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by 欧阳鸿宇 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



2009/11/19 christanxw <christanxw@...>


Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
Python是不是没有块(Block Scope)方式的作用域的呢?
Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

def fun():
   if True:
       a=10 
   else:
       b=a
   print a             # 这里可以访问if Block里的变量

def fun2():
   try:
       a=1
       raise 'err'
   except:
       b=a
   print b              # 这里可以访问Try Block里的变量

fun()
fun2()

上面的a应该可以看成self.a吧? 
这样也可以运行。

--
View this message in context: http://old.nabble.com/Python%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E6%9C%89%E4%BA%BA%E6%84%BF%E6%84%8F%E8%B0%88%E8%B0%88%E5%90%97%EF%BC%8C%E6%84%9F%E8%A7%89%E5%BE%88%E6%80%AA%E5%BC%82%E5%95%8A-tp26421058p26421058.html
Sent from the python-chinese @ googlegroups mailing list archive at Nabble.com.





--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109687] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by Bugzilla from pan.shizhu@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/11/19 christanxw <christanxw@...>:
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

目前的 python 不支持 closure。

--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109691] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by ubunoon-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

不应该从C++或者Java的角度去理解变量,因为那些变量都是显示定义的,Python中的变量,都是运行时产生的,一旦产生,哪儿都可以访问,模块中的变量,就是模块级别的,可以通过locals()函数得到。

2009/11/19 pan shizhu <pan.shizhu@...>
2009/11/19 christanxw <christanxw@...>:
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

目前的 python 不支持 closure。





--
To be pythoner
My blog: http://www.cnblogs.com/ubunoon/


--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109692] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by smallfish@毛贼 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

说个名词把:LGV(local, global, var)
--
BLOG: http://chenxiaoyu.org/blog 俺名字拼音,囧把!~
PYCN: http://pythonchina.org


2009/11/19 ubunoon <netubu@...>
不应该从C++或者Java的角度去理解变量,因为那些变量都是显示定义的,Python中的变量,都是运行时产生的,一旦产生,哪儿都可以访问,模块中的变量,就是模块级别的,可以通过locals()函数得到。

2009/11/19 pan shizhu <pan.shizhu@...>

2009/11/19 christanxw <christanxw@...>:
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

目前的 python 不支持 closure。





--
To be pythoner
My blog: http://www.cnblogs.com/ubunoon/






--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109693] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by heroboy :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



2009/11/19 pan shizhu <pan.shizhu@...>
2009/11/19 christanxw <christanxw@...>:
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

目前的 python 不支持 closure。
原来不支持啊,我一直以为python支持closure啊




--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109697] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by 四不象 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Some parts of this message have been removed. Learn more about Nabble's security policy.
不是说3.0已经支持了吗?
----- Original Message -----
Sent: Thursday, November 19, 2009 4:10 PM
Subject: [CPyUG:109693] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊



2009/11/19 pan shizhu <pan.shizhu@...>
2009/11/19 christanxw <christanxw@...>:
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

目前的 python 不支持 closure。
原来不支持啊,我一直以为python支持closure啊



--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109723] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by 头太晕 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



2009/11/19 欧阳鸿宇 <ouyanghongyu@...>


2009/11/19 christanxw <christanxw@...>


Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
Python是不是没有块(Block Scope)方式的作用域的呢?
Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。

def fun():
   if True:
       a=10 
   else:
       b=a
   print a             # 这里可以访问if Block里的变量

def fun2():
   try:
       a=1
       raise 'err'
   except:
       b=a
   print b              # 这里可以访问Try Block里的变量

fun()
fun2()

上面的a应该可以看成self.a吧? 

你这个self是哪儿来的?
 


--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109730] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by Bugzilla from pan.shizhu@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

但是目前大家用的环境都是 2.5 2.6 之类的。
所以我说"目前"的python不支持。

On Nov 19, 4:24 pm, 四不象 <tabris17...@...> wrote:

> 不是说3.0已经支持了吗?
>
>   ----- Original Message -----
>   From: Heroboy
>   To: python-cn@...
>   Sent: Thursday, November 19, 2009 4:10 PM
>   Subject: [CPyUG:109693] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊
>
>   2009/11/19 pan shizhu <pan.shi...@...>
>
>     2009/11/19 christanxw <christa...@...>:
>     > Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。
>
>     目前的 python 不支持 closure。
>
>   原来不支持啊,我一直以为python支持closure啊
>
>
--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109750] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by HYRY-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Python访问外层函数的变量可以如下写,因为Python可以读外层变量的值,但是不能修改外层变量,因此需要用一个可以修改内容的list,
Python3中可以用nonlocal关键字声明写外层变量:

def outer(v):
    x = [v]
    def inner_read():
        return x[0]
    def inner_inc():
        x[0] += 1
    return inner_read, inner_inc

>>> r,i = outer(0)
>>> r()
0
>>> i()
>>> r()
1
>>> i()
>>> r()
2
>>> i()
>>> r()
3

On 11月19日, 午後3:35, christanxw <christa...@...> wrote:

> Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
> Python是不是没有块(Block Scope)方式的作用域的呢?
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。
>
> def fun():
>     if True:
>         a=10
>     else:
>         b=a
>     print a             # 这里可以访问if Block里的变量
>
> def fun2():
>     try:
>         a=1
>         raise 'err'
>     except:
>         b=a
>     print b              # 这里可以访问Try Block里的变量
>
> fun()
> fun2()
>
> 这样也可以运行。
>
> --
> View this message in context:http://old.nabble.com/Python%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%9C%E7%9...
> Sent from the python-chinese @ googlegroups mailing list archive at Nabble.com.
--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---


[CPyUG:109766] Re: Python变量的作用域有人愿意谈谈吗,感觉很怪异啊

by PanFei :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

请看Lerning Python

2009/11/20 HYRY <ruoyu0088@...>
Python访问外层函数的变量可以如下写,因为Python可以读外层变量的值,但是不能修改外层变量,因此需要用一个可以修改内容的list,
Python3中可以用nonlocal关键字声明写外层变量:

def outer(v):
   x = [v]
   def inner_read():
       return x[0]
   def inner_inc():
       x[0] += 1
   return inner_read, inner_inc

>>> r,i = outer(0)
>>> r()
0
>>> i()
>>> r()
1
>>> i()
>>> r()
2
>>> i()
>>> r()
3

On 11月19日, 午後3:35, christanxw <christa...@...> wrote:
> Python变量的作用域有人愿意谈谈吗,感觉很怪异啊,跟传统的C/C++,Java等都不同啊。
> Python是不是没有块(Block Scope)方式的作用域的呢?
> Python支持词法边界吗,比如Lua那样的内层函数可以直接访问外层函数的变量,产生一个闭包。
>
> def fun():
>     if True:
>         a=10
>     else:
>         b=a
>     print a             # 这里可以访问if Block里的变量
>
> def fun2():
>     try:
>         a=1
>         raise 'err'
>     except:
>         b=a
>     print b              # 这里可以访问Try Block里的变量
>
> fun()
> fun2()
>
> 这样也可以运行。
>
> --
> View this message in context:http://old.nabble.com/Python%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%9C%E7%9...
> Sent from the python-chinese @ googlegroups mailing list archive at Nabble.com.



--~--~---------~--~----~------------~-------~--~----~
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:python-cn@...
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
-~----------~----~----~----~------~----~------~--~---