python基礎語法知識點總結
目錄
3.3、位元組碼型別或者說2進位制型別(bytes)和字串型別以及相互轉換
3、python語法:
3.1、三元運算子:簡化程式碼的功能
x = a if a>b else b # 如果a>b 則x = a ,否則 x= b
3.2、if else 寫到一行裡的簡潔寫法:
a, b, c = 1, 2, 3
if a>b:
c = a
else:
c = b
'''
等價於
'''
c = a if a>b else b
'''
意思是如果a>b,則,讓c=a,否則,讓c=b
'''
3.3、位元組碼型別或者說2進位制型別(bytes)和字串型別以及相互轉換
文字資料用的是字串,但是音訊視訊用的是位元組型別,socket 網路傳輸必須是2進位制,因此要轉換bytes,其他情況用str
3.4、集合set
set函式直接可以把列表重複的元素給去掉,集合是無序的
'''
集合是數學上的集合,無序,沒有重複元素的 物件
'''
list1 = [1,2,1,3,4,2]
a = set(list1)
print(a,type(a))
# {1, 2, 3, 4} <class 'set'> 變成集合後將重複元素去掉
'''
相關操作增加和刪除元素 , 求長度,
'''
a.add(999) #在集合中新增一個元素,
a.update([111,222,333]) # 新增多個元素
a.remove(111) #刪除一個元素,沒有這個元素則報錯
a.discard(111) #沒有這個元素不報錯
len(a)
x in a #判斷x是不是a的元素,適用於列表元組,字典,集合,字串
x not in a
'''
兩個集合取交集,並集,差集(我有你沒有的),判斷是否是子集,父集
可以用函式表示,也可以用符號表示
'''
a = set([1,2,1,3,4,2])
b = set([1,4,5,6])
''' 交集 '''
a.intersection(b) 或者
a & b
a.isdisjoint(b) #判斷是不是沒有交集
#{1, 4}
''' 並集 '''
a.union(b) #並集 或者
a | b
''' 差集 '''
a.difference(b))#差集,a有,b沒有
a - b
''' 判斷是否是子集父集 '''
a.issubset(b) #判斷a是不是b的子集
a.issuperset(b) #判斷a是不是b的父集
''' 對稱差集 '''
a.symmetric_difference(b) # 判斷對稱差集 (將a和b裡面相互沒有的元素取出來,相當於
a.intersection(b).union(b.intersection(a)) :兩個差集並在一起 )
a ^ b
3.5 enumerate()函式,列舉的意思,
print(list(enumerate([1,2,3]))) #
[(0, 1), (1, 2), (2, 3)]
3.6、字串操作:
line = 'a b c'
line.strip() #把 \n 換行符去掉
'aaa'.encode('utf-8')
3.7、檔案操作:
'''
windows系統預設編碼GBK格式編碼,如果不指定編碼,則預設用作業系統的編碼(window:GBK)開啟
而python是使用utf-8處理檔案所有語言讀取檔案,其實不是這個語言讀取的,而是呼叫作業系統的IO介面讀取的,f.fileno() 表示開啟了幾個檔案了好像是
# f 是一個記憶體物件(也叫控制程式碼),這個物件包含很多東西,比如檔名,內容,地址等等
r w a r+ w+ a+ rb
# mode='r','w':建立檔案覆蓋之前的了,太危險了 'a' :append 不可以讀可以寫 ;'r+' :可以讀可以寫
# 'w+','a+' 同理 ,寫入 不管什麼時候只能在最後寫,無法再半截處寫
# 'rb' :以二進位制方式讀入,文字檔案這樣讀就報錯了,去掉encoding就好了,但是結果不一樣了,用於讀取視訊圖片等資訊
#網路傳輸(python2還可以用字串傳輸,但是3不可以了必須用二進位制傳輸)
'''
f = open("port.csv",mode='r', encoding="utf-8")
'''讀取內容'''
for line in f :
print(line) # 高效讀取檔案,把f變成迭代器了
d2 = f.read() # 讀取檔案,有點像指標是的,到d2這裡什麼都沒有,讀不出來,可以把游標移回到原來的初始位置
d1 = f.read(5) # 加入引數讀取5個字元,預設為全部讀取 f.readable() 判斷能不能讀
d3= f.readline() # 讀一行,
data=f.readlines() # 這個是讀出來所有內容放到列表裡面,第一個元素是第一行內容...
'''寫入檔案'''
f.write('1,\n') # f.writable() 判斷能不能寫
f.write('2')
f.write('aaa'.encode('utf-8'))
'''
檢視游標 編碼 檔名
'''
print(f.tell()) # 告訴 我游標在何處
print(f.seek(0)) # 將游標設在0處 並不是所有檔案都能移動的,比如Linux一切都是檔案,有些東西以動不了檢視能不能移 用 f.seekable()
print(f.encoding) # 列印什麼編碼
print(f.name) # 列印檔名字
3.8、高階函式:函式名字可以當成引數穿進去
3.9、裝飾器(詳細講解)
import time
def timer(func):
def decorate(*arg,**kwargs): # 不固定引數
'''
:param arg: 將接受的引數 由元組包裹起來
:param kwargs: 將接受的引數 有字典包括起來,
:return:
'''
star_time = time.time()
func(*arg,**kwargs)
stop_time = time.time()
print(stop_time-star_time)
return decorate
@timer # 這一步等於 test1 = timer(test1)
def test1():
time.sleep(3)
print('test1')
@timer
def test2():
time.sleep(3)
print('test2')
test1()
'''
這句話看似呼叫了test1 這個函式了,但是錯了,以及被偷樑換柱了,
由於被裝飾器修飾了,test1 = timer(test1),test1已經被換了換成了decorate函式了,只不過用test1覆蓋了
除錯時候就可以看出來了,
@timer 這一步其實以及偷偷執行timer程式了
'''
test2()
函式呼叫函式,函式順序不影響結果,C語言不一樣,
原來我們怎麼裝飾其他函式的,說白了就是把新建一個函式把原來的函式當成引數穿進去,修改了呼叫方式。
在早些時候 (Python Version < 2.4,2004年以前),為一個函式新增額外功能的寫法是這樣的。
def debug(func):
def wrapper():
print "[DEBUG]: enter {}()".format(func.__name__)
return func()
return wrapper
def say_hello():
print "hello!"
say_hello = debug(say_hello) # 新增功能並保持原函式名不變
函式引數如果是傳入函式,不能加括號,加上括號就不是高階函式了
3.10函式的不固定引數(位置引數和關鍵字引數)
def decorate(*arg,**kwargs): # 不固定引數
'''
:param arg: 將接受的引數 由元組包裹起來
:param kwargs: 將關鍵字引數 有字典包括起來,
3.12、迭代器與生成器
'''python2 和python3 range的區別
生成器節約記憶體,時間快,在for迴圈中使用非常好
'''
a = [i for i in range(10000000000)] # 這個是生成 迭代器
b = (i for i in range(10000000000)) # 生成器,根本沒有生成這些數字,只有訪問時候才有不支援
a[0],只在for迴圈中使用
b.__next__() #只有這個方法,只能記住當前的位置,
'''
可以自己寫一個生成器 比如 斐波那契數列
'''
yield 關鍵字
4、json :和xml一樣逐漸被json淘汰
這是所有語言都預設支援的格式,用於不同語言的互動,比如python的json 轉到Java的json
但是在python中只能儲存簡單的格式,比如字典,列表
5、跨目錄呼叫檔案
pycharm 新增一次似乎永久保留了,path路徑,但是在其他工程下則沒有
'''
下面的程式碼是kuamulu.py的檔案程式碼
匯入包時候在__init__.py檔案會被執行,裡面假如有import numpy這個語句,不會在kuamulu.py
中好用的,會報錯
跨目錄呼叫檔案:
將檔案的絕對路徑動態載入到環境變數中去,但是不能寫死了。否則在其他電腦上不能使用
# print(__file__) #列印相對路徑
os.path.abspath(__file__) #列印絕對路徑,但是還帶著檔名字,需要去掉檔名,
# dirname :當前目錄的上一級目錄 應用兩次
'''
import os
import sys
file_namepath=os.path.abspath(__file__) # 找到本檔案目錄包括檔案 #C:\Users\zjw\PycharmProjects\untitled\test.py
father_path = os.path.dirname(file_namepath) #找到本檔案目錄不包括檔案
print(father_path)
base_dir = os.path.dirname(father_path) #找到本檔案目錄的上一級目錄相當 ../
print(base_dir) # C:\Users\zjw\PycharmProjects\kuamulu
sys.path.append(base_dir)
from conf import conf # 從包中匯入模組 會執行conf 包裡的__init__.py
from main import main # 從包中匯入模組 會執行main 包裡的 __init__.py
conf.conf1()
main.fff()
6、python組織目錄 (爬蟲和其他的有自己的特別目錄)
7、引用深度拷貝淺拷貝的解析:推薦用深度拷貝
參考網站:https://www.cnblogs.com/alinh/p/6603976.html 照的這個來就可以了
#例子
a = [1, 2, 3, 4, ['a', 'b']] #原始物件
b = a #賦值,傳物件的引用
#修改a的值,這時候b也被修改了[1, 2, 3, 4, ['a', 'b'], 1]
a.append(5) #修改物件a
相關文章
- Java基礎知識點總結Java
- ES 基礎知識點總結
- Redis 基礎知識點總結Redis
- 前端知識點總結——JavaScript基礎前端JavaScript
- Flutter 知識點總結-基礎篇Flutter
- java基礎語法知識小結(1)Java
- python基礎必學的語法知識Python
- Java基礎面試知識點總結Java面試
- 、【C語言基礎】 第十天 | 知識點總結C語言
- Java個人知識點總結(基礎篇)Java
- Java基礎知識總結Java
- React 基礎知識總結React
- SpringIOC基礎知識總結Spring
- Rust 基礎知識總結Rust
- 索引基礎知識總結索引
- 【python----發軔之始】【基礎知識總結】Python
- Python基礎知識點梳理Python
- Linux基礎知識和基本操作語句總結Linux
- Python基礎入門知識點——if 語句簡介Python
- 後端知識點總結——NODE.JS基礎後端Node.js
- JS基礎知識深入總結JS
- TCP/IP 基礎知識總結TCP
- JS基礎知識總結(1)JS
- CSS基礎知識總結(4)CSS
- JS基礎知識總結(2)JS
- Java基礎知識總結-1Java
- Go語言基礎語法總結Go
- yii2 基礎知識總結
- 演算法基礎知識總結演算法
- Java基礎對反射知識總結Java反射
- Kotlin知識歸納(一) —— 基礎語法Kotlin
- 零基礎學習Java,全方位知識點總結!Java
- 【Python基礎知識】Python中的while語句PythonWhile
- 知識點總結
- [鞏固基礎]總結Python基礎知識的14張思維導圖Python
- Python教程分享之Python基礎知識點梳理Python
- 正規表示式基礎知識總結
- python基礎知識Python