亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

for...in 中的局部變量, 為何能在外面使用?

for...in 中的局部變量, 為何能在外面使用?

梵蒂岡之花 2019-02-25 03:04:08
2016/11/20 問題 詳情見代碼 Python 作為高級語言, 抽象層次很高, 然一個程序員一般都會好幾門語言, 有時候會在語言的細節處, 發生概念性的混淆 有點害怕, 是不是一直誤解了 Python 的作用域原理? 正確的作用域原理是什么? 答案: LEGB法則 初學 Python 語法的時候, 由于覺得這東西太復雜, 就快速跳過了, 沒想到是個坑( maybe feature ? ) 相關代碼 def find(sequence, target): for index, value in enumerate(sequence): if value == target: break else: return -1 return index # ?? 這里是否可表示 index 已經逃離 for...in 作用域了? print find(range(10), 1) for iii in range(10): iii += 1 print iii 一直以為是這樣的 for (int i=0; i<10; ++i) do something # i的作用域在 for 中 重現 拷貝代碼, 運行 嘗試解決 搜索了 Python 作用域的相關介紹 https://www.zhihu.com/questio...
查看完整描述

4 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

這個有點像javascript中的var
在js中

for(var i = 0; i < 100; i++){
    //內容
}
console.log(i);//i = 100

因為js中var定義的變量的作用域是整個函數,所以ES6語法中增加了一個let,let定義的變量就是塊級作用域
如果是for(let i = 0; i < 100; i++),后面再log i的話就是undefined

如果是java的話,也是塊級作用域

for(int i = 0; i < 100; i ++){
    //i在塊級作用域范圍內
}

你的代碼就是java這種

查看完整回答
反對 回復 2019-03-04
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

你改成這樣,打印出locals()函數

def find(sequence, target):
    for index, value in enumerate(sequence):
        if value == target:
            break
    else:
        return -1
    print(locals())
    return index
    

會發現輸出

{'index': 1, 'target': 1, 'value': 1, 'sequence': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

從輸出中可以看到index,value和target,sequence在同一個命名空間。因為他們都在同一函數里。所以是能夠訪問index的.

python的作用域

  1. 在最內層查找,一般是在函數里 ,locals()

  2. 在模塊內查找,即globals()

  3. 在模塊外查找,即__builtin__中查找

查看完整回答
反對 回復 2019-03-04
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

Python 沒有塊作用域

最小的范圍是 函數

查看完整回答
反對 回復 2019-03-04
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

簡單來說,在python中只有模塊,類,和函數才會產生新的作用域,所以for循環里定義的變量在循環外也能訪問,只要他們在同一個作用域里

查看完整回答
反對 回復 2019-03-04
  • 4 回答
  • 0 關注
  • 956 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號