python简单入门
一. 初識python.
1. 認識計算機
CPU(大腦) 3GHZ + 內存(DDR4) + 主板 + 電源(心臟)+ 顯示器 + 鍵盤 +鼠標+ 顯卡 + 硬盤 80MB/s
操作系統
windows 家用
linux 服務器
macOS 家用+服務器
計算機是一個高度集成的電子電路
高低電平. 二進制
二進制沒有2 -> 0 1
八進制沒有8 -> 0-7
十進制沒有10 -> 0-9
十六進制沒有16 -> 0-9 A-F
顯卡
1. NAVID 看型號。
2. AMD 圖形處理
2. python歷史
python是一門弱類型解釋型高級編程語言
編譯型, 把寫好的程序編譯成計算機認識的二進制
優點:一次編譯到處運行。 運行效率高, 開發效率低 0.001s
解釋型,
缺點:運行慢 ? 0.01s
優點:開發效率高. 簡單
3. python的版本
2.x ? 老版本已經不再更新,2020年已將淘汰
3.x ? 學習用這個
4. 安裝
?
網址:python.org
?
選擇:3.6.5??? mac選擇macOS 64-bit installer
?
?
?
安裝:
?
?
5. 編輯器的選擇
1. 所有的文本編輯器都可以編寫代碼。記事本,Editplus,sublime, pycharm(收費)
2. 可以在命令行寫代碼.
6. 第一個python程序
python程序有兩種編寫方式:
1. 進入cmd控制臺. 輸入python進入編輯模式. 這時候我們可以直接編寫python程序
2. 也可以在.py文件中編寫python代碼. 通過python命令來執行python代碼
7. 變量
概念: 把程序運行過程中產生的中間值保存在內存. 方便后面使用.
命名規范:
1. 數字, 字母, 下劃線組成
2. 不能數字開頭, 更不能是純數字
3. 不能用關鍵字
4. 不要用中文
5. 要有意義
6. 不要太長
7. 區分大小寫
8. 駝峰或者下劃線命名
數據類型:
1. int 整數 +-*/ % // **
2. str 字符串 ', ", ''', """ 括起來的內容 +拼接 (用"+"連接的兩端必須是字符串),*重復("*"后面必須跟的是數字),
3. bool 布爾 True, False?
4.換行:"\n"表示轉移字符,換行. 三個單引號或者三個雙引號中的字符串內回車即可換行
5.類型轉換
int(str) ? ?# 字符串轉換成整數
str(int) ? ?# 整數轉換成字符串
8. 常量
本質就是變量. 所有字母都大寫
9. 用戶交互
變量 = input(提示語)
所有的輸入的內容都是字符串
int(變量) 把變量轉化成數字
10. if條件判斷
1.
if 條件:
if語句塊
執行流程:判斷條件是否為真. 如果真. 執行if語句塊
2.
if 條件:
if語句塊
else:
else語句塊
執行流程:判斷條件是否為真. 如果真. 執行if語句塊 否則執行else語句塊
3.
if ?條件1:
? ? ? ? ? ?if-1
elif 條件2:
? ? ? ? ? ?if-2
elif 條件3:
? ? ? ? ? if-3
? ? ? ? ? ....
else:
? ? ? ? ?else語句塊
執行流程:
判斷條件1是否成立, 如果成立執行if-1
否則如果條件2成立, 執行if-2
否則如果條件3成立, 執行if-3
....
否則執行else語句塊
4. 嵌套
if 條件:
? ? ? ?if 條件:
? ? ? ? ? ?..
else:
? ? ? if 條件:
...
11.?while循環
while 條件:
? ? ? 循環體(break, continue)
continue 停止當前本次循環,繼續執行下一循環
break 徹底的干掉一個循環
?
二.運算符和編碼
?
1. 格式化輸出
? %s就是代表字符串的占位符,可以代替所有
? %d,是數字占位符,只能代替數字
name = input("請輸入你的名字:")address = input("你來自哪里:")
hobby = input("你喜歡什么:")
#比較繁瑣的方式
print("我叫"+name+",我來自"+address+",我喜歡"+hobby)
#通用的方式
print("我叫%s,我來自%s,我喜歡%s" % (name,address,hobby))
# python的新版本的方式,簡單
print(f"我叫{name},我來自{address},我喜歡{hobby}")
print("我叫%s,我已經度過了人生的30%%" % "好人") #如果占位時字符串中有%,需要用%%來表示 ?
?
2. 運算符 and or not (難點)
1.算數運算符
2. 比較運算符
3.賦值運算符
4.邏輯運算符
?
運算順序: ()=> not => and =>or
當出現 X or Y 時,判斷X是否為0,如果X是0,則輸出Y,否則返回X
當出現 X and Y 時,判斷X是否為0,如果X是0,則輸出X,否則輸出Y
True相當于非0 ? , ?False相當于0
?
補充:in和not in
? ? 可以判斷xxx字符串是否出現在xxxxx字符串中
? ? content = input("請輸入你的評論")
? ? if "蒼老師" in content or '邱老師' in content:
? ? ? ? ? ? ? print('你輸入的內容不合法')
? ?else: ?
? ? ? ? ? ? ? print("評論成功")
?
?
?
3. 初識編碼 gbk unicode utf-8
1. ascii 8bit 1byte(字節) 256個碼位 只用到了7bit, 用到了前128個 最前面的一位是0
2. 中國人自己對計算機編碼進行統計. 自己設計. 對ascii進行擴展 ANSI 16bit -> 清華同方 -> gbk
GBK 放的是中文編碼. 16bit 2byte 兼容ascii
3. 對所有編碼進行統一. unicode. 萬國碼. 32bit. 4byte. 夠用了但是很浪費
?
4. utf-8 可變長度的unicode
英文: 1byte
歐洲文字: 2byte
中文: 3byte
字節(byte)
1byte = 8bit
1kb = 1024byte
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
1pb = 1024tb
?三.字符, 列表和元組
1. 基本數據類型概況
1, int 整數
2. str 字符串
3. bool 布爾值
4. list 列表. 一般存放大量的數據 ["門神xxxx", "風扇哥xxxx", 元素]
5. tuple 元組. 只讀列表, 只能看啥也不能干. (元素, 元素)
6. dict 字典. {"風扇哥":"王偉哲", "wlh": "王力宏"}
7. set 集合 {"風扇哥", "wlh"}. 不重復
8. bytes 一堆字節. 最小數據單元
?
2. int類型的相關操作.
數字沒辦法執行其他操作. 操作只有+-*/, //, %, **
8bit => 1byte
bit_length() 二進制長度
?
3. bool類型的操作. 基本類型轉換的問題
bool類型沒有操作.
類型轉換
?
結論一: 想把xxx轉化成yy類型. yy(xxx)
結論二: 能夠表示False的數據: 0, "", [], {}, set(), tuple(), None, False
4. str 認識字符串(重點, 多)
字符: 單一的文字符號
字符按照固定的順序連成串
被' 或者" 或者''' 或者"""括起來的內容
索引 編號, 順序
從0開始
?
切片
s[start:end:step]
start:開始
end: 結束 取不到
step: 步長, 控制方向. 每xx個取一個
?
一大波操作.
字符串是不可變的數據類型. 不論如何操作.對原來的字符串是不會有影響的
1, upper() 轉換成大寫. 忽略大小寫
2, strip() 去掉左右兩端的空白 空格, \t \n. 所有用戶輸入的內容都要去空白
3, replace(old, new) 把old替換成new
4, split() 字符串切割
5, startswith() 判斷是否以xxx開頭
6, find() 查找, 找不到返回-1
7, isdigit() 判斷是否是數字組成
8, len() 求長度
?
for循環遍歷字符串
for 變量 in 可迭代對象:
循環體
?
for c in s: # c: charactor(字符) s: string
print(c)
5. 什么是列表
定義: 能裝對象的對象
在python中使用[]來描述列表, 內部元素用逗號隔開. 對數據類型沒有要求
列表存在索引和切片. 和字符串是一樣的.
6. 相關的增刪改查操作(重點)
添加:
1. append() 追加
2. insert(位置, 元素) 插入指定元素到指定位置
刪除:
1. pop(index) 根據索引刪除
2. remove(元素) 根據元素刪除
修改:
索引修改
lst[索引] = 元素
查詢:
for循環.
7. 列表的嵌套
多個列表互相嵌套
8. 列表的其他操作
1. count() 計數
2. sort() 排序,升序 ; sort(reverse = True)降序
3. reverse() 翻轉
4. len() 求長度
9. 什么是元組
能裝對象的對象. 不可變. 一旦確認好. 不可更改
只讀列表
可以迭代
10. 元組的嵌套
和列表一樣.都可以互相嵌套.
元組的不可變: 指向不變
元組不可改,列表可以改
tu = ruple() ?空元組,固定寫法
當元組中只有一個元素時 ? tu = (1,) ?要加","
tu = (1) ?# 不是元組,<class,'int'>
tu = (1,) # 是元組,<class,'tuple'>
元組也是可迭代的,可以使用for循環
關于不可變, 注意: 這里元組的不可變的意思是子元素不可變. 而子元素內部的子元素是可以變, 這取決于子元素是否是可變對象.
11. range(重點, 難點)
數數
range() 可迭代對象
range(參數) [0, 參數)
range(參數1,參數2) [參數1, 參數2)
range(參數1,參數2,step) [參數1,參數2) 每隔step取一個
# 重點
for i in range(len(lst)):
? ? ? ? ?i 索引
? ? ? ? ?lst[i] 元素
print(i, lst[i])?
四. 字典和集合
?
1. 什么是字典
字典是以key:value的形式來保存數據
用{}表示. 存儲的是key:value
2. 字典的增刪改查(重點)
1. 添加
dic[新key] = 值
?
setdefault()
2. 刪除
pop(key)
?
3. 修改
dic[老key] = 值
update() 跟新字典
4. 查詢
dic[key]
get(key, 值)
setdefault(key, value)
5. 遍歷,字典是一個可迭代對象
?
3. 字典的相關操作
1. keys() 獲取到所有的鍵
2. values() 獲取到所有的值
3. items() 拿到所有的鍵值對
4. 字典的嵌套
字典的嵌套. 字典套字典
?
5. 集合(不重要). 去重復
集合中的元素是不重復的. 必須是可哈希的(不可變), 字典中的key
空集合:set()
空元組:tuple()
空列表:list()
非空集合: {123}集合, 集合其實就是不存value的字典
六.小數據池
1. 小數據池, id()
小數據池針對的是: int, str, bool
在py文件中幾乎所有的字符串都會緩存.
id() 查看變量的內存地址
2. is和==的區別
is 比較的是內存地址
== 比較的是內容
當兩個變量指向同一個對象的時候. is是True, ==也是True
3. 編碼
1. ascii. 有: 數字, 字母, 特殊字符. 8bit 1byte 128 最前面是0
2. gbk. 包含: ascii, 中文(主要), 日文, 韓文, 繁體文字. 16bit, 2byte.
3. unicode. 包含gbk,ascii,big5... 32bit, 4byte
4. utf-8. 可變長度的unicode.
1. 英文: 8bit,1byte
2. 歐洲文字: 16bit 2byte
3. 中文: 24bit 3byte
不同的編碼之間不能隨意轉換. 中國人gbk和德國人utf-8罵 想要溝通必須通過英文(unicode)(媒介)
在python3中. 默認的編碼是unicode,我們的字符串就是unicode
在python2中. 默認的編碼是ASCII. Cpython.c語言的默認編碼是ASCII
unicode弊端:在存儲和傳輸的時候. 是很浪費的
在存儲和傳輸的時候不能直接使用unicode. 必須要對字符串進行編碼. 編碼成bytes類型
bytes: 字節形式的字符串
1. encode(編碼格式) 編碼
2. decode(編碼格式) 解碼
bytes是一種另類的字符串表示形式
"哈哈哈" => \xee\xab\x13\xee\xab\x13\xee\xab\x13
七. join,fromkeys和深淺拷貝
?
1.??join,fromkeys
join()
"*".join("馬虎疼") # 馬*虎*疼 把傳遞進去的參數進行迭代. 獲取到的每個元素和前面的*進行拼接. 得到的是字符串
split() 切割. 切割的結果是列表
?
列表和字典: 都不能在循環的時候直接刪除
把要刪除的內容記錄在新列表中然后循環這個新列表. 刪除列表(字典)
?
fromkeys()
坑1: 返回新字典. 不會更改老字典
坑2: 當value是可變的數據類型. 各個key共享同一個可變的數據類型. 其中一個被改變了. 其他都跟著變
?
2. 深淺拷貝(重點, 難點)
1. = 沒有創建新對象, 只是把內存地址進行了復制
2. 淺拷貝 lst.copy() 只拷貝第一層.
3. 深拷貝
import copy
copy.deepcopy() 會把對象內部的所有內容進行拷貝
八. 文件操作
?
1. 文件操作
open 打開
f = open(文件路徑, mode="模式", encoding="編碼格式") 最最底層操作的就是bytes
打開一個文件的時候獲取到的是一個文件句柄.
?
絕對路徑
從磁盤根目錄開始尋找
相對路徑
相對于當前程序所在的文件夾
../ 上一層文件
文件夾/ 進入xxx文件夾
?
2. mode:
?打開文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默認使用的是r(只讀)模式?
r: 讀取,只讀.
讀取文件的相關操作
1. read()
默認: 讀取文件內容(全部)
read(n) 讀取n個字符
2. readline() 讀取一行
3. readlines() 讀取全部. 返回列表
(最重要)4. for line in f: 每次讀取一行內容
w:
寫入. 只寫
創建文件
會清空文件
a:
也可以創建文件
追加寫
r+: 對于文件而言. 應該有的操作就兩個:讀, 寫
讀寫操作
w+:
寫讀操作
a+:
追加寫讀
?
所有帶b的表示直接操作的是bytes, 當處理非文本文件的時候.
rb
wb
?
ab: 斷點續傳
?
r+b
w+b
a+b
?深坑請注意: 在r+模式下. 如果讀取了內容. 不論讀取內容多少. 光標顯示的是多少. 再寫入 或者操作文件的時候都是在結尾進行的操作.?
?
3. 文件操作中關于文件句柄的相關操作
seek() 移動光標
f.seek(0) 移動到開頭(最多)
f.seek(0, 2) 移動到末尾
seek:兩個參數
1. 表示偏移量
2. 從xxx開始偏移, 默認0, 開頭 1, 當前位置 2, 末尾
?
tell:
返回光標所在的位置
?
4. 文件修改, 實際操作(重點)
?
?
?
九. 初識函數
1. 什么是函數?
f(x) = x + 1
y = x + 1
函數是對功能或者動作的封裝
2. 函數的語法和定義
def 函數名():
函數體
調用:
函數名()
3. 關于函數的返回值
return : 返回
1. 當程序沒寫過return, 不返回任何結果. 如果你非要接收. 接受到的是None
2. 當函數寫return 值, 有一個返回值.
3. 當函數寫了return 值1, 值2, 值3.... 返回多個結果. 多個結果打包成元組
4. 當程序執行到return, 函數結束執行
4. 函數的參數(部分)
小括號是什么, 小括號表示調用, 傳參
什么是參數: 參數是給函數傳遞的信息
1.形參: 在函數聲明的位置寫的變量
1. 位置參數
2. 默認值
3. 動態傳參 *, **
2.實參: 在函數調用的時候給函數傳遞的具體的值
1. 位置參數
2. 關鍵字參數
3. 混合: 位置, 關鍵字
3.傳參: 把實參給形參的過程
4. 動態傳參(重點) *, **
*, ** :
形參: 聚合
位置參數* -> 元組
關鍵字** -> 字典
實參: 打散
列表, 字符串, 元素 -> *
字典 -> **
形參順序(重點):
位置, *args, 默認值, **kwargs
無敵傳參
def func(*args, **kwargs): arguments參數 keyword-arguments關鍵字參數
pass
十.函數的進階
1. 作用域和名稱空間
名稱空間: (用來存放名字(變量, 函數名, 類名, 引入的模塊名)的)
1. 全局名稱空間: 我們在py文件中自己寫的變量, 函數.....
2. 內置名稱空間: 我們python解釋器提供好的一些內置內容(print, input....)
3. 局部名稱空間: 在我們執行函數的時候.會產生一個局部名稱空間. 放的是: 函數內部的內容(變量, 函數,類...)
名稱空間可能會有無數個, 局部名稱空間而言. 相對是獨立的.一般互不干擾
作用域:
1. 全局作用域: 內置+全局
2. 局部作用域: 局部
globals() 查看全局作用域
locals() 查看當前作用域
2. 函數的嵌套
在函數中聲明函數
在內部函數中使用變量的時候, 查找順序: 先找自己 -> 上一層 -> 上一層..全局 -> 內置
3. nonlocal和global關鍵字(重點)
global: 在局部引入全局變量
nonlocal: 在局部...內層函數引入外層離他最近的那個變量.
?十一.?第一類對象 閉包 迭代器
1.第一類對象-> 函數名 -> 變量名
函數對象對象可以像變量一樣進行賦值
還可以作為列表的元素進行使用
可以作為返回值返回
可以作為參數進行傳遞
2.閉包 -> 函數的嵌套
內層函數對外層函數中的變量的使用
好處:
1. 保護變量不被侵害
2. 讓一個變量常駐內存
如何通過代碼查看一個閉包
__closure__: 有東西就是閉包. 沒東西就不是閉包
3.迭代器 -> 固定的思路. for循環
一個數據類型中包含了__iter__函數表示這個數據是可迭代的
dir(數據): 返回這個數據可以執行的所有操作
判斷迭代器和可迭代對象的方案(野路子)
? ? ? ? __iter__ ? ? ? ? ? ?可迭代的
__iter__ __next__ ? ?迭代器
判斷迭代器和可迭代對象的方案(官方)
from collections import Iterable, Iterator
isinstance(對象, Iterable) 是否是可迭代的
isinstance(對象, Iterator) 是否是迭代器
模擬for循環
lst= []
# 拿迭代器
it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break
特征:
1. 省內存(生成器)
2. 惰性機制
3. 只能向前. 不能后退
作用:統一了各種數據類型的遍歷
十二. 生成器和各種推導式
1. 生成器
本質就是迭代器.
一個一個的創建對象
創建生成器的方式:
1. 生成器函數
2. 通過生成器表達式來獲取生成器
3. 類型轉換(看不到)
2. 生成器函數 (重點)
生成器函數中包含 yield , 返回數據和return差不多.
return會立即結束這個函數的執行
yield 可以分段的執行一個函數
生成器函數在執行的時候返回生成器. 而不是直接執行此函數
能向下執行的兩個條件:
__next__() :執行到下一個yield
send() :執行到下一個yield, 給上一個yield位置傳值
所有的生成器都是迭代器都可以直接使用for循環
都可以使用list()函數來獲取到生成器內所有的數據
生成器中記錄的是代碼而不是函數的運行
def func():
print("我的天哪 ")
yield "寶寶"
gen = func() # 創建生成器. 此時運行會把生成器函數中的代碼記錄在內存
當執行到__next__(), 運行此空間中的代碼, 運行到yield結束.
優點: 節省內存, 生成器本身就是代碼. 幾乎不占用內存
特點: 惰性機制, 只能向前. 不能反復
3. 各種推導式 (詭異)
列表推導式 [結果 for循環 if]
字典推導式 {結果(k:v) for循環 if}
集合推導式 {結果(k) for循環 if}
?
4. 生成器表達式 (重點)
(結果 for循環 if)
轉載于:https://www.cnblogs.com/python-coder/p/10029125.html
總結
以上是生活随笔為你收集整理的python简单入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法65----字符串
- 下一篇: H5页面单点登录跳回首页 http u