Python學習三天計劃-2

来源:https://www.cnblogs.com/Gao-yubo/archive/2022/10/22/16815149.html
-Advertisement-
Play Games

項目中有一個查重的需求,就類似論文查重這種的需求,我的組長已經寫好了這個 Demo 了,我也挺感興趣的,所以也看了看是如何實現的,看完後,感慨一聲,噢!原來是這樣實現的啊!。現在呢,就記錄下我從中學到的知識! ...


一、函數

函數:是組織好的,可重覆使用的,用來實現特定功能的代碼段。

優點:

  • 可供重覆利用的代碼段
  • 提高程式的復用性
  • 減少重覆性代碼
  • 提高開發效率

1.定義

def func1():
    print("函數")
    return 1

註意

參數、返回值可以省略

返回值可以有多個(後續說)

2.參數

  • 可以不傳參;可以傳入多個參數:使用逗號分隔開
  • 函數定義中的參數,稱之為形式參數
  • 函數調用中的參數,稱之為實際參數
  • 傳入參數的時候,要和形式參數一一對應,逗號隔開;也可以以key-value形式傳入

3.返回值

返回值可以有多個,也可以返回None

4.說明

def func2():
	print("我是一個函數")
	return 1

使用時,當滑鼠懸浮函數時出現提示

使用時,當滑鼠懸浮函數時出現提示

5.嵌套執行

如果函數A中,調用了另外一個函數B,那麼先把函數B中的任務都執行完畢之後才會回到上次 函數A執行的位置

image-20221021224148607

6.作用域

變數作用域指的是變數的作用範圍

下圖num變數為testA()函數的局部變數

image-20221021224415402

使用 global關鍵字 可以在函數內部聲明變數為全局變數

image-20221021224537000

二、數據容器

Python中的數據容器:

一種可以容納多份數據的數據類型,容納的每一份數據稱之為1個元素

每一個元素,可以是任意類型的數據,如字元串、數字、布爾等。

分為5類,分別是:

列表(list)、元組(tuple)、字元串(str)、集合(set)、字典(dict)

1.列表序列

基本語法

# 定義變數,內部數據類型可以不同;支持嵌套
list = [1,2,3,"gyb"]

# 空列表
list = []
list = list()

下標索引

1.正常順序

image-20221021225449823

name_list = ["郜宇博","123", "456"]
# 使用下標索引取出列表內元素
name1  = name_list[0]
print(name1)

2.反向索引,也就是從後向前:從-1開始,依次遞減(-1、-2、-3......)

image-20221021225624962

3.嵌套列表(二維)

image-20221021225659156

# 2維嵌套列表
my_list = [[1,2,3],[4,5,6]]
# 獲取其中的一個元素
num = my_list[0][0]

常用方法

編號 使用方式 作用
1 列表.append(元素) 向列表中追加一個元素
2 列表.extend(容器) 將數據容器的內容依次取出,追加到列表尾部
3 列表.insert(下標, 元素) 在指定下標處,插入指定的元素
4 del 列表[下標] 刪除列表指定下標元素
5 列表.pop(下標) 刪除列表指定下標元素
6 列表.remove(元素) 從前向後,刪除此元素第一個匹配項
7 列表.clear() 清空列表
8 列表.count(元素) 統計此元素在列表中出現的次數
9 列表.index(元素) 查找指定元素在列表的下標 找不到報錯ValueError
10 len(列表) 統計容器內有多少元素
# 舉例
# 插入元素:
# 		語法:列表.insert(下標, 元素),在指定的下標位置,插入指定的元素
my_list = [1, 2, 3]
# 在第1個索引位,插入0元素
my_list.insert(1,0)
print(my_list)

image-20221021230101659

特點

  • 可以容納多個元素(上限為2**63-1個)
  • 可以容納不同類型的元素(混裝)
  • 數據是有序存儲的(有下標序號)
  • 允許重覆數據存在
  • 可以修改(增加或刪除元素等)

2.元組序列

列表是可以修改的。

元組一旦定義完成,就不可修改

基本語法

# 定義元組使用小括弧
my_tuple = (1, 2, 3, 4)

# 不同元素類型
my_tuple = (1, "gy")
# 嵌套
my_tuple = ((1,2,3),(4,5,6))

索引方式與列表相同

常用方法

因為不能修改,所以操作少

編號 方法 作用
1 index() 查找某個數據,如果數據存在返回對應的下標,否則報錯
2 count() 統計某個數據在當前元組出現的次數
3 len(元組) 統計元組內的元素個數

註意

不可以修改元組的內容,但是可以修改元組內列表中的元素,如下

# 可以修改列表中元素
my_t = (1, 2, ["gg","cc"])
# 修改
my_t[2][1] = "aa"
print(my_t)

image-20221021230855170

3.字元串序列

同元組一樣,字元串是一個:無法修改的數據容器。不可變

因此當修改字元串中字元時,會獲得一個新字元串

常用方法

編號 操作 說明
1 字元串[下標] 根據下標索引取出特定位置字元
2 字元串.index(字元串) 查找給定字元的第一個匹配項的下標
3 字元串.replace(字元串1, 字元串2) 將字元串內的全部字元串1,替換為字元串2 不會修改原字元串,而是得到一個新的
4 字元串.split(字元串) 按照給定字元串,對字元串進行分隔 不會修改原字元串,而是得到一個新的列表
5 字元串.strip() 字元串.strip(字元串) 移除首尾的空格和換行符或指定字元串
6 字元串.count(字元串) 統計字元串內某字元串的出現次數
7 len(字元串) 統計字元串的字元個數

4.序列的切片

序列是指:內容連續、有序,可使用下標索引的一類數據容器

序列支持切片

切片:從一個序列中,取出一個子序列

語法:序列[起始下標:結束下標:步長] -----》 左閉右開區間

  • 起始下標表示從何處開始,可以留空,留空視作從頭開始
  • 結束下標(不含)表示何處結束,可以留空,留空視作截取到結尾
  • 步長表示,依次取元素的間隔
my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4]	# 下標1開始,下標4(不含)結束,步長1
print(new_list)			# 結果:[2, 3, 4]

my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:]	# 從頭開始,到最後結束,步長1
print(new_tuple)		# 結果:(1, 2, 3, 4, 5)

my_list = [1, 2, 3, 4, 5]
new_list = my_list[::2]		# 從頭開始,到最後結束,步長2
print(new_list)				# 結果:[1, 3, 5]

my_str = "12345"
new_str = my_str[::-1]	# 從頭(最後)開始,到尾結束,步長-1(倒序)
print(new_str) 			# 結果:"54321"

5.set集合

列表和元組都支持重覆元素,因此需要不支持的容器---》set

最主要的特點就是:不支持元素的重覆(自帶去重功能)、並且內容無序

定義語法

# 定義
nums = {1,2,3,5,5,2}
print(nums)

image-20221021232053701

常用方法

編號 操作 說明
1 集合.add(元素) 集合內添加一個元素
2 集合.remove(元素) 移除集合內指定的元素
3 集合.pop() 從集合中隨機取出一個元素
4 集合.clear() 將集合清空
5 集合1.difference(集合2) 得到一個新集合,內含2個集合的差集 原有的2個集合內容不變
6 集合1.difference_update(集合2) 在集合1中,刪除集合2中存在的元素 集合1被修改,集合2不變
7 集合1.union(集合2) 得到1個新集合,內含2個集合的全部元素 原有的2個集合內容不變
8 len(集合) 得到一個整數,記錄了集合的元素數量

6.字典集合

類似於Java的map集合

以鍵值對的形式存儲數據:key:value

image-20221021232316755

基本定義

# 定義,支持嵌套
my_dictionary = {"name1":10,"name2":20,"name3":30}
print(my_dictionary)

# 字典值的獲取,通過key獲取
print(my_dictionary["name1"])

image-20221021232858283

常用方法

編號 操作 說明
1 字典[Key] 獲取指定Key對應的Value值
2 字典[Key] = Value 添加或更新鍵值對
3 字典.pop(Key) 取出Key對應的Value併在字典內刪除此Key的鍵值對
4 字典.clear() 清空字典
5 字典.keys() 獲取字典的全部Key,可用於for迴圈遍歷字典
6 len(字典) 計算字典內的元素數量

7.容器的通用操作

功能 描述
通用for迴圈 遍歷容器(字典是遍歷key)
max() 容器內最大元素
min() 容器內最小元素
len() 容器元素個數
list() 轉換為列表
tuple() 轉換為元組
str() 轉換為字元串
set() 轉換為集合
sorted(序列, [reverse=True]) 排序,reverse=True表示降序 得到一個排好序的列表

三、函數進階

1.返回值

如果一個函數要有多個返回值,該如何書寫,如下

def func1():
    return 1,2
x, y = func1()
# 使用x,y接受返回值
print(x)
print(y)

image-20221021233300757

2.參數

位置參數

x與1對應,y與2對應,根據位置對應

image-20221021233515514

關鍵字參數

在實參傳入時,將形參的關鍵字填寫

註意:

​ 函數調用時,如果有位置參數時,位置參數必須在關鍵字參數的前面,但關鍵字參數之間不存在先後順序

def func2(name, age):
    print(f"name={name},age={age}")

func2(name="gyb",age=21)

image-20221021233722609

預設參數

預設參數也叫預設參數,用於定義函數,為參數提供預設值,調用函數時可不傳該預設參數的值

(註意:所有位置參數必須出現在預設參數前,包括函數定義和調用)

def func2(name, age=19):
    print(f"name={name},age={age}")

func2(name="gyb")

image-20221021233940316

不定長參數

不定長參數也叫可變參數. 用於不確定調用的時候會傳遞多少個參數(不傳參也可以)的場景.

# 定義  *args放入形參中 代表 不定長參數
def func2(*args):
    print(args)

func2("gyb",2)

image-20221021234118599

此時將多個參數加入到了 元組序列 中,轉為元組了(相當於*arg就是元組類型的形參)

# 定義  **args放入形參中 代表 不定長參數為字典集合
def func2(**args):
    print(args)

func2(name="gyb",age=11,g="m")

image-20221021234412772

此時將多個參數傳入轉為字典集合了(相當於**arg就是字典類型的形參)

函數作為參數

這是一種,計算邏輯的傳遞,而非數據的傳遞。

image-20221021234633060

匿名函數

函數的定義中

  • def關鍵字,可以定義帶有名稱的函數
  • lambda關鍵字,可以定義匿名函數(無名稱)
def func(compute):
    return compute(1,2)

#在調用func時,傳入的實參為;lambda x, y: x + y         ------》代表一個匿名函數
print(func(lambda x, y: x + y))

四、文件操作

0.基本介紹

語法

open(name, mode, encoding)

  • name:是要打開的目標文件名的字元串(可以包含文件所在的具體路徑)。
  • mode:設置打開文件的模式(訪問模式):只讀、寫入、追加等。
  • encoding:編碼格式(推薦使用UTF-8)

mode常用的三種基礎訪問模式

模式 描述
r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是預設模式。
w 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,原有內容會被刪除。 如果該文件不存在,創建新文件。
a 打開一個文件用於追加。如果該文件已存在,新的內容將會被寫入到已有內容之後。 如果該文件不存在,創建新文件進行寫入。

1.文件的讀取

# 打開文件(f為文件對象,後續學)
f = open('python.txt', 'r', encoding=”UTF-8)
content = f.readline()
print(f'第一行:{content}')

# 用完後關閉
f.close()

方法操作

操作 功能
文件對象 = open(file, mode, encoding) 打開文件獲得文件對象
文件對象.read(num) 讀取指定長度位元組 不指定num讀取文件全部
文件對象.readline() 讀取一行
文件對象.readlines() 讀取全部行,得到列表
for line in 文件對象 for迴圈文件行,一次迴圈得到一行數據
文件對象.close() 關閉文件對象
with open() as f 通過with open語法打開文件,可以自動關閉

2.文件的寫入

# 1. 打開文件
f = open('python.txt', 'w')

# 2.文件寫入
f.write('hello world')

# 3. 內容刷新
f.flush()

註意:

直接調用write,內容並未真正寫入文件,而是會積攢在程式的記憶體中,稱之為緩衝區

當調用flush的時候,內容會真正寫入文件

這樣做是避免頻繁的操作硬碟,導致效率下降(攢一堆,一次性寫磁碟)

文件如果不存在,使用”w”模式,會創建新文件

文件如果存在,使用”w”模式,會將原有內容清空

3.文件的追加

# 1. 打開文件,通過a模式打開即可
f = open('python.txt', 'a')

# 2.文件寫入
f.write('hello world')

# 3. 內容刷新
f.flush()

註意:

a模式,文件不存在會創建文件

a模式,文件存在會在最後,追加寫入文件

五、異常

當檢測到一個錯誤時,Python解釋器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的“異常”, 也就是我們常說的BUG

1.捕獲

捕獲異常的作用在於:提前假設某處會出現異常,做好提前準備,當真的出現異常的時候,可以有後續手段。

"""
try:
    可能發生錯誤的代碼
except:
    如果出現異常執行的代碼
"""

# 需求:嘗試以`r`模式打開文件,如果文件不存在,則以`w`方式打開。
try:
    f = open('linux.txt', 'r')
except:
    f = open('linux.txt', 'w')
# 需求:未定義捕獲
try:
    print(name)
except NameError as e:
    print('name變數名稱未定義錯誤')

註意:

① 如果嘗試執行的代碼的異常類型和要捕獲的異常類型不一致,則無法捕獲異常。

② 一般try下方只放一行嘗試執行的代碼。

捕獲多個異常

try:
    print(1/0)
except (NameError, ZeroDivisionError):
    print('ZeroDivision錯誤...')

image-20221021235927752

捕獲並輸出

try:
    print(num)
except (NameError, ZeroDivisionError) as e:
    print(e)

image-20221021235915035

捕獲所有異常

try:
    print(name)
except Exception as e:
    print(e)

2.異常else

else表示的是如果沒有異常要執行的代碼

try:
    print(1)
except Exception as e:
    print(e)
else:
    print('我是else,是沒有異常的時候執行的代碼')

image-20221022000110893

3.異常的finally

finally表示的是無論是否異常都要執行的代碼,例如關閉文件

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('沒有異常,真開心')
finally:
    f.close()

4.傳遞性

當函數func01中發生異常, 並且沒有捕獲處理這個異常的時候, 異常

會傳遞到函數func02, 當func02也沒有捕獲處理這個異常的時候

main函數會捕獲這個異常, 這就是異常的傳遞性

註意:

當所有函數都沒有捕獲異常的時候, 程式就會報錯

image-20221022000205581

六、模塊

Python 模塊(Module),是一個 Python 文件,以 .py 結尾. 模塊能定義函數,類和變數,模塊里也能包含可執行的代碼.

作用:python中有很多各種不同的模塊, 每一個模塊都可以幫助我們快速的實現一些功能,

1.導入

模塊在使用前需要先導入,導入的語法如下:

image-20221022000336570

常用的組合形式如:

  • import 模塊名
  • from 模塊名 import 類、變數、方法等
  • from 模塊名 import *
  • import 模塊名 as 別名
  • from 模塊名 import 功能名 as 別名
"""
import 模塊名
import 模塊名1,模塊名2

模塊名.功能名()
"""
# 1.import模塊名
# 導入時間模塊
import time
print("開始")
# 讓程式睡眠1秒(阻塞)
time.sleep(1)
print("結束")

# 2.from 模塊名 import 功能名
# 導入時間模塊中的sleep方法
from time import sleep
print("開始")
# 讓程式睡眠1秒(阻塞)
sleep(1)
print("結束")

2.自定義模塊

新建一個Python文件,別的模塊就可以導入了

image-20221022000703860 image-20221022000707538

註意

在my_module1.py文件中添加測試代碼test(1,1),那麼在別的模塊導入時,會自動執行test方法

def test(a, b):
    print(a + b)


test(1, 1)

如果想不執行test方法,則需要在被導入的模塊中加入if name == 'main': 這句話的意思是只有從本程式執行(右鍵執行、右上角執行)時才調用

def test(a, b):
    print(a + b)

# 只在當前文件中調用該函數,其他導入的文件內不符合該條件,則不執行test函數調用
if __name__ == '__main__':
    test (1, 1)

當導入多個模塊的時候,且模塊內有同名功能. 當調用這個同名功能的時候,調用到的是後面導入的模塊的功能

如果一個模塊文件中有__all__變數,當使用from xxx import *導入時,只能導入這個列表中的元素

image-20221022000940017 image-20221022000943694

七、包

如果Python的模塊太多了,就可能造成一定的混亂,那麼使用包管理

  • 從物理上看,包就是一個文件夾,在該文件夾下包含了一個 init.py 文件,該文件夾可用於包含多個模塊文件
  • 從邏輯上看,包的本質依然是模塊

創建包:右鍵新建軟體包;或者創建目錄,加入__init__.py

image-20221022001053138

1.導入包

"""
方式一:
import 包名.模塊名
調用:包名.模塊名.目標

方式二:
from 包名 import 模塊名
調用:模塊名.目標
"""

2.安裝第三方包

一、Pip方式

只需要使用Python內置的pip程式即可

image-20221022001359452

**pip****的網路優化

我們可以通過如下命令,讓其連接國內的網站進行包的安裝:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名稱

image-20221022001420523

https://pypi.tuna.tsinghua.edu.cn/simple 是清華大學提供的一個網站,可供pip程式下載第三方包

二、PyCharm方式

PyCharm也提供了安裝第三方包的功能

image-20221022001450548

image-20221022001544576

image-20221022001554170


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先要知道JavaScript是使用垃圾回收的語言,它會每隔一段時間就會釋放記憶體進行閑置資源回收。像函數中的局部變數,函數執行時在內部使用了變數,棧記憶體會分配空間以保存相應的值。在函數使用結束後,這個局部變數就不需要了,占用的記憶體就會被釋放。 那我們若是想要使這個變數不被清理,一直處於被使用中,那就 ...
  • 題目描述:判斷字元串中重覆次數最多的字元 // 解決思路: // 1.判斷字元重覆的方法 // 創建空數組,利用鍵值對形式對每個字元進行計數 // 用到 採用for迴圈結合if判斷 對象[鍵] 是否有值,無則undefined // arr.charAt(i)取得arr中i索引號下的元素 // 2. ...
  • 安裝nvm、node、npm 下載nvm安裝包,推薦使用1.1.7,我個人使用1.1.8會有中文亂碼的報錯 點擊exe文件,註意修改nvm的安裝根目錄以及node的安裝根目錄,後者是以後管理多版本node的源文件儲存地址 打開系統cmd,依次輸入一下目錄 nvm -version 檢查nvm是否安裝 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 網頁實現列印 可以選擇性的列印某一部分 的vue組件 1.引入 把print.js 下載到本地,然後放在src 下麵添加文件夾里. print.js // 列印類屬性、方法定義 /* eslint-disable */ const Pri ...
  • 1 v-model 1.1 理解 v-model v-model 是 vue3 中的一個內置指令,很多表單元素都可以使用這個屬性,如 input、checkbox 等,咱可以在自定義組件中實現 v-model。v-model 本質上是一個語法糖: 綁定父組件傳遞過來的 modelValue 屬性; ...
  • 一、所需的地形文件和模型以及 CesiumJs 包 操作之前,我們需要兩份對應的文件,一份是地形文件(可無),一份是對應的模型文件,本次展示的模型是轉換成了 3Dtiles 類型的。 如果我們只做基礎的模型展示,只需要引入一個 js 和 一個 css 文件即可 <script src="js/Ces ...
  • 每日演算法 今日是: 1、將字元串轉換為駝峰格式 2、判斷字元串中是否有連續重覆的字元 將字元串轉換成駝峰格式 // css 中經常有類似 background-image 這種通過 - 連接的字元,通過 javascript 設置樣式的時候需要將這種樣式轉換成 backgroundImage 駝峰格 ...
  • 命令模式是一種數據驅動的設計模式,它屬於行為型設計模式。通過使用命令模式,可以極大地降低系統的耦合度。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...