Day21 命名空間與閉包

2021-07-31 08:05:27 字數 1101 閱讀 6529

1 命名空間與作用域

在python中所有名字的定義都放到namespace中

命名空間分類:

內建命名空間

import this 

dir(buil-in) 檢視全部內建

全域性命名空間

區域性命名空間

在函式體內等

查詢全域性和區域性

globals()方法可以獲得全域性的內容

該方法獲得的全域性內容是呼叫的時候程式之前已經定義過的全域性內容

locals()方法可以獲得區域性的內容

函式巢狀呼叫

函式裡面呼叫別的函式

函式的巢狀定義

在函式裡面定義別的函式

函式物件

函式名稱可以被賦值給變數

函式的執行時函式名稱加()

新賦值的變數也可以加括號執行 閉包

閉包用於包裹函式內部的作用域, 不包裹外部的作用域

閉包的基本形式是:

在函式f1中, 定義f2, f2只能引用f1定義的變數, 之後f1函式返回f2的函式名字

這樣就保證了可以將f1的執行結果賦予給乙個變數, 該變數可以在之後的任何時刻隨時可以執行

x = 100

def f1():

x=1y=2

def f2():

print(x,y)

return f2

f=f1()

f()print(f.__closure__)

print(f.__closure__[0].cell_contents)

print(f.__closure__[1].cell_contents)

利用閉包完成爬取python官網頁面

from urllib.request import urlopen

def f1(url):

def f2():

print(urlopen(url).read())

return f2

python=f1('')

python()

python()

python學習day21 包 異常處理

包 包的本質就是乙個包含 init py檔案的目錄 在python3中,即使包下沒有 init py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯 凡是在匯入時帶點的,點的左邊都必須是乙個包 如果不想在匯入模組時打很多點,可以新增路徑 檢視可匯...

python學習day21 模組和包

序列化模組 資料型別轉化成字串的過程 為了方便儲存和網路傳輸 三種模式 json dumps loads dump 和檔案有關 load 不能load多次 import json data json dic json.dumps data,sort keys true,indent 4,separa...

與或非實習day21

今天是es6的一天 1.let和const命令 作用域,命名規則,一般不要亂重複 變數提公升 要注意的就是這三個地方 用法還是一樣的,只是說應該更注意作用域和變數的宣告 1.函式作用域 var 和塊級作用域 let,const 就是 if for 這些 都是塊級作用域 2.var是可重複定義的,le...