馮諾依曼體系架構
- CPU有運算器和控制器組成
- 運算器,完成各種算術運算、邏輯運算、數據傳輸等數據加工處理
- 控制器,控制程序的執行
- 存儲器,用於記憶程序和數據,例如內存
- 輸入設備, 將數據或者程序輸入到計算機中,例如鍵盤,鼠標
- 輸出設備,將數據或程序的處理結果展示給用戶,例如顯示器、打印機等
- CPU中還有寄存器和多級緩存Cache
編程基礎
- 計算機語言
- 機器語言
- 一定位數組成二進制的0和1的序列,稱爲機器指令。機器指令的集合就是機器語言
- 與自然語言差異太大,難學、難懂、難寫、難記、難查錯
- 彙編語言
- 用一些助記符號代替機器指令,稱爲彙編語言。ADD A,B 指的是將寄存器A的數與寄存器B的數相加得到的數放到寄存器A中
- 彙編語言寫好的程序需要彙編程序轉化成機器指令
- 彙編語言只是稍微好記一些,可以認爲就是機器指令對應的助記符。只是符號本身接近自然語言
語言分類
- 低級語言
- 面向機器的語言,包括機器語言、彙編語言
- 不同的機器不能通用,不同的機器需要不同的機器指令或者彙編程序
- 高級語言
- 接近自然語言和數學語言的計算機語言
- 高級語言首先要書寫源程序,通過編譯程序把源程序轉化成機器指令的程序
- 1954年正式發佈的Fortran語言是最早的高級語言,本意是公式翻譯
- 人們只需要關心怎麼書寫源程序,針對不同機器的編譯的事交給編譯機器關心處理
- 編譯語言,把源代碼轉換成目標機器的CPU指令
- 解釋語言,解釋後轉換成字節碼,運行在虛擬機上,解釋器執行中間代碼
Python基礎語法
- 註釋——-#標註的文本
- 數字
- 整數,不區分long和int
- 進制0xa、0o10、0b10
- bool,True、Flase
- 浮點數
- 1.2、3.1415、-0.12、1.46e9=1.46*10^9
- 複數 1+2j
- 字符串
- 使用’ ” 單雙引號引用的字符的序列
- ”’和”“”單雙三引號,可以跨行、可以在其中自由的使用單雙引號
- 在字符串前面加上r或者R前綴,表示該字符串不做特殊的處理
- 轉移序列
- \ \t \r \n \’ \”
- 前綴r,把裏面的所有字符當普通字符對待
- 縮進
- 續行
- 在行尾使用\
- 如果使用各種括號,認爲括號內是一個整體,內部跨行不用 \
- 標識符
- 一個名字,用來指代一個值
- 只能用字母、下劃線和數字
- 只能以字母或者下劃線開頭
- 不能是Python的關鍵字
- Python是大小寫敏感的
- 常量
- 一旦賦值就不能改變值的標識符
- Python中無法定義常量
- 字面常量
- 變量
Python的語言類型
- Python是動態語言、強類型語言
- 靜態編譯語言
- 動態編譯語言
- 不用事先聲明類型,隨時可以賦值爲其它類型
- 編譯時不知道是什麼類型,很難判斷
- 強類型語言
- 弱類型語言
運算符Operator
+ - * / % **
- 自然除 / 結果是浮點數
- 位運算符
- & | ~ ^ << >>
- 常用方式:乘除2 的倍數,32//4相當於32>>2
- 12, 0xc, 0o14, 0b110
~12等於多少,爲什麼
12源碼 0000 1100
12反碼 0000 1100
12補碼 0000 1100
12按位取反 1111 0011
1111 0011在計算機中表示負數
符號位不變,按位取反 加 1 1000 1101
-13
- 運算符
- 賦值運算符
- a = min(3,5)
- += -+ *= /= %=等
- x = y = z = 10
- 成員運算符
- 身份運算符
- 運算符優先級
- 算數運算符>位運算符>身份運算符>成員運算符>邏輯運算符
- 善用括號,提升易讀性
表達式Expression
- 由數字、符號、括號、變量等的組合
- 算數表達式
- 邏輯表達式
- 賦值表達式
- python中,賦值既定義,如果一個變量已經定義,賦值相當於重新定義
內存管理
- 引用計數
- 當引用計數爲0,它就可以被垃圾回收
- 垃圾回收GC
程序控制
單分支結構
if condition:
代碼塊
##condition必須是一個bool類型
if 1 < 2:
print("1 less than 2")
- 代碼塊
- 類似於if語句的冒號後面的就是一個語句塊
- 在if、for、def、class等
- False等價布爾值,相當於bool(value)
多分值結構
if...elif...else語句
if condition1:
代碼塊1
elif condition2:
代碼塊2
elif condition3:
代碼塊3
......
else:
代碼塊
a = 5
if a < 0:
print("negative")
elif a == 0:
print("zero")
else:
print("positive")
分支嵌套
score = 80
if score < 0:
print("wrong")
else:
if scoree == 0:
print('egg')
elif score <= 100:
print('right')
else:
print('too big')
- 嵌套結構,可以是分支,循環的嵌套
- 可以相互嵌套多層
循環–while
while condition:
block
當條件滿足即Conditon爲True,進入循環體,執行block
for i in range(10):
print(i+1)
循環 continue語句
- 中斷當前循環的當前執行,繼續下一次循環
- 舉例:計算10以內的偶數(for循環)
for i in range(10):
if i
continue
else:
print(i)
循環 break語句
- 終止當前循環
- 舉例:計算1000以內的被7整除的 前20個數(for循環)
count = 0
for i in range(7,1000,7):
print(i)
count += 1
if count >= 20:
break
循環 continux、break語句
- 總結
- continue和break是循環的控制語句,只是影響當前循環,包括while、for循環
- 如果循環嵌套,contunue和break也只是影星語句所在的那一層循環
- continue和break不是跳出語句塊,所以if cond:break不是跳出if,而是終結if外的break所在的循環
循環 else子句
while condition:
block
else:
block
for elemrnt in iteratable:
block
else:
block
- 如果循環正常的執行結束,就執行else子句;如果使用break終止,else子句就不會執行