主頁 > 後端開發 > 常用模塊

常用模塊

2020-10-01 12:12:53 後端開發

常用模塊

 

什么是模塊 

在計算機程式的開發程序中,隨著程式代碼越寫越多,在一個檔案里代碼會越來越長,越來越不容易維護,

為了撰寫可維護的代碼,我們把很多的函式分組,分別放到不同的檔案里,這樣每個檔案包含的代碼就相對較少了,很多編程語言都采用了這種組織代碼的方式,在Python中,一個.py檔案就可以稱之為一個模塊 module

 

模塊分為三種:

內置標準模塊(又稱標準庫),執行help(‘modules‘) 查看所有Python自帶模塊串列

第三方開源模塊,可通過pip install 模塊名    聯網安裝

自定義模塊,自己寫的模塊

 

模塊 匯入&呼叫 

Import module  # 匯入

 

import os ,sys

print(os.path)
from os import path     #直接匯入path模塊,直接使用path,無需os.path
print(path)

 


from asyncio.events import get_event_loop as get_events     #as想當于重命名
print(get_events())
模塊匯入

 

 

自定義模塊

Module_custom.py

 

name = 'alex'
print('hello',name)

def sayhi(n):
    print('hi',n)

Module_importcustom.py

import Modules.Module_custom as name


name.sayhi('jack')
DIY模塊

安裝第三方模塊

開源的Python鏡像網站  

pypi.org

pypi.douban.com/simple     豆瓣的使用方法 pip install -i http://pypi.douban.com/simple/ paramiko

 

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.3.10.241',22,'deepin','deepin1')

stdin,stdout,stderr = ssh.exec_command('ip add')
print(stdout.read().decode('utf-8'))
ssh.close()
paramiko

 

 

Sys、os模塊的使用

# -*- coding:utf-8 -*-
import os
print(__file__)   # 列印一個當前腳本的路徑
print(os.getcwd())    # 獲取當前腳本的目錄pwd
print(os.listdir("/tmp"))   #、獲取/tmp目錄下的檔案

os.path.isfile('/tmp/abc')  # 判斷/tmp/abc 是否是一個檔案
os.path.isdir('/tmp')  # 判斷/tmp 是否是一個目錄

os.path.isabs('~/ccn')         #判斷一個檔案是不是絕對路徑
os.path.split("/tmp/abc")  # 提取出目錄名,檔案名  分開顯示
os.path.dirname("/tmp/abc")  # 只獲取目錄名 ,不獲取檔案名

os.path.abspath("~/ccn")    #獲取絕對路徑

os.stat("/tmp")   # 獲取/tmp檔案屬性  相當于 linux下的stat
os.chmod('/tmp')   #修改/tmp權限  相當于linux下chmod功能一樣

os.kill(123,9)     #殺死相關行程 前邊是行程號 后邊是kill的信號 相當于linux下的kill -9
OS模塊的常用方法
import sys
sys.argv   # 命令列引數list ,第一個元素是程式本身路徑
sys.exit(0)   # 退出程式 ,正常退出時exit(0)
sys.version  # 獲取Python解釋程式的版本資訊
sys.maxint   # 最大的int值
sys.path      #回傳模塊Module的搜索路徑
sys.platform  #回傳作業系統平臺的名稱

sys.getrecursionlimit()   # 獲取最大遞回層數  default 100
sys.setrecursionlimit(1500)     #設定最大遞回層數 1500

sys.getdefaultencoding()   #獲取解釋器 使用的默認編碼 utf8
sys.getfilesystemencoding()  # 獲取資料存盤到檔案里的默認編碼  utf8
sys模塊常用方法

 

時間模塊

時間處理歸為三種:

時間的顯示 , 在螢屏顯示、記錄日志等

時間的轉換 , 比如把字串格式的日期轉換成Python中的日期型別

時間的運算,計算兩個日期間的差值等

 

time模塊

1.時間戳 ,表示的1970年1月1日0.0.0分

2.格式化的時間字串,比如’2020-10.03 10:00’

3.元祖共九個元素,由于Python的time模塊實作主要呼叫的c庫,平臺上不一樣

UTF 時間

UTF世界標準時間, 中國為UTF+8,又稱東8區

 

time模塊的方法(以上都可以傳時間秒數的引數,如果不傳默認使用的是系統的時間戳)

Time.localtime()  # 將秒數轉化成 年的方法-  正常顯示的時間

Time.getime()    # 將時間轉換成世界時間

Time.mktime()    # 將時間時間轉化成時間戳(秒數)

Time.sleep()    # 延時五分鐘

time.asctime()  #把一個表示時間的元祖或者世界時間表示為這種形式:Fri Mar 27 22:46:17 2020

Time.ctime()    #把一個時間戳轉換成time.asctime()的形式

Time.strftime()  #  將時間轉換成你想要的字串格式  print(time.strftime("%Y-%m-%d",time.localtime()))

Time.strptime()      #將字串格式轉換成日期print(time.strptime("2020.1.2 10:10","%Y.%m.%d %H:%M"))

 

Datetime 模塊

Datetime模塊定義了下面的這幾類:

Datetime.data 表示日期的一個類

datetime.date.today()

datetime.date(2020, 3, 27)

datetime.date.fromtimestamp(1222222222)      #將時間戳轉換成時間

datetime.date(2008, 9, 24)

 

Datetime.time  表示時間的類

 

Datetime.datetime 表示日期時間的型別

 

datetime.datetime.now()

datetime.datetime(2020, 3, 27, 23, 5, 37, 909430)

datetime.datetime.fromtimestamp(123455)

datetime.datetime(1970, 1, 2, 18, 17, 35)

 

t1 = datetime.datetime.now()

t1 - datetime.timedelta(days=3)

datetime.datetime(2020, 3, 24, 23, 8, 55, 386942)

 

datetime.datetime.now().replace(year=20,month=10,day=5,minute=1,hour=1)

datetime.datetime(20, 10, 5, 1, 1, 31, 412669)

 

Pytz模塊

Pytz.alltimezones  查看所有時區

Datetime.datetime.now(tz = pytz.timezone(“Africa/Abidjan”))

 

Random亂數模塊

# -*- coding:utf-8 -*-

import random

import string

print(random.randrange(1,10))    # 回傳1-10之間的一個亂數,不包括10
print(random.randint(1,10))   # 回傳1-10之間的一個亂數,包括10

print(random.random())    # 回傳一個隨機浮點數,小數
print(random.choice('qwrrqtyeywy'))   #回傳給定字串中的隨機一個字符

print(random.sample('3143445sfwrqrt',4))  #回傳給定字串中,4個隨機字符,以串列形式顯示


print("".join(random.sample(string.digits+string.ascii_lowercase+string.ascii_uppercase,4)))   # 生成隨機4位驗證碼

a = list(string.digits+string.ascii_lowercase+string.ascii_uppercase)    #洗牌將數字\大小寫英文 使用shuffle打亂順序
random.shuffle(a)
print(a)
Random 模塊

 

序列化pickle & json模塊

Pickle          ----pickle 可以多次dump 多次load  但建議只一次

# -*- coding:utf-8 -*-

import pickle

d = {
    "name":"alex",
    "role":"police",
    "blood":"76",
    "weapon":"AK47"
}
arrive_players = ["alex","jack","rain" ]


# d_dump = pickle.dumps(d)  # dumps叫做序列化,將不同的資料型別,轉換成bytes格式,存入硬碟
# print(d_dump)
#
# print(pickle.loads(d_dump)) #loads叫做反序列化,將bytes位元組型別轉換成相應的資料型別
#

f = open("game.pkl","wb")   #存入的是16進制數,所以用wb格式
pickle.dump(d,f)     # pickle.dump 方法直接可以序列化的存入檔案內

pickle.dump(arrive_players,f)

f = open("game.pkl","rb")    # 因為存入的是進制數,所以取也要用rb模式取
print(pickle.load(f))       # pickle.load將序列化的資料讀取出來,序列化了幾次就要取幾次
print(pickle.load(f))

# dump是寫入檔案,dumps是在記憶體中生成序列化的字串
# load從檔案加載,反序列化, loads把序列化的字串反向決議  建議只dump一次,否則程式多會亂

 

Json    ------json 一個檔案只能一次dump ,一次load

import json

d = {
    "name":"alex",
    "role":"police",
    "blood":"76",
    "weapon":"AK47"
}
arrive_players = ["alex","jack","rain" ]

#print(json.dumps(d))
f = open("game.json",'w')
json.dump(d,f)
#json.dump(arrive_players,f)


f = open("game.json",'r')
print(json.load(f))

 

Pickle 和 json的區別

Pickle只支持python,支持所有的資料型別  時間都可以

json 支持所有變成語言 .只支持常規的資料型別str . int .dict.set . list .tuple

 

Hashlib加密模塊

 

Md5功能 

輸入任意長度的資訊,經過處理,輸出為128位的資訊(數字指紋):

不同的輸入得到的不同的結果(唯一性)

Md5演算法的特點

1. 壓縮性:任意長度的資料,算出的md5值的長度都是固定的.

2. 容易計算:從元資料計算出md5值很容易

3. 抗修改性:對源資料進行任何改動,修改一個位元組生成的md5值區別也很大

4. 強抗碰撞: 已知原資料和md5,想找到一個具有相同md5值的資料(即偽造資料)是非常困難的.

Md5演算法是否可逆

Md5不可逆的原因是一種散列函式,使用的hash演算法,在計算程序中原文的部分資訊是丟失了的.

Md5的用途

1. 防止被篡改

2. 防止直接看到明文

3. 防止抵賴(數字簽名)

import hashlib

m = hashlib.md5()
m.update(b"hello alex")
print(m.hexdigest())
m.update("房糾紛解決".encode("utf8"))

#print(m.digest())
print(m.hexdigest())

 

Hashlib -- sha加密演算法

s1 = hashlib.sha1()

s1.update('發發發'.encode("utf-8"))

s1.hexdigest()

'22b90f88377478e852388db42b707488ed8cf3c9'

 

s2 = hashlib.sha3_256()

s2.update("嘻嘻".encode("utf-8"))

s2.hexdigest()

'd3b4813643938fb3cf57b775c947dd638b59f60bcc9258ed400b6e0fbbf5a925'

 

 

檔案copy模塊shutil

import shutil

shutil.copyfileobj(open("game.json"),open("game2.json",'w'))

shutil.copyfile("game.json","game3.json")

shutil.copymode()   #僅copy權限,內容\組\用戶均不變 不會copy內容,目標檔案必須存在

shutil.copystat()   #僅copy狀態的資訊 mtime ctime atime,不會copy內容,目標檔案必須存在

shutil.copy()     #copy權限和內容

shutil.copy2()    # copy權限和狀態的資訊  

shutil.copytree()    #copy整個目錄

shutil.copytree("../Modules","Modules_cpoy",ignore=shutil.ignore_patterns("*.py","*.pkl"))  # ignore排除相應檔案進行copy

shutil.rmtree()   # 洗掉檔案

shutil.move()    #移動檔案



shutil.make_archive(base_name="/tmp/code.bak",format="zip",root_dir="../Modules",owner="root")       #創建壓縮包

 

 

Zipfile 壓縮模塊

import zipfile
import os
z = zipfile.ZipFile("/tmp/test_copy.zip","w")  #壓縮
filelist = []

for root_dir,dirs,files in os.walk("../Modules"):  #.代表當前目錄
    for name in files:
        filelist.append(os.path.join(root_dir,name))
for i in filelist:
    print(i)
    z.write(i)
z.close()


z = zipfile.ZipFile("/tmp/test_copy.zip",'r')   #解壓
z.extractall(path="/root")
z.close()

 

牛逼的Re正則模塊

Re.match   從頭開始匹配

Re.findall   匹配所有值  匹配出所有的值以串列回傳

Re.search   包含匹配 匹配出來第一個就回傳

Re.split  以匹配到的字符當做串列分隔符 re.split("[0-9]","alex3jack4rain5mack") ['alex', 'jack', 'rain', 'mack']

Re.sub  匹配字符并替換 re.sub("abc","ABc","abcabcerrr")   'ABcABcerrr'

re.sub("abc","ABc","abcabcerrr",count=1)  'ABcabcerrr'

Re.fullmatch j精確匹配

re.fullmatch("abc","abc")  相當于re.search("^abc$",”abc”)

 

'.'  匹配任意除\n之外的任意字符

'^' 匹配開頭

$' 匹配結尾

'*'  匹配前一個字符0次或多次

'+' 匹配前一個字符1次或多次

'?' 匹配前一個字符0次或1次

'{m}' 匹配前一個字符m次

'{n,m}' 匹配前一個字符n次到m次

'{|}'  匹配或

'{}'分組匹配 re.search(“(abc){1}a(123|45)”,”abcabca12345”)

\A'只從字符開頭匹配

\Z' 相當于$ 匹配字符結尾 re.search("\Aabc\Z","abc")  只能是abc

[]      re.search("[a-zA-z0-9]{11}","131414fsq3144f")

\d'  匹配數字0-9  re.search("\d+","d3425")  +一次或多次 ?一次或0次 0一次或多次

\D'  匹配非數字   re.findall("\D+","1324fs1sadf31fds")

\w'  re.search("\w+","123qrt135")   匹配[a-zA-z0-9]

\W'  匹配非[a-zA-z0-9] 

\s'匹配 空白字符 \t \n \r

 

a= re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birt>[0-9]{4})",id_num)

a.group()

'1504301998'

a.groups()

('150', '430', '1998')

a.groupdict() re.split("[0-9]","alex3jack4rain5mack")

['alex', 'jack', 'rain', 'mack']

{'province': '150', 'city': '430', 'birt': '1998'}

 

Re.compile  制定匹配規則 ,直接拿來用.適合非常大的資料量,匹配規則還是一樣的

p = re.compile("\w{11}")

p.search("1234567892134658")

<re.Match object; span=(0, 11), match='12345678921'>

 

Flags 標志符

re.search("elf","alexrwfElf",re.I)   re.I忽略大小寫

re.search("^alex","\nalexjackrain",re.M)

<re.Match object; span=(1, 5), match='alex'>   re.M多行模式 search只搜索第一行

re.search(".","\n",re.S)       re.S 可以匹配\n

 

 

軟體專案的目錄設計規范

目的:

1. 可讀性高 

2. 可維護性高

Bin/ 存放專案的一些可執行檔案 腳本之類的

Docs/存放,使用的檔案

Conf/ 存放組態檔

Setup.py  安裝 部署 打包的腳本

Requirements.txt 存放軟體依賴的外部python包串列 自動生成這個檔案 pip freeze > requirements.txt   使用這個檔案 pip install -r requirements.txt

README  專案說明檔案

Bin/ 存放專案的一些可執行檔案 腳本之類的

Test/  存放目錄的源代碼

Docs/存放,使用的檔案

Conf/ 存放組態檔

Setup.py  安裝 部署 打包的腳本

Requirements.txt 存放軟體依賴的外部python包串列 自動生成這個檔案 pip freeze > requirements.txt   使用這個檔案 pip install -r requirements.txt

README  專案說明檔案

 

包&跨模塊代碼呼叫

>>> import mypackage

------welcome invoke my first package

>>> from mypackage import fir

哈哈

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/145088.html

標籤:Python

上一篇:Python腳本實作郵件報警功能

下一篇:微信機器人之PC微信hook

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more