V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
larkifly
V2EX  ›  Python

玩了两年的python,才知道if、try、for等语句并不会产生新的作用域

  •  
  •   larkifly · 2013 年 8 月 9 日 · 9381 次点击
    这是一个创建于 4538 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题, 作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域。

    一直以为if,try,for都会产生作用域,哈哈。too young too simple
    30 条回复    1970-01-01 08:00:00 +08:00
    davepkxxx
        1
    davepkxxx  
       2013 年 8 月 9 日
    擦,刚知道。
    cxh116
        2
    cxh116  
       2013 年 8 月 9 日
    js,ruby也是
    cxe2v
        3
    cxe2v  
       2013 年 8 月 9 日
    什么叫做作用域?
    larkifly
        4
    larkifly  
    OP
       2013 年 8 月 9 日
    @cxe2v 这个.........请google
    larkifly
        5
    larkifly  
    OP
       2013 年 8 月 9 日
    @cxh116 这两种语言都没学习过了,我在想php是不是也是这样的?
    lycheng
        6
    lycheng  
       2013 年 8 月 9 日
    也是前几天才刚知道啊
    cj1324
        7
    cj1324  
       2013 年 8 月 9 日
    一直知道 他的作用域是方法级别的.
    但是还是喜欢在 if 外面加一个 xxx = None 算是强迫症吧~
    larkifly
        8
    larkifly  
    OP
       2013 年 8 月 9 日
    @cj1324 我也是,哈哈,可能之前我写C形成的习惯吧
    felix021
        9
    felix021  
       2013 年 8 月 9 日
    @cj1324
    握爪…… 有的时候会觉得,别人会看这个代码的,小心被砍。
    cj1324
        10
    cj1324  
       2013 年 8 月 9 日
    关键是有一种情况. if 判断不通过 ,但是下面却用了这个变量. 为None 的话 比较可控。
    cxe2v
        11
    cxe2v  
       2013 年 8 月 9 日
    @larkifly 哈哈,我是来恶搞的你看不出来么
    cxe2v
        12
    cxe2v  
       2013 年 8 月 9 日
    @larkifly 哈哈,我是来恶搞的
    wenbinwu
        13
    wenbinwu  
       2013 年 8 月 9 日
    larkifly
        14
    larkifly  
    OP
       2013 年 8 月 9 日
    @cxe2v 好吧,我太善良了
    behappy
        15
    behappy  
       2013 年 8 月 9 日
    怪不得前几天写js出现了自认为奇怪的事情 =。=
    micoo
        16
    micoo  
       2013 年 8 月 9 日
    啊哦,只学了JS、PHP,就知道这两个不会......
    pandada8
        17
    pandada8  
       2013 年 8 月 9 日
    - =大约从C系入门的都会被这个坑……
    //今天刚刚被js坑进……
    Perry
        18
    Perry  
       2013 年 8 月 9 日 via iPhone
    就是scope吧,也被js坑过。。
    sunchen
        19
    sunchen  
       2013 年 8 月 9 日
    我擦,我必须要去检查下我的python代码了。。算了,我连这个都不知道,写的代码肯定是渣了,删了算了
    binux
        20
    binux  
       2013 年 8 月 9 日
    还有 for i in x:
    这个i在for完了之后依然存在
    lequiet
        21
    lequiet  
       2013 年 8 月 9 日
    看同事的代码发现了。。。。明明在前一个分支上定义的变量,竟然在另一个分支上用
    larkifly
        22
    larkifly  
    OP
       2013 年 8 月 10 日
    哈哈,被坑的还真不少
    wildog
        23
    wildog  
       2013 年 8 月 10 日
    在js上同样被坑过的路过
    raincious
        24
    raincious  
       2013 年 8 月 10 日
    @larkifly

    foreach(array(1,2,3) AS $key => $val) { }

    echo $val; // 嗯?。。。。
    fwee
        25
    fwee  
       2013 年 8 月 10 日
    脚本语言貌似都是这样..
    miaoever
        26
    miaoever  
       2013 年 8 月 10 日
    动态类型的语言不都是这样么。
    davepkxxx
        27
    davepkxxx  
       2013 年 8 月 10 日
    js可以重复声明一个变量。
    laskuma
        28
    laskuma  
       2013 年 8 月 10 日
    @binux 突然就觉得(1..5).each多么科学了。。
    tioover
        29
    tioover  
       2013 年 8 月 10 日
    这个是理所当然的吧
    你在if 块里面声明变量,在块外不能用了还玩什么。
    weakish
        30
    weakish  
       2013 年 8 月 11 日
    依稀記得Python 2裏面 list comprehension相當於直接for,不過到Python 3裏面就有自己的域。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5462 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:41 · PVG 11:41 · LAX 19:41 · JFK 22:41
    ♥ Do have faith in what you're doing.