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-08-09 15:34:45 +08:00 · 8830 次点击
    这是一个创建于 4153 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题, 作用域由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-08-09 15:37:24 +08:00
    擦,刚知道。
    cxh116
        2
    cxh116  
       2013-08-09 15:38:19 +08:00
    js,ruby也是
    cxe2v
        3
    cxe2v  
       2013-08-09 16:12:00 +08:00
    什么叫做作用域?
    larkifly
        4
    larkifly  
    OP
       2013-08-09 16:52:58 +08:00
    @cxe2v 这个.........请google
    larkifly
        5
    larkifly  
    OP
       2013-08-09 16:54:09 +08:00
    @cxh116 这两种语言都没学习过了,我在想php是不是也是这样的?
    lycheng
        6
    lycheng  
       2013-08-09 16:54:32 +08:00
    也是前几天才刚知道啊
    cj1324
        7
    cj1324  
       2013-08-09 16:59:45 +08:00
    一直知道 他的作用域是方法级别的.
    但是还是喜欢在 if 外面加一个 xxx = None 算是强迫症吧~
    larkifly
        8
    larkifly  
    OP
       2013-08-09 17:01:50 +08:00
    @cj1324 我也是,哈哈,可能之前我写C形成的习惯吧
    felix021
        9
    felix021  
       2013-08-09 17:05:17 +08:00
    @cj1324
    握爪…… 有的时候会觉得,别人会看这个代码的,小心被砍。
    cj1324
        10
    cj1324  
       2013-08-09 17:09:02 +08:00
    关键是有一种情况. if 判断不通过 ,但是下面却用了这个变量. 为None 的话 比较可控。
    cxe2v
        11
    cxe2v  
       2013-08-09 17:12:48 +08:00
    @larkifly 哈哈,我是来恶搞的你看不出来么
    cxe2v
        12
    cxe2v  
       2013-08-09 17:13:03 +08:00
    @larkifly 哈哈,我是来恶搞的
    wenbinwu
        13
    wenbinwu  
       2013-08-09 17:15:24 +08:00
    larkifly
        14
    larkifly  
    OP
       2013-08-09 17:42:44 +08:00
    @cxe2v 好吧,我太善良了
    behappy
        15
    behappy  
       2013-08-09 18:30:02 +08:00
    怪不得前几天写js出现了自认为奇怪的事情 =。=
    micoo
        16
    micoo  
       2013-08-09 18:37:29 +08:00
    啊哦,只学了JS、PHP,就知道这两个不会......
    pandada8
        17
    pandada8  
       2013-08-09 19:21:56 +08:00
    - =大约从C系入门的都会被这个坑……
    //今天刚刚被js坑进……
    Perry
        18
    Perry  
       2013-08-09 19:27:45 +08:00 via iPhone
    就是scope吧,也被js坑过。。
    sunchen
        19
    sunchen  
       2013-08-09 21:14:45 +08:00
    我擦,我必须要去检查下我的python代码了。。算了,我连这个都不知道,写的代码肯定是渣了,删了算了
    binux
        20
    binux  
       2013-08-09 21:16:03 +08:00
    还有 for i in x:
    这个i在for完了之后依然存在
    lequiet
        21
    lequiet  
       2013-08-09 21:37:04 +08:00
    看同事的代码发现了。。。。明明在前一个分支上定义的变量,竟然在另一个分支上用
    larkifly
        22
    larkifly  
    OP
       2013-08-10 08:16:02 +08:00
    哈哈,被坑的还真不少
    wildog
        23
    wildog  
       2013-08-10 08:59:58 +08:00
    在js上同样被坑过的路过
    raincious
        24
    raincious  
       2013-08-10 09:05:25 +08:00
    @larkifly

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

    echo $val; // 嗯?。。。。
    fwee
        25
    fwee  
       2013-08-10 09:06:17 +08:00
    脚本语言貌似都是这样..
    miaoever
        26
    miaoever  
       2013-08-10 09:25:01 +08:00
    动态类型的语言不都是这样么。
    davepkxxx
        27
    davepkxxx  
       2013-08-10 10:46:06 +08:00
    js可以重复声明一个变量。
    laskuma
        28
    laskuma  
       2013-08-10 11:26:38 +08:00
    @binux 突然就觉得(1..5).each多么科学了。。
    tioover
        29
    tioover  
       2013-08-10 20:54:49 +08:00
    这个是理所当然的吧
    你在if 块里面声明变量,在块外不能用了还玩什么。
    weakish
        30
    weakish  
       2013-08-11 00:58:37 +08:00
    依稀記得Python 2裏面 list comprehension相當於直接for,不過到Python 3裏面就有自己的域。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1083 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:30 · PVG 07:30 · LAX 15:30 · JFK 18:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.