python就業班1_
綜下所述:有兩個知識點:
(1)sys.path
import sys
sys.path
這個打印出來匯入的模組,搜尋的路徑,需要要新增的話,
sys.path.append('../')的形式新增。
(2)reload(test)
import 後,程式執行過程中更改,函式並不會更改,如果要重新整理函式
from imp import *
reload(test)
才會重新載入test.py函式。
(3)迴圈匯入
a.py b.py
a 與 b 相互以呼叫,這樣就會出現迴圈匯入的問題。
在設計的初始階段,應該避免這種呼叫方法。
(4)== 與 is
== 判斷,值 是否相等
is 判斷是否是同一個東西
c=a ,是引用傳遞,
id(a) 檢視a物件的記憶體地址。
(5)深拷貝、淺拷貝
淺拷貝
a=[11,22,33]
b=a
深拷貝
import copy
a=[11,22,33]
c=copy.deepcopy(a)
copy.copy()
可變型別:copy第一層(列表【】)
不可變型別:不copy (元組())
copy.deepcopy()
可變型別和不可變型別,都copy
如果有引用,繼續copy.
(6)進位制、位運算
(7)原碼、反碼、補碼
(8)位運算,&
左移*2 5<<1 10 右移/2 10>>1 5 按位與 & 全1才1,否則0 ,逐位進行與運算。 按位或 | 全0才0,否則1 按位異或 ^ 相同為1,不同為0 取反 ~ 取相反
(9)property
方式一: class Test(object): def __init__(self): self.__num=100 def getNum(self): return self.__num def setNum(self,newValue): self.__num=newValue num=property(getNum,setNum) t=Test() print(t.num) t.num=200 print(t.num) 方式二:裝飾器 class Test(object): def __init__(self): self.__money=0 @property def money(self): return self.__money @money.setter def money(self,value): if isinstance(value,int): self.__money=value else: return "error value type". t=Test() print(t.money) t.money=200 print(t.money)
1.知識點
匯入
迴圈匯入
作用域
== is
深copy,淺 copy
禁制,位運算
私有化
其他的知識點
2.import匯入模組
import xxx
=>ImportError :No module named 'xxx'
import sys
sys.path
=>打印出列表。顯示,匯入包時,搜尋的路徑。
sys.path
['',
'/usr/lib/python35.zip',
...]
這是一個列表,列表支援append .
sys.path.append('/home') .新增home路徑到sys.path的查詢路徑上。
import .匯入之後的模組,如果執行Python後就會一直用之前import 的內容,這個時候,如果程式發生了變化,import 的內容,
不會發生變化。
(2)重新載入:
如果在程式執行的過程中,要重新載入程式:
from imp import *
reload(test)
3.迴圈匯入
a.py
b.py
a要匯入b,b還要匯入a的情況。
一大半的錯誤,都是自己剛開始的時候,沒有注意到錯誤引起的。
b.py
def b():
print("------b-----")
a.py
from b import b
def a():
print("-------a---")
b()
a()
然後執行呼叫,python a.py
就會輸出了,之前一直報錯,EOLError ,for why ,because i forget the "" of b function .
== 與 is
a=[11,22,33]
b=[11,22,33]
a==b
True
a is b
False
c=a
c is a
True
id(a) 140664155920392
id(b) 140664155926664
id(c) 140664155920392c=a ,傳遞的是a的記憶體的引用。實際指向同一個東西。
如果這個時候,a的內容更改,會重新建立列表。
這時候 c is a False .即c 和 a 將不再是同1個東西。a=100
b=100
a ==b True
a is b True .
a=10000
b=10000
a=b True
a is b False
在python 中,如果值在-126-127之間,則is 的時候是相同的,除此之外是不相同的。
5.深拷貝、淺拷貝淺拷貝:引用地址的傳遞,沒有開闢新記憶體建立。
a=[11,22,33]
b=a
a is b
True
深拷貝:將物件的記憶體內容重新建立,如果有引用,引用的物件也重新建立。
import copy
a=[11,22,33]
c=copy.deepcopy(a)
這個是深copy,id(a)!=id(b)
a=[11,22,33,44],此時,b也會更改為[11,22,33,44]
c不會更改
深拷貝:(copy.deepcopy()--如果裡面有引用,就接著copy)
a=[11,22,33]
b=[44,55,66]
c=[a,b]
d=c
e=copy.deepcopy(c)a.append(44) d [[11,22,33,44],[44,55,66]] e [[11,22,33],[44,55,66]] 元組,和列表,都會發生copy變化。
深拷貝:(copy.copy()--僅copy第一層。是可變型別,copy一層, 不可變型別,不copy)
a=[1,2,3]
b=[4,5,6]
c=[a,b]
e=copy.copy(c)
a.append(4)
c
[[1,2,3,4],[4,5,6]]
e
[[1,2,3,4],[4,5,6]]
如果是列表【】,第一層是copy 的。
如果是元組(),第一層不copy .
元組特點:(不可變型別)copy可以判斷是否是可變型別。
6.進位制、位運算進位制
十進位制、二進位制、八進位制、十六進位制
轉換
7.原碼、反碼、補碼
1個位元組有8位
1B=8bit
0000 0000 0000 0001
第一個0 用來表示符號。(0為正,1為負)
+2
0000 0000 0000 0010
-2
1000 0000 0000 0010
+1 與 -1 相加
0000 0000 0000 0001
1000 0000 0000 0001
=》
1000 0000 0000 0010
結果是-2 .是錯誤的。
規則:
正數: 原碼 = 反碼 = 補碼
負數: 反碼 = 符號位不變.其他取反
補碼 = 反碼 + 1
原碼 = 補碼的符號為不變--》資料位取反+1
補碼相加
溢位:
CPU小模組,加法比較快。減法慢。
十進位制轉二進位制:bin(18) 0b10010
十進位制轉八進位制:oct(18) 0o22
十進位制轉十六進位制:hex(18) 0x12
十六進位制轉十進位制:int('0x12',16)
八進位制轉換十進位制:int('0o22',8)
8.位運算
對數值,進行bit位運算。
乘法運算:
轉換成二進位制,往左移動。每移動一次,乘以2。而且效率很高。
問:如何快速對兩個值,進行相乘?
左移和右移動,速度很快,效率很高。
5<<1 10
5<<3 40
10>>1 5
位移運算子:>> ,<<
<<,>> 位運算作用:快速進行乘法和除法。
2*3
2<<1 +2
運算,都是對補碼,進行運算。
~9 ==-10
9的原碼:0000 1001
9的補碼:0000 1001
對補碼取反:1111 0110
轉成原碼:1000 1010
就是 -10 .
9.私有化
__init__() 無法訪問,私有化。
python中 ”__“代表私有化。
如果子類,繼承了原來的類,那麼子類,不能訪問原來的類的私有化的屬性。
(1)
__屬性 私有屬性
__方法 私有方法
私有屬性,私有方法,類外面,不能用
子類,不能繼承的。子類不能直接呼叫。
(2)
屬性
方法
公有變數
(3)
__屬性__
__方法__
系統提供的方法,自己不要寫這樣的符號
(4)
_屬性
_方法
模組內可用,模組外不能用。私有化屬性和方法。
from somemodule import * .
禁止匯入,類內部和子類可以用。
名字重整
__xx__ 系統的方法
_x: 類內部可訪問方法。
10.property
class Test(object):
def __init__(self):
self.__num=100
def getNum(self):
return self.__num
def setNum(self,newNum):
self.__num=newNum
t=Test()
print(t.num)
t.num=200
print(t.num)
property的作用,相當於對方法進行了封裝,開發者對屬性設定資料的時候更加方便。
(1)property用法一:
class Test(object):
def __init__(self):
self.__num=100
def getNum(self):
return self.__num
def setNum(self,newNum):
self.__num=value
num=property(getNum,setNum)
t=Test()
print(t.num)
t.mum=200
print(t.num)
(2)property用法二
class Test(object):
def __init__(self):
self.__money=0
@property
def money(self):
return self.__money
@money.setter
def money(self,value):
if isinstance(value,int):
self.__money=value
else:
print("error:not int type")