推荐学习书目
› 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 · Aug 9, 2013 · 10037 views
    This topic created in 4840 days ago, the information mentioned may be changed or developed.
    如题, 作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域。

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

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

    echo $val; // 嗯?。。。。
    fwee
    fwee
    Aug 10, 2013
    25
    脚本语言貌似都是这样..
    miaoever
    miaoever
    Aug 10, 2013
    26
    动态类型的语言不都是这样么。
    davepkxxx
    davepkxxx
    Aug 10, 2013
    27
    js可以重复声明一个变量。
    laskuma
    laskuma
    Aug 10, 2013
    28
    @binux 突然就觉得(1..5).each多么科学了。。
    tioover
    tioover
    Aug 10, 2013
    29
    这个是理所当然的吧
    你在if 块里面声明变量,在块外不能用了还玩什么。
    weakish
    weakish
    Aug 11, 2013
    30
    依稀記得Python 2裏面 list comprehension相當於直接for,不過到Python 3裏面就有自己的域。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1613 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    ♥ Do have faith in what you're doing.