Python论坛  - 讨论区

标题:[python-chinese] python中变量的作用域

2006年02月14日 星期二 10:56

wu wunc superwunc at gmail.com
Tue Feb 14 10:56:52 HKT 2006

在python中函数中是不是定义一个变量,它的作用域是在一个函数体内
例如:
def test():
    for k in range(5):
        print k
    print k
这里变量k出了for循环体,还是合法的,可用的
在java中下面是不合法的
public void test(){
for (int i = 0; i < 5; i++) {
            System.out.println(i);

        }
        System.out.println(i);

}
这里的i是在for循环体中定义的,它的作用域只存在for循环体中

在python中变量的作用域没有像在java中代码块的范围?
像在if ,try, for等中定义新的变量,出了这些代码块,所定义的变量依旧是可用的
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060214/a8d4e03a/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年02月14日 星期二 11:03

limodou limodou at gmail.com
Tue Feb 14 11:03:21 HKT 2006

On 2/14/06, wu wunc <superwunc at gmail.com> wrote:
> 在python中函数中是不是定义一个变量,它的作用域是在一个函数体内
> 例如:
> def test():
>     for k in range(5):
>         print k
>     print k
> 这里变量k出了for循环体,还是合法的,可用的
> 在java中下面是不合法的
> public void test(){
> for (int i = 0; i < 5; i++) {
>              System.out.println(i);
>
>         }
>         System.out.println(i);
>
> }
> 这里的i是在for循环体中定义的,它的作用域只存在for循环体中
>
> 在python中变量的作用域没有像在java中代码块的范围?
> 像在if ,try, for等中定义新的变量,出了这些代码块,所定义的变量依旧是可用的
>

应该是这样的。

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年02月16日 星期四 09:14

Robert Chen search.pythoner at gmail.com
Thu Feb 16 09:14:41 HKT 2006

在Python中,确实只有在执行def和class语句的时候会产生新的作用域,至少根据我现在对Python源码的认识是这样的。而if,try,for等语句的执行不会产生新的作用域。


Robert
Python源码剖析 :http://blog.donews.com/lemur/


On 2/14/06, limodou <limodou at gmail.com> wrote:
>
> On 2/14/06, wu wunc <superwunc at gmail.com> wrote:
> > 在python中函数中是不是定义一个变量,它的作用域是在一个函数体内
> > 例如:
> > def test():
> >     for k in range(5):
> >         print k
> >     print k
> > 这里变量k出了for循环体,还是合法的,可用的
> > 在java中下面是不合法的
> > public void test(){
> > for (int i = 0; i < 5; i++) {
> >              System.out.println(i);
> >
> >         }
> >         System.out.println(i);
> >
> > }
> > 这里的i是在for循环体中定义的,它的作用域只存在for循环体中
> >
> > 在python中变量的作用域没有像在java中代码块的范围?
> > 像在if ,try, for等中定义新的变量,出了这些代码块,所定义的变量依旧是可用的
> >
>
> 应该是这样的。
>
> --
> I like python!
> My Blog: http://www.donews.net/limodou
> NewEdit Maillist: http://groups.google.com/group/NewEdit
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060216/af002a4e/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年02月16日 星期四 12:36

ygao ygao2004 at gmail.com
Thu Feb 16 12:36:54 HKT 2006

if,try,for等语句的执行不会产生新的作用域。这是因为:
它们是语句,是语言的一部分。python文档中应有说明的:

A scope is a textual region of a Python program where a namespace is
directly accessible. ``Directly accessible'' here means that an
unqualified reference to a name attempts to find the name in the
namespace.

Although scopes are determined statically, they are used dynamically.
At any time during execution, there are at least three nested scopes
whose namespaces are directly accessible: the innermost scope, which
is searched first, contains the local names; the namespaces of any
enclosing functions, which are searched starting with the nearest
enclosing scope; the middle scope, searched next, contains the current
module's global names; and the outermost scope (searched last) is the
namespace containing built-in names.



On 2/16/06, Robert Chen <search.pythoner at gmail.com> wrote:
> 在Python中,确实只有在执行def和class语句的时候会产生新的作用域,至少根据我现在对Python源码的认识是这样的。而if,try,for等语句的执行不会产生新的作用域。
>
>
> Robert
> Python源码剖析 :http://blog.donews.com/lemur/
>
>
> On 2/14/06, limodou <limodou at gmail.com> wrote:
> >
> > On 2/14/06, wu wunc <superwunc at gmail.com> wrote:
> > > 在python中函数中是不是定义一个变量,它的作用域是在一个函数体内
> > > 例如:
> > > def test():
> > >     for k in range(5):
> > >         print k
> > >     print k
> > > 这里变量k出了for循环体,还是合法的,可用的
> > > 在java中下面是不合法的
> > > public void test(){
> > > for (int i = 0; i < 5; i++) {
> > >              System.out.println(i);
> > >
> > >         }
> > >         System.out.println(i);
> > >
> > > }
> > > 这里的i是在for循环体中定义的,它的作用域只存在for循环体中
> > >
> > > 在python中变量的作用域没有像在java中代码块的范围?
> > > 像在if ,try, for等中定义新的变量,出了这些代码块,所定义的变量依旧是可用的
> > >
> >
> > 应该是这样的。
> >
> > --
> > I like python!
> > My Blog: http://www.donews.net/limodou
> > NewEdit Maillist: http://groups.google.com/group/NewEdit
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to
> python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to
> python-chinese-request at lists.python.cn
> > Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
> >
> >
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request at lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>
>


--
■■■■■■■■■■■■■■■■■■■■■
Myblog: http://blog.donews.com/ygao/
http://groups.google.com/group/python_study
■■■■■■■■■■■■■■■■■■■■■

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年02月20日 星期一 10:50

麦田守望者 qcxhome at sohu.com
Mon Feb 20 10:50:29 HKT 2006

在def中附值的变量均在local作用域中,因此在附值之后,可随时使用变量
  ----- Original Message ----- 
  From: wu wunc 
  To: python-chinese at lists.python.cn 
  Sent: Tuesday, February 14, 2006 10:56 AM
  Subject: [python-chinese] python中变量的作用域


  在python中函数中是不是定义一个变量,它的作用域是在一个函数体内
  例如:
  def test():
      for k in range(5):
          print k
      print k
  这里变量k出了for循环体,还是合法的,可用的
  在java中下面是不合法的 
  public void test(){
  for (int i = 0; i < 5; i++) {
              System.out.println(i);

          }
          System.out.println(i);

  }
  这里的i是在for循环体中定义的,它的作用域只存在for循环体中

  在python中变量的作用域没有像在java中代码块的范围?
  像在if ,try, for等中定义新的变量,出了这些代码块,所定义的变量依旧是可用的




------------------------------------------------------------------------------


  _______________________________________________
  python-chinese
  Post: send python-chinese at lists.python.cn
  Subscribe: send subscribe to python-chinese-request at lists.python.cn
  Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
  Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060220/87094bac/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号