Python中的閉包裝飾器和深淺拷貝案例演示
1.閉包
說起閉包之前,我們需要了解為什么會(huì)有閉包?
問題1:為什么在全局作用域中無法訪問局部變量
答:主要原因在于,在Python的底層存在一個(gè)“垃圾回收機(jī)制”,主要的作用就是回收內(nèi)存空間。加快計(jì)算機(jī)的運(yùn)行。我們?cè)赑ython代碼中定義的變量也是需要占用內(nèi)存的,所以Python為了回收已經(jīng)被已經(jīng)過的內(nèi)存,會(huì)自動(dòng)將函數(shù)運(yùn)行以后的內(nèi)部變量和程序直接回收。
問題2:有沒有辦法把函數(shù)內(nèi)部的局部變量保留
答:使用閉包,閉包可以保存函數(shù)內(nèi)的變量,而不會(huì)隨著調(diào)用完函數(shù)而被銷毀
在函數(shù)嵌套的前提下,內(nèi)部函數(shù)使用了外部函數(shù)的變量,并且外部函數(shù)返回了內(nèi)部函數(shù),我們把這個(gè)使用外部函數(shù)變量的內(nèi)部函數(shù)稱為閉包。
閉包三大條件:
1.有嵌套:外部函數(shù)內(nèi)嵌內(nèi)部函數(shù)
2.有引用:內(nèi)部函數(shù)引用外部函數(shù)變量
3.有返回值:外部函數(shù)返回內(nèi)部函數(shù)名(return)
注意點(diǎn):
由于閉包引用了外部函數(shù)的變量,則外部函數(shù)的變量沒有及時(shí)釋放,消耗內(nèi)存。
"""
閉包:
概述:
使用了外部函數(shù)變量的內(nèi)部函數(shù),稱之為閉包。
回顧:局部變量的生命周期?
局部變量隨著函數(shù)的調(diào)用而存在,隨著函數(shù)的調(diào)用完畢而銷毀,即:函數(shù)執(zhí)行結(jié)束后,變量就被釋放了。
格式:
def 外部函數(shù)名(形參列表):
可以在這里定義 外部函數(shù)的 局部變量
def 內(nèi)部函數(shù)名(形參列表):
在這里使用 外部函數(shù)的變量
return 內(nèi)部函數(shù)名
閉包的三個(gè)前提條件:
1:有嵌套,即:有外部函數(shù),有內(nèi)部函數(shù)。
2:有引用,即:在內(nèi)部函數(shù)中,有使用外部函數(shù)的引用。
3:有返回,即:在外部函數(shù)中,返回內(nèi)部函數(shù)(對(duì)象)
"""
# 需求1:回顧局部變量的作用域。
def method():
number = 10
return number
# 需求2:演示閉包,定義用于求和的閉包函數(shù),外部函數(shù)有參數(shù)num1,內(nèi)部函數(shù)有參數(shù)num2,內(nèi)部函數(shù)返回num1+num2
def outer(num1): # 定義了外部函數(shù)outer
def inner(num2): # 定義了內(nèi)部函數(shù)inner
sum = num1+num2 # 使用了外部函數(shù)的變量num1
print(f"求和的結(jié)果是:{sum}")
return inner # 外部函數(shù)返回內(nèi)部函數(shù)對(duì)象
if __name__ == '__main__':
# 目前:函數(shù)每次調(diào)用都會(huì)生成一個(gè)新的number變量,函數(shù)調(diào)用結(jié)束后,number變量就會(huì)銷毀。
print(method()) # 10
print(method()+1) # 11
print(method()+1) # 11
print(method()+1) # 11
print(20* "-")
"""
fn = outer(10) # fn是外部函數(shù)outer的返回值,即內(nèi)部函數(shù)inner
fn = def inner(num2): # 定義了內(nèi)部函數(shù)inner
sum = 10 + num2 # 使用了外部函數(shù)的變量num1
print(f"求和的結(jié)果是:{sum}")
"""
fn = outer(10) # fn是外部函數(shù)outer的返回值,即內(nèi)部函數(shù)inner
"""
此時(shí) fn = outer(10)
= def outer(10)
def inner(num2):
sum = 10 + num2
print(f"求和的結(jié)果是:{sum}")
"""
"""
fn(1)
inner(1): # 定義了內(nèi)部函數(shù)inner
sum = 10 + 1 # 使用了外部函數(shù)的變量num1
print(f"求和的結(jié)果是:{sum}")
"""
fn(1)
"""
fn(2)
inner(2): # 定義了內(nèi)部函數(shù)inner
sum = 10 + 2 # 使用了外部函數(shù)的變量num1
print(f"求和的結(jié)果是:{sum}")
"""
fn(2)1.1nonlocal
global: 聲明全局變量
nonlocal: 聲明能夠讓內(nèi)部函數(shù)去修改外部函數(shù)的變量
"""
nonlocal關(guān)鍵字的介紹:
概述:
是一個(gè)關(guān)鍵字,可以實(shí)現(xiàn)讓內(nèi)部函數(shù)去修改外部函數(shù)的變量值。
回顧:
global 聲明變量 ->為全局變量
nonlocal 聲明變量 ->可以被內(nèi)部函數(shù)修改
"""
# 需求:編寫一個(gè)閉包,讓內(nèi)部函數(shù)去訪問外部函數(shù)的變量,并修改她的值,觀察結(jié)果
# 1:定義閉包代碼,讓內(nèi)部函數(shù)去修改外部函數(shù)的變量值
def fn_outer(): # 聲明外部函數(shù)
x = 100
def fn_inner(): # 聲明內(nèi)部函數(shù)
# 核心,內(nèi)部函數(shù)想修改外部函數(shù)的變量值,該變量值需要用到nonlocal關(guān)鍵字修飾
nonlocal x
x = x + 20 # 在內(nèi)部函數(shù)中,去修改外部函數(shù)的變量值
print(f"x的值為:{x}")
return fn_inner
if __name__ == '__main__':
fn = fn_outer()
fn()
fn()
fn()2.裝飾器
概述:裝飾器的作用就是在不改變?cè)泻瘮?shù)的基礎(chǔ)上,給函數(shù)增加額外功能,裝飾器本質(zhì)上就是一個(gè)閉包函數(shù)
裝飾器構(gòu)成的四個(gè)條件:
①有嵌套:在函數(shù)嵌套(函數(shù)里面再定義函數(shù))的前提下;
②有引用:內(nèi)部函數(shù)使用了外部函數(shù)的變量(還包括外部函數(shù)的參數(shù));
③有返回:外部函數(shù)返回了內(nèi)部函數(shù)名;
④有額外功能:給需要裝飾的原有函數(shù)增加額外功能。
裝飾器語法:
方式1: 傳統(tǒng)方式: 變量名 = 裝飾器名(原有函數(shù)名)
變量名()
方式2: 語法糖: @裝飾器名 (這種方式最常見也最常用)
"""
裝飾器的介紹:
概述:
裝飾器=閉包函數(shù),即:裝飾器是閉包函數(shù)的一種寫法。
目的/作用:
在不改變?cè)泻瘮?shù)的基礎(chǔ)上,對(duì)原有函數(shù)的功能做加強(qiáng)。
前提條件:
1:有嵌套
2:有引用
3:有返回
4:有額外功能
裝飾器的用法:
寫法1:傳統(tǒng)寫法
變量名 = 裝飾器名(要被裝飾的原函數(shù)名)
變量名() # 執(zhí)行的就是,裝飾后的原函數(shù)
寫法2:語法糖 語法糖 = 語法格式簡(jiǎn)化版
在定義原函數(shù)的時(shí)候,加上@裝飾器名即可,之后就能正確調(diào)用該原函數(shù)即可
"""
# 需求:發(fā)表評(píng)論前,需要先登錄(模擬的操作)
# 1:定義裝飾器(閉包函數(shù)),用于對(duì)指定函數(shù)功能做增強(qiáng)。
def login(fn_name): #有外部函數(shù)
# 定義內(nèi)部函數(shù),用于對(duì)指定的fn_name函數(shù)功能做增強(qiáng)。
def inner(): #有內(nèi)部函數(shù)
print("登錄中...登錄成功....") #有額外功能
fn_name() #有引用
return inner #有返回
# # 寫法1:傳統(tǒng)寫法
# def comment():
# print("發(fā)表評(píng)論...")
# 寫法2:語法糖
# comment()上面加一個(gè)@check_login修飾符的含義是:將comment函數(shù)名作為check_login函數(shù)的參數(shù)傳遞給check_login函數(shù),并返回check_login函數(shù)的返回值
@login
def comment():
print("發(fā)表評(píng)論...")
if __name__ == '__main__':
# 2:調(diào)用裝飾器,并傳入要被裝飾的函數(shù)名
# 寫法1:傳統(tǒng)寫法
# comment = check_login(comment)
# comment()
# 寫法2:語法糖, 在定義原函數(shù)的時(shí)候,加上@裝飾器名即可,之后就能正確調(diào)用該原函數(shù)即可
comment()
# 輸出結(jié)果為
登錄中...登錄成功....
發(fā)表評(píng)論...2.1裝飾器的使用
函數(shù)分類:
1.無參無返回值的函數(shù)
定義: def 函數(shù)名(): ...
調(diào)用: 函數(shù)名()
# 需求:定義無參無返回值的原函數(shù):get_sum(), 用于計(jì)算兩個(gè)變量的和
def print_info(fn_name):
def inner():
print("【友好提示】正在努力計(jì)算中...")
fn_name()
return inner
@print_info
def get_sum():
a = 10
b = 20
sum = a +b
print("兩個(gè)變量的和為:%d" % sum)
if __name__ == '__main__':
get_sum()
# 輸出結(jié)果
【友好提示】正在努力計(jì)算中...
兩個(gè)變量的和為:302有參無返回值的函數(shù)
定義: def 函數(shù)名(形參): ...
調(diào)用: 函數(shù)名(實(shí)參)
# 需求:定義有參無返回值的原函數(shù):get_sum(), 用于計(jì)算兩個(gè)變量的和
def print_info(fn_name):
def inner(a, b):
print("【友好提示】正在努力計(jì)算中...")
fn_name(a, b)
return inner
@print_info
def get_sum(a, b):
sum = a + b
print("兩個(gè)變量的和為:%d" % sum)
if __name__ == '__main__':
get_sum(10, 20)
#輸出結(jié)果
【友好提示】正在努力計(jì)算中...
兩個(gè)變量的和為:303.無參有返回值的函數(shù)
定義: def 函數(shù)名(): ... return 返回值
調(diào)用: 用變量接收返回值 = 函數(shù)名()
def print_info(fn_name):
def inner():
print("【友好提示】正在努力計(jì)算中...")
return fn_name()
return inner
@print_info
def get_sum():
a = 10
b = 20
sum = a + b
return sum
if __name__ == '__main__':
sum = get_sum()
print(sum)
# 輸出結(jié)果
【友好提示】正在努力計(jì)算中...
304.有參有返回值的函數(shù)
定義: def 函數(shù)名(形參): ... return 返回值
調(diào)用: 用變量接收返回值 = 函數(shù)名(實(shí)參)
# 需求:定義有參無返回值的原函數(shù):get_sum(), 用于計(jì)算兩個(gè)變量的和
def print_info(fn_name):
def inner(a, b):
print("【友好提示】正在努力計(jì)算中...")
return fn_name(a, b)
return inner
@print_info
def get_sum(a, b):
sum = a + b
return sum
if __name__ == '__main__':
sum = get_sum(10, 30)
print(sum)
# 輸出結(jié)果
具體執(zhí)行步驟:
1:當(dāng)使用 @print_info 裝飾 get_sum 時(shí),相當(dāng)于執(zhí)行了:getSum = print_info(get_sum)
2:此時(shí),print_info(get_sum) 返回的是 inner 函數(shù)。所以,getSum 現(xiàn)在實(shí)際上是 inner 函數(shù)。
3:當(dāng)調(diào)用 getSum(10, 30) 時(shí),實(shí)際上調(diào)用的是 inner(10, 30)。
4:在 inner 函數(shù)內(nèi)部,先打印提示信息,然后調(diào)用原始的函數(shù)(即之前的 get_sum,被裝飾前的函數(shù))并傳入?yún)?shù),得到結(jié)果,然后返回。
【友好提示】正在努力計(jì)算中...
402.2通用版本的裝飾器
以后所有裝飾器以此為準(zhǔn)
'''
通用裝飾器:① 有嵌套 ② 有引用 ③ 有返回 ④ 有不定長(zhǎng)參數(shù) ⑤ 有return返回值
'''
def logging(fn):
def inner(*args, **kwargs):
# 輸出裝飾器功能
print('-- 正在努力計(jì)算 --')
# 調(diào)用fn函數(shù)
return fn(*args, **kwargs)
return inner
@logging
def sum_num1(a, b):
result = a + b
return result
print(sum_num1(20, 10))
@logging
def sum_num2(a, b, c):
result = a + b + c
return result
print(sum_num2(10, 20, 30))
# 輸出結(jié)果
-- 正在努力計(jì)算 --
30
-- 正在努力計(jì)算 --
602.3多個(gè)裝飾器裝飾一個(gè)函數(shù)
"""
多個(gè)裝飾器裝飾1個(gè)函數(shù),細(xì)節(jié)如下:
多個(gè)裝飾器裝飾1個(gè)函數(shù),裝飾的順序是由最貼近函數(shù)的那個(gè)開始,自下而上(執(zhí)行順序)
"""
# 需求:發(fā)表評(píng)論之前,需要先登錄、在進(jìn)行驗(yàn)證碼驗(yàn)證,在不改變?cè)泻瘮?shù)的基礎(chǔ)上,對(duì)功能進(jìn)行增強(qiáng)
# 1: 定義裝飾器。加入:登錄的功能 登錄-》驗(yàn)證碼-》發(fā)表評(píng)論
def check_login(fn_name): #有外部函數(shù)
# 定義內(nèi)部函數(shù),用于對(duì)指定的fn_name函數(shù)功能做增強(qiáng)。
def inner(): #有內(nèi)部函數(shù)
print("登錄中...") #有額外功能
fn_name() #有引用
return inner #有返回
# 2: 定義裝飾器。加入:驗(yàn)證碼的功能
def check_code(fn_name): #有外部函數(shù)
# 定義內(nèi)部函數(shù),用于對(duì)指定的fn_name函數(shù)功能做增強(qiáng)。
def inner(): #有內(nèi)部函數(shù)
print("驗(yàn)證碼驗(yàn)證中...") #有額外功能
fn_name() #有引用
return inner #有返回
# 3:定義被裝飾的函數(shù)【自上而下】,意思是最上面的先裝飾,讓后往下
@check_login
@check_code
def comment():
print("發(fā)表評(píng)論...")
if __name__ == '__main__':
# # 寫法1:傳統(tǒng)的寫法【自下而上】
# code = check_code(comment)
# login = check_login(code)
# login()
#
print("-" * 50)
# 寫法2:語法糖
comment()
# 輸出結(jié)果
登錄中...
驗(yàn)證碼驗(yàn)證中...
發(fā)表評(píng)論...2.4帶有參數(shù)的裝飾器
"""
帶有參數(shù)的裝飾器:
1個(gè)裝飾器的參數(shù)只能有1個(gè)
"""
# 需求:定義一個(gè)裝飾器減法運(yùn)算,又能裝飾加法運(yùn)算的裝飾器
def logging(flag):
def print_info(fn_name):
def inner(a, b):
if flag == "+":
print("【友好提示】正在努力 加法 計(jì)算中...")
elif flag == "-":
print("【友好提示】正在努力 減法 運(yùn)算中...")
fn_name(a, b)
return inner
return print_info
@logging("+")
def add(a, b):
sum = a + b
print(f"【加法運(yùn)算】結(jié)果為:{sum}")
@logging("-")
def substract(a, b):
sum = a - b
print(f"【減法運(yùn)算】結(jié)果為:{sum}")
if __name__ == '__main__':
add(10, 20)
substract(20, 10)
# 輸出結(jié)果
【友好提示】正在努力 加法 計(jì)算中...
【加法運(yùn)算】結(jié)果為:30
【友好提示】正在努力 減法 運(yùn)算中...
【減法運(yùn)算】結(jié)果為:103.深淺拷貝
1、幾個(gè)概念
- 變量:是一個(gè)系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接空間
- 對(duì)象:被分配的一塊內(nèi)存,存儲(chǔ)其所代表的值
- 引用:是自動(dòng)形成的從變量到對(duì)象的指針
- 類型:屬于對(duì)象,而非變量
- 不可變對(duì)象:一旦創(chuàng)建就不可修改的對(duì)象,包括數(shù)值類型、字符串、布爾類型、元組
(該對(duì)象所指向的內(nèi)存中的值不能被改變。當(dāng)改變某個(gè)變量時(shí)候,由于其所指的值不能被改變,相當(dāng)于把原來的值復(fù)制一份后再改變,這會(huì)開辟一個(gè)新的地址,變量再指向這個(gè)新的地址。)
- 可變對(duì)象:可以修改的對(duì)象,包括列表、字典、集合
(該對(duì)象所指向的內(nèi)存中的值可以被改變。變量(準(zhǔn)確的說是引用)改變后,實(shí)際上是其所指的值直接發(fā)生改變,并沒有發(fā)生復(fù)制行為,也沒有開辟新的地址,通俗點(diǎn)說就是原地改變。)
當(dāng)我們寫:
a = "python"
Python解釋器干的事情:
① 創(chuàng)建變量a
② 創(chuàng)建一個(gè)對(duì)象(分配一塊內(nèi)存),來存儲(chǔ)值 'python'
③ 將變量與對(duì)象,通過指針連接起來,從變量到對(duì)象的連接稱之為引用(變量引用對(duì)象)

2、賦值
賦值: 只是復(fù)制了新對(duì)象的引用,不會(huì)開辟新的內(nèi)存空間。
并不會(huì)產(chǎn)生一個(gè)獨(dú)立的對(duì)象單獨(dú)存在,只是將原有的數(shù)據(jù)塊打上一個(gè)新標(biāo)簽,所以當(dāng)其中一個(gè)標(biāo)簽被改變的時(shí)候,數(shù)據(jù)塊就會(huì)發(fā)生變化,另一個(gè)標(biāo)簽也會(huì)隨之改變。

3.淺拷貝
淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層,拷貝了最外圍的對(duì)象本身,內(nèi)部的元素都只是拷貝了一個(gè)引用而已。
案例1:賦值

案例2:可變類型淺拷貝

案例3:不可變類型淺拷貝

注:不可變類型進(jìn)行淺拷貝不會(huì)給拷貝的對(duì)象開辟新的內(nèi)存空間,而只是拷貝了這個(gè)對(duì)象的引用
淺拷貝有三種形式: 切片操作,工廠函數(shù)(list()),copy模塊中的copy函數(shù)。
如: lst = [1,2,[3,4]]
切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst]
注:[:]它與[0:]相似,意思是從0索引拆分到末尾。它返回一個(gè)新列表。
工廠函數(shù):lst1 = list(lst)
copy函數(shù):lst1 = copy.copy(lst)
但是在lst中有一個(gè)嵌套的list[3,4],如果我們修改了它,情況就不一樣了。
1.當(dāng)淺復(fù)制的值是不可變對(duì)象(字符串、元組、數(shù)值類型)時(shí)和“賦值”的情況一樣,對(duì)象的id值(id()函數(shù)用于獲取對(duì)象的內(nèi)存地址)與淺復(fù)制原來的值相同。
2.當(dāng)淺復(fù)制的值是可變對(duì)象(列表、字典、集合)時(shí)會(huì)產(chǎn)生一個(gè)“不是那么獨(dú)立的對(duì)象”存在。有兩種情況:
①第一種情況:復(fù)制的對(duì)象中無復(fù)雜子對(duì)象,原來值的改變并不會(huì)影響淺復(fù)制的值,同時(shí)淺復(fù)制的值改變也并不會(huì)影響原來的值。原來值的id值與淺復(fù)制原來的值不同。
②第二種情況:復(fù)制的對(duì)象中有復(fù)雜子對(duì)象(例如列表中的一個(gè)子元素是一個(gè)列表),如果不改變其中復(fù)雜子對(duì)象,淺復(fù)制的值改變并不會(huì)影響原來的值。 但是改變?cè)瓉淼闹抵械膹?fù)雜子對(duì)象的值會(huì)影響淺復(fù)制的值。
4、深拷貝
深拷貝:和淺拷貝對(duì)應(yīng),深拷貝拷貝了對(duì)象的所有元素,包括多層嵌套的元素。深拷貝出來的對(duì)象是一個(gè)全新的對(duì)象,不再與原來的對(duì)象有任何關(guān)聯(lián)。
所以改變?cè)斜粡?fù)制對(duì)象不會(huì)對(duì)已經(jīng)復(fù)制出來的新對(duì)象產(chǎn)生影響。只有一種形式,copy模塊中的deepcopy函數(shù)。
可變類型深拷貝:

不可變類型深拷貝:不可變類型進(jìn)行深拷貝不會(huì)給拷貝的對(duì)象開辟新的內(nèi)存空間,而只是拷貝了這個(gè)對(duì)象的引用

5、案例演示
案例1:對(duì)于可變對(duì)象深淺拷貝
import copy
a=[1,2,3]
print("=====賦值=====")
b=a
print(a)
print(b)
print(id(a))
print(id(b))
print("=====淺拷貝=====")
b=copy.copy(a)
print(a)
print(b)
print(id(a))
print(id(b))
print("=====深拷貝=====")
b=copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))
# 結(jié)果如下
"""
=====賦值=====
[1, 2, 3]
[1, 2, 3]
37235144
37235144
=====淺拷貝=====
[1, 2, 3]
[1, 2, 3]
37235144
37191432
=====深拷貝=====
[1, 2, 3]
[1, 2, 3]
37235144
37210184
"""小結(jié):
賦值: 值相等,地址相等
copy淺拷貝:值相等,地址不相等
deepcopy深拷貝:值相等,地址不相等
案例2:對(duì)于可變對(duì)象深淺拷貝(外層改變?cè)兀?
import copy l=[1,2,3,[4, 5]] l1=l #賦值 l2=copy.copy(l) #淺拷貝 l3=copy.deepcopy(l) #深拷貝 l.append(6) print(l) print(l1) print(l2) print(l3) # 結(jié)果 """ [1, 2, 3, [4, 5], 6] #l添加一個(gè)元素6 [1, 2, 3, [4, 5], 6] #l1跟著添加一個(gè)元素6 [1, 2, 3, [4, 5]] #l2保持不變 [1, 2, 3, [4, 5]] #l3保持不變 """
案例3:對(duì)于可變對(duì)象深淺拷貝(內(nèi)層改變?cè)兀?/p>
import copy l=[1,2,3,[4, 5]] l1=l #賦值 l2=copy.copy(l) #淺拷貝 l3=copy.deepcopy(l) #深拷貝 l[3].append(6) print(l) print(l1) print(l2) print(l3) # 結(jié)果 """ [1, 2, 3, [4, 5, 6]] #l[3]添加一個(gè)元素6 [1, 2, 3, [4, 5, 6]] #l1跟著添加一個(gè)元素6 [1, 2, 3, [4, 5, 6]] #l2跟著添加一個(gè)元素6 [1, 2, 3, [4, 5]] #l3保持不變 """
小結(jié):
① 外層添加元素時(shí),淺拷貝不會(huì)隨原列表變化而變化;內(nèi)層添加元素時(shí),淺拷貝才會(huì)變化。
② 無論原列表如何變化,深拷貝都保持不變。
③ 賦值對(duì)象隨著原列表一起變化。
6.深淺拷貝相同點(diǎn):
1.對(duì)于不可變類型,深淺拷貝都是失敗,只是引用傳遞
2.對(duì)于可變類型第一層,深淺拷貝都會(huì)成功,都會(huì)開辟新的內(nèi)存空間
7.深層拷貝不同點(diǎn)
1.對(duì)于可變類型第二層及以上,淺拷貝失敗,只是引用傳遞
2.對(duì)于可變類型第二層第二層及以上,深拷貝都會(huì)成功,都會(huì)開辟新的內(nèi)存空間
8.判斷是否拷貝成功
1.看拷貝后是否開辟了新的空間,如果開辟了就是拷貝成功
2,拷貝成功后,原始和拷貝內(nèi)容互不影響
3,淺拷貝最多拷貝一層,深拷貝可以拷貝多層
到此這篇關(guān)于Python中的閉包裝飾器和深淺拷貝案例演示的文章就介紹到這了,更多相關(guān)python閉包裝飾器和深淺拷貝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyCharm專業(yè)最新版2019.1安裝步驟(含激活碼)
這篇文章主要介紹了PyCharm專業(yè)最新版2019.1安裝步驟(含激活碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
為什么選擇python編程語言入門黑客攻防 給你幾個(gè)理由!
為什么選擇python編程語言入門黑客攻防,小編今天給你幾個(gè)理由!Python語言的優(yōu)點(diǎn)、Python黑客攻擊優(yōu)點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
個(gè)人微信公眾號(hào)接入ChatGPT的教程分享
這篇文章主要為大家詳細(xì)介紹了如何為個(gè)人微信公眾號(hào)接入ChatGPT,文中的實(shí)現(xiàn)步驟講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-05-05
詳解Python requests 超時(shí)和重試的方法
這篇文章主要介紹了詳解Python requests 超時(shí)和重試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
python中import reload __import__的區(qū)別詳解
這篇文章主要介紹了python中import reload __import__的區(qū)別詳解,需要的朋友可以參考下2017-10-10
python使用htmllib分析網(wǎng)頁內(nèi)容的方法
這篇文章主要介紹了python使用htmllib分析網(wǎng)頁內(nèi)容的方法,涉及Python使用htmllib模塊的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線
這篇文章主要為大家介紹了Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

