python基礎補充

2021-09-07 01:30:44 字數 1307 閱讀 2023

import  random

print random.choice(range(10))

和from  random import choice

print choice(range(10))

第一種方法:將模組的名字設定為乙個隱含在名字空間裡的全域性變數,這樣就好像訪問全域性屬性那樣訪問choice函式;

第二種方法:直接把choice引入到全域性名字空間裡來(而非模組的名字),因此不再需要把這個屬性當初模組的成員,實際上我們也只是擁有這個屬性而已;

python中存在的誤解:以為第二種方法只匯入了個函式,而沒有匯入整個模組,這個不對的;整個模組已經被匯入了,但是只有那個函式的引用被儲存下來,所有;from-import

這種語法並不能帶來效能上的差異,也沒有節省記憶體一說;

很多人擔憂的乙個問題是有兩個模組m.py 和n.py都匯入了foo.py模組,當m匯入n時,foo豈不是被匯入了兩次?簡單的說,當python碰到乙個已經載入的模組又被匯入時,

它會跳重載入的過程,所以無需擔心額外消耗記憶體的問題;

這個問題不能簡單的使用是或者不是來回答,只能說看情況而定-----有的物件在傳入函式時是傳引用,而有些則是被複製進來,即傳值;判斷的依據就是看物件的可改變性(mutability),而這一點取決於物件的型別;python程式設計師通常不用「傳值」還是「傳引用「這種說法,取而代之的是物件是可變的(mutable)還是不可變的(immutable)。

簡單的型別或者「標量」型別,包括整數或其他數字型別,str 和 unicode這樣的字串型別,以及元組都是不可變的;

列表、字典、類、類例項等都是可變的;

例項:

1 >>> mylist = [1, '

a' , ['

223', '

bar']2

... ]

3 >>> mylist2 =list(mylist)

4 >>> mylist2[0] = 2

5 >>> mylist2[2][0] = '

zzz'    #修改列表的第乙個元素

6 >>> print

mylist

7 [1, '

a', ['

zzz', '

bar'

]]8 >>> print

mylist2

9 [2, '

a', ['

zzz', '

bar'

]]10 >>>

總結:不可變物件(整數等)真正的被複製, 可變物件只是複製了乙個對它們的引用,即在記憶體中只有乙份物件,而有兩份引用;

這就涉及到乙個 」深拷貝「 的問題

python基礎補充

import random print random.choice range 10 和from random import choice print choice range 10 第一種方法 將模組的名字設定為乙個隱含在名字空間裡的全域性變數,這樣就好像訪問全域性屬性那樣訪問choice函式 第...

Python基礎 模組補充

logging模組 方式一 僅僅只能在控制台 stream 或是檔案中列印日誌資訊 1.日誌等級 由低到高 logging.debug debug message logging.info info message logging.warning warning message logging.er...

python全棧開發基礎 補充 包的補充

1.包a和包b下有同名模組也不會衝突,因為a.a與b.a來自倆個命名空間 2.常見目錄結構 建立目錄 import os os.makedirs glance api os.makedirs glance cmd os.makedirs glance db l map lambda f f.clos...