最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python閉包裝飾器綜合案例解析

 更新時間:2025年12月30日 11:53:52   作者:碼農(nóng)也是農(nóng)...  
文章主要介紹了Python中的閉包和裝飾器,閉包用于在全局作用域中訪問局部變量,而裝飾器則用于給函數(shù)增加額外功能,而無需改變現(xiàn)有代碼和調(diào)用方式,文章還解釋了如何使用PyMySQL進行數(shù)據(jù)庫編程,包括安裝、使用和安全連接操作,感興趣的朋友跟隨小編一起看看吧

一、閉包

1、作用域

在Python代碼中,作用域分為兩種情況:全局作用域 與 局部作用域

2、變量的作用域

在全局定義的變量 => 全局變量

在局部定義的變量 => 局部變量

3、全局變量與局部變量的訪問范圍

① 在全局作用域中可以訪問全局變量,在局部作用域中可以訪問局部變量

# 全局作用域(全局變量)
num1 = 10
def func():
    # 局部作用域(局部變量)
    num2 = 20
    # ① 在局部訪問局部變量
    print(num2)
# ① 在全局訪問全局變量
print(num1)
# 調(diào)用函數(shù)
func()

② 在局部作用域中可以訪問全局變量

# 全局作用域(全局變量)
num1 = 10
def func():
    # 局部作用域(局部變量)
    # ② 在局部作用域中可以訪問全局變量
    print(num1)
# 調(diào)用函數(shù)
func()

③ 在全局作用域中不能訪問局部變量

# 全局作用域(全局變量)
num1 = 10
def func():
    # 局部作用域(局部變量)
    num2 = 20
# 調(diào)用函數(shù)
func()
# 在全局作用域中調(diào)用局部變量num2
print(num2)

運行結(jié)果:

4、問題:為什么在全局作用域中無法訪問局部變量

答:主要原因在于,在Python的底層存在一個“垃圾回收機制”,主要的作用就是回收內(nèi)存空間。加快計算機的運行。我們在Python代碼中定義的變量也是需要占用內(nèi)存的,所以Python為了回收已經(jīng)被已經(jīng)過的內(nèi)存,會自動將函數(shù)運行以后的內(nèi)部變量和程序直接回收。

5、問題:我們有沒有辦法把函數(shù)內(nèi)部的局部變量保留

答:使用閉包

在函數(shù)嵌套的前提下,內(nèi)部函數(shù)使用了外部函數(shù)的變量,并且外部函數(shù)返回了內(nèi)部函數(shù),我們把這個使用外部函數(shù)變量的內(nèi)部函數(shù)稱為閉包。

6、閉包的構(gòu)成條件(三步走)

第一步:有嵌套

第二步:有引用

第三步:有返回(return)

'''
閉包程序三步走:① 有嵌套 ② 有引用 ③ 有返回
'''
def func():
    num = 20  # 局部變量
    def inner():
        print(num)
    return inner  # 實際上inner函數(shù)并沒有執(zhí)行,只是返回了inner函數(shù)在內(nèi)存中的地址
f = func()  # 相當于把inner在內(nèi)存中的地址0x7fbc9b3f8e18賦值給變量f
f()  # 找到inner函數(shù)的內(nèi)存地址,并執(zhí)行器內(nèi)部的代碼(num=20),在于閉包函數(shù)保留了num=20這個局部變量

閉包的作用:正常情況下,當執(zhí)行func()的時候,函數(shù)內(nèi)部的變量num = 20,會隨著函數(shù)的func函數(shù)的結(jié)束而被垃圾回收機制所回收。所以閉包的真正作用:就是可以在全局作用域中,實現(xiàn)間接對局部變量進行訪問。

7、注意事項

注意點:

由于閉包引用了外部函數(shù)的變量,則外部函數(shù)的變量沒有及時釋放,消耗內(nèi)存。

8、在閉包的內(nèi)部實現(xiàn)對外部變量的修改

錯誤版本:

'''
Python閉包:① 有嵌套 ② 有引用 ③ 有返回
'''
def outer():
    num = 10
    def inner():
        # 這種寫法無法實現(xiàn)通過閉包修改外部的局部變量
        num = 20
    print('outer函數(shù)中的num:', num)  # 10
    inner()  # 執(zhí)行函數(shù)inner,讓num=20生效
    print('outer函數(shù)中的num:', num)  # 10
    return inner
f = outer()
f()

正確版本:

新知識點:nonlocal關(guān)鍵字(在函數(shù)內(nèi)部修改函數(shù)外部的變量,這個變量非全局變量)

老知識點:global關(guān)鍵字(在函數(shù)內(nèi)部聲明變量,代表引用全局作用域中的全局變量)

'''
Python閉包:① 有嵌套 ② 有引用 ③ 有返回
'''
def outer():
    num = 10
    def inner():
        # 這種寫法無法實現(xiàn)通過閉包修改外部的局部變量'
        nonlocal num
        num = 20
    print('outer函數(shù)中的num:', num)  # 10
    inner()  # 執(zhí)行函數(shù)inner,讓num=20生效
    print('outer函數(shù)中的num:', num)  # 20
    return inner
f = outer()
f()

9、閉包的綜合案例

閉包的作用:可以在全局作用域中間接訪問局部變量(在函數(shù)執(zhí)行以后)

'''
閉包編寫三步走:① 有嵌套 ② 有引用 ③ 有返回
分析:
執(zhí)行f = func()的時候,result賦值為0,然后定義inner,返回inner,最終結(jié)果f = inner函數(shù)的內(nèi)存地址
執(zhí)行f(1),相當于執(zhí)行inner函數(shù),nonlocal引用局部變量result=0,然后進行+1操作,彈出0+1=1
繼續(xù)執(zhí)行
執(zhí)行f(2),相當于執(zhí)行inner函數(shù),聲明nonlocal result,代表還是引用外部的局部變量,由于此時外部的result已經(jīng)被
f(1)更改為1了,所以由于局部變量一直沒有消失,所以此時result=1,執(zhí)行+2操作,最終結(jié)果為3
'''
def func():
    result = 0
    def inner(num):
        nonlocal result
        result += num
        print(result)
    return inner
f = func()
f(1)  # 1
f(2)  # 3

二、裝飾器

1、什么是裝飾器

在不改變現(xiàn)有函數(shù)源代碼以及函數(shù)調(diào)用方式的前提下,實現(xiàn)給函數(shù)增加額外的功能。

裝飾器的本質(zhì)就是一個閉包函數(shù)(三步:① 有嵌套 ② 有引用 ③ 有返回)

有返回代表外部函數(shù)返回內(nèi)部函數(shù)的內(nèi)存地址(內(nèi)部函數(shù)的名稱),不帶

2、裝飾器的雛形

# 要求:把登錄功能封裝起來(比如封裝成一個函數(shù),添加這個登錄不能影響現(xiàn)有功能函數(shù))
'''
裝飾器:本質(zhì)是一個閉包,有嵌套、有引用、有返回(返回的是函數(shù)的內(nèi)存地址)
參數(shù)fn在check中也是一個局部變量
參數(shù)fn:就是要裝飾的函數(shù)的函數(shù)名,如comment,如download
'''
def check(fn):
    def inner():
        # 開發(fā)登錄功能
        print('登錄功能')
        # 調(diào)用原函數(shù)
        fn()
    return inner
# 評論功能(前提:登錄)
def comment():
    print('評論功能')
comment = check(comment)
comment()
# 下載功能(前提:登錄)
def download():
    print('下載功能')
download = check(download)
download()

3、裝飾器定義

'''
裝飾器:本質(zhì)就是一個閉包 ① 有嵌套 ② 有引用 ③ 有返回
'''
def check(fn):
    def inner():
        # 開發(fā)登錄驗證功能
        print('驗證登錄')
        # 執(zhí)行原有函數(shù)
        fn()
    return inner
@check
def comment():
    print('發(fā)表評論')
comment()

4、裝飾器的作用:獲取程序的執(zhí)行時間

'''
定義獲取程序的執(zhí)行時間裝飾器 => 閉包(① 有嵌套 ② 有引用 ③ 有返回)
'''
import time
def get_time(fn):
    def inner():
        # ① 添加裝飾器修飾功能(獲取程序的執(zhí)行時間)
        begin = time.time()
        # ② 調(diào)用fn函數(shù),執(zhí)行原函數(shù)代碼
        fn()
        end = time.time()
        print(f'這個函數(shù)的執(zhí)行時間:{end - begin}')
    return inner
@get_time
def demo():
    for i in range(1000000):
        print(i)
demo()

5、帶有參數(shù)裝飾器

'''
帶有參數(shù)的裝飾器:① 有嵌套 ② 有引用 ③ 有返回
'''
def logging(fn):
    def inner(*args, **kwargs):
        # 添加裝飾器代碼(輸出日志信息)
        print('-- 日志信息:正在努力計算機 --')
        # 執(zhí)行要修飾的函數(shù)
        fn(*args, **kwargs)  # sum_num(a, b)
    return inner
@logging
def sum_num(*args, **kwargs):
    result = 0
    # *args代表不定長元組參數(shù),args = (10, 20)
    for i in args:
        result += i
    # **kwargs代表不定長字典參數(shù), kwargs = {a:30, b:40}
    for i in kwargs.values():
        result += i
    print(result)
# sum_num帶4個參數(shù),而且類型不同,10和20以元組形式傳遞,a=30,b=40以字典形式傳遞
sum_num(10, 20, a=30, b=40)

6、帶有返回裝飾器

'''
帶有返回值的裝飾器:① 有嵌套 ② 有引用 ③ 有返回
如果一個函數(shù)執(zhí)行完畢后,沒有return返回值,則默認返回None
'''
def logging(fn):
    def inner(*args, **kwargs):
        print('-- 日志信息:正在努力計算 --')
        return fn(*args, **kwargs)  # fn() = sub_num(20, 10) = result
    return inner
@logging
def sub_num(a, b):
    result = a - b
    return result
print(sub_num(20, 10))

7、通用版本的裝飾器(以后所有的裝飾器以此為準)

'''
通用裝飾器:① 有嵌套 ② 有引用 ③ 有返回 ④ 有不定長參數(shù) ⑤ 有return返回值
'''
def logging(fn):
    def inner(*args, **kwargs):
        # 輸出裝飾器功能
        print('-- 正在努力計算 --')
        # 調(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))

8、裝飾器高級:使用裝飾器傳遞參數(shù)(了解)

基本語法:

def 裝飾器(fn):
    ...
@裝飾器('參數(shù)')
def 函數(shù)():
    # 函數(shù)代碼

實例代碼:根據(jù)傳遞參數(shù)不同,打印不同的日志信息

'''
通用裝飾器:① 有嵌套 ② 有引用 ③ 有返回 ④ 有不定長參數(shù) ⑤ 有return返回值
真正問題:通過裝飾器傳遞參數(shù),我們應(yīng)該如何接收這個參數(shù)呢?
答:在logging方法的外側(cè)在添加一個函數(shù),專門用于接收傳遞過來的參數(shù)
'''
def logging(flag):
    # flag = + 或 flag = -
    def decorator(fn):
        def inner(*args, **kwargs):
            if flag == '+':
                print('-- 日志信息:正在努力進行加法運算 --')
            elif flag == '-':
                print('-- 日志信息:正在努力進行減法運算 --')
            return fn(*args, **kwargs)
        return inner
    return decorator
@logging('+')
def sum_num(a, b):
    result = a + b
    return result
@logging('-')
def sub_num(a, b):
    result = a - b
    return result
print(sum_num(10, 20))
print(sub_num(100, 80))

9、擴展:類裝飾器(了解)

裝飾器還有一種特殊的用法就是類裝飾器,就是通過定義一個類來裝飾函數(shù)。

class 類裝飾器():
    # 裝飾器代碼
@類裝飾器名稱
def 函數(shù)():
    # 函數(shù)代碼

舉個栗子:編寫一個Check類裝飾器,用于實現(xiàn)用戶的權(quán)限驗證

'''
類裝飾器編寫規(guī)則:
① 必須有一個__init__初始化方法,用于接收要裝飾函數(shù)的函數(shù) 
② 必須把這個類轉(zhuǎn)換為可以調(diào)用的函數(shù)
問題:如何把一個類當做一個裝飾器函數(shù)進行調(diào)用(把類當做函數(shù))
'''
class Check():
    def __init__(self, fn):
        # fn就是要修飾函數(shù)的名稱,當Check裝飾器類被調(diào)用時,系統(tǒng)會自動把comment函數(shù)名稱傳遞給fn變量
        self.__fn = fn
    # __call__方法:把一個類轉(zhuǎn)換為函數(shù)的形式進行調(diào)用
    def __call__(self, *args, **kwargs):
        # 編寫裝飾器代碼
        print('請先登錄')
        # 調(diào)用comment函數(shù)本身
        self.__fn(*args, **kwargs)
# 編寫一個函數(shù),用于實現(xiàn)評論功能,底層comment = Check(comment)
@Check
def comment():
    print('評論功能')
# 調(diào)用comment函數(shù),實現(xiàn)評論功能
comment()

@Check 等價于 comment = Check(comment), 所以需要提供一個init方法,并多增加一個fn參數(shù)。

要想類的實例對象能夠像函數(shù)一樣調(diào)用,需要在類里面使用call方法,把類的實例變成可調(diào)用對象(callable),也就是說可以像調(diào)用函數(shù)一樣進行調(diào)用。

call方法里進行對fn函數(shù)的裝飾,可以添加額外的功能。

目標:① 了解閉包的作用以及閉包的基本語法(三步走)

? ② 能獨立完成通用裝飾器的編寫

? ③ 能使用裝飾器傳遞參數(shù)

三、PyMySQL

前提

提前安裝MySQL數(shù)據(jù)庫(可以使用Linux系統(tǒng)的,也可以使用Windows版本,如小皮面板)

1、為什么要學(xué)習PyMySQL

如何實現(xiàn)將100000條數(shù)據(jù)插入到MySQL數(shù)據(jù)庫?

答案:

如果使用之前學(xué)習的MySQL客戶端來完成這個操作,那么這個工作量無疑是巨大的,我們可以通過使用程序代碼的方式去連接MySQL數(shù)據(jù)庫,然后對MySQL數(shù)據(jù)庫進行增刪改查的方式,實現(xiàn)100000條數(shù)據(jù)的插入,像這樣使用代碼的方式操作數(shù)據(jù)庫就稱為數(shù)據(jù)庫編程。

2、安裝PyMySQL模塊

安裝PyMySQL:

# pip install pymysql

卸載PyMySQL:

# pip uninstall pymysql

3、PyMySQL的使用(七步走)

☆ 導(dǎo)入 pymysql 包

 import pymysql

☆ 創(chuàng)建連接對象

調(diào)用pymysql模塊中的connect()函數(shù)來創(chuàng)建連接對象,代碼如下:

 conn=connect(參數(shù)列表)
 * 參數(shù)host:連接的mysql主機,如果本機是'localhost'
 * 參數(shù)port:連接的mysql主機的端口,默認是3306
 * 參數(shù)user:連接的用戶名
 * 參數(shù)password:連接的密碼
 * 參數(shù)database:數(shù)據(jù)庫的名稱
 * 參數(shù)charset:通信采用的編碼方式,推薦使用utf8

連接對象操作說明:

  • 關(guān)閉連接 conn.close()
  • 提交數(shù)據(jù) conn.commit()
  • 撤銷數(shù)據(jù) conn.rollback()

☆ 獲取游標對象

獲取游標對象的目標就是要執(zhí)行sql語句,完成對數(shù)據(jù)庫的增、刪、改、查操作。代碼如下:

 # 調(diào)用連接對象的cursor()方法獲取游標對象   
 cur =conn.cursor()

游標操作說明:

  • 使用游標執(zhí)行SQL語句: execute(operation [parameters ]) 執(zhí)行SQL語句,返回受影響的行數(shù),主要用于執(zhí)行insert、update、delete、select等語句
  • 獲取查詢結(jié)果集中的一條數(shù)據(jù):cur.fetchone()返回一個元組, 如 (1,‘張三’)
  • 獲取查詢結(jié)果集中的所有數(shù)據(jù): cur.fetchall()返回一個元組,如((1,‘張三’),(2,‘李四’))
  • 關(guān)閉游標: cur.close(),表示和數(shù)據(jù)庫操作完成

☆ pymysql完成數(shù)據(jù)的查詢操作

import pymysql
# 創(chuàng)建連接對象
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='db_itheima', charset='utf8')
# 獲取游標對象
cursor = conn.cursor()
# 查詢 SQL 語句
sql = "select * from students;"
# 執(zhí)行 SQL 語句 返回值就是 SQL 語句在執(zhí)行過程中影響的行數(shù)
row_count = cursor.execute(sql)
print("SQL 語句執(zhí)行影響的行數(shù)%d" % row_count)
# 取出結(jié)果集中一行數(shù)據(jù), 例如:(1, '張三')
# print(cursor.fetchone())
# 取出結(jié)果集中的所有數(shù)據(jù), 例如:((1, '張三'), (2, '李四'), (3, '王五'))
for line in cursor.fetchall():
    print(line)
# 關(guān)閉游標
cursor.close()
# 關(guān)閉連接
conn.close()

☆ pymysql完成對數(shù)據(jù)的增刪改

import pymysql
# 創(chuàng)建連接對象
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='db_itheima', charset='utf8')
# 獲取游標對象
cursor = conn.cursor()
try:
    # 添加 SQL 語句
    # sql = "insert into students(name) values('劉璐'), ('王美麗');"
    # 刪除 SQ L語句
    # sql = "delete from students where id = 5;"
    # 修改 SQL 語句
    sql = "update students set name = '王鐵蛋' where id = 6;"
    # 執(zhí)行 SQL 語句
    row_count = cursor.execute(sql)
    print("SQL 語句執(zhí)行影響的行數(shù)%d" % row_count)
    # 提交數(shù)據(jù)到數(shù)據(jù)庫
    conn.commit()
except Exception as e:
    # 回滾數(shù)據(jù), 即撤銷剛剛的SQL語句操作
    conn.rollback()
# 關(guān)閉游標
cursor.close()
# 關(guān)閉連接
conn.close()

說明:

  • conn.commit() 表示將修改操作提交到數(shù)據(jù)庫
  • conn.rollback() 表示回滾數(shù)據(jù)

☆ pymysql實現(xiàn)安全連接操作(擴展)

from pymysql import connect
def main():
    find_name = input("請輸入物品名稱:")
    # 創(chuàng)建Connection連接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='db_itheima',charset='utf8')
    # 獲得Cursor對象
    cs1 = conn.cursor()
    # 非安全的方式
    # 輸入 ' or 1 = 1 or '   (單引號也要輸入)
    # sql = "select * from goods where name='%s'" % find_name
    # print("""sql===>%s<====""" % sql)
    # # 執(zhí)行select語句,并返回受影響的行數(shù):查詢所有數(shù)據(jù)
    # count = cs1.execute(sql)
    # 安全的方式
    # 構(gòu)造參數(shù)列表
    params = [find_name]
    # 執(zhí)行select語句,并返回受影響的行數(shù):查詢所有數(shù)據(jù)
    count = cs1.execute("select * from goods where name=%s", params)
    # 注意:
    # 如果要是有多個參數(shù),需要進行參數(shù)化
    # 那么params = [數(shù)值1, 數(shù)值2....],此時sql語句中有多個%s即可
    # %s 不需要帶引號
    # 打印受影響的行數(shù)
    print(count)
    # 獲取查詢的結(jié)果
    # result = cs1.fetchone()
    result = cs1.fetchall()
    # 打印查詢的結(jié)果
    print(result)
    # 關(guān)閉Cursor對象
    cs1.close()
    # 關(guān)閉Connection對象
    conn.close()
if __name__ == '__main__':
    main()

_name
# print(“”“sql===>%s<====”“” % sql)
# # 執(zhí)行select語句,并返回受影響的行數(shù):查詢所有數(shù)據(jù)
# count = cs1.execute(sql)

# 安全的方式
# 構(gòu)造參數(shù)列表
params = [find_name]
# 執(zhí)行select語句,并返回受影響的行數(shù):查詢所有數(shù)據(jù)
count = cs1.execute("select * from goods where name=%s", params)
# 注意:
# 如果要是有多個參數(shù),需要進行參數(shù)化
# 那么params = [數(shù)值1, 數(shù)值2....],此時sql語句中有多個%s即可
# %s 不需要帶引號
# 打印受影響的行數(shù)
print(count)
# 獲取查詢的結(jié)果
# result = cs1.fetchone()
result = cs1.fetchall()
# 打印查詢的結(jié)果
print(result)
# 關(guān)閉Cursor對象
cs1.close()
# 關(guān)閉Connection對象
conn.close()

if name == ‘main’:
main()

到此這篇關(guān)于Python閉包裝飾器的文章就介紹到這了,更多相關(guān)Python閉包裝飾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實例

    django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實例

    這篇文章主要介紹了django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python 通過exifread讀取照片信息

    python 通過exifread讀取照片信息

    這篇文章主要介紹了python 如何通過exifread讀取照片信息,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • OpenCV圖像卷積之cv.filter2D()函數(shù)詳解

    OpenCV圖像卷積之cv.filter2D()函數(shù)詳解

    在其官方文檔中,filter2D()函數(shù)在掩模板介紹中一筆帶過,我認為該函數(shù)應(yīng)該進行詳細介紹,下面這篇文章主要給大家介紹了關(guān)于OpenCV圖像卷積之cv.filter2D()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • flask入門之表單的實現(xiàn)

    flask入門之表單的實現(xiàn)

    這篇文章主要介紹了flask入門之表單的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python監(jiān)聽剪切板實現(xiàn)方法代碼實例

    Python監(jiān)聽剪切板實現(xiàn)方法代碼實例

    這篇文章主要介紹了Python監(jiān)聽剪切板實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-11-11
  • python+Word2Vec實現(xiàn)中文聊天機器人的示例代碼

    python+Word2Vec實現(xiàn)中文聊天機器人的示例代碼

    本文主要介紹了python+Word2Vec實現(xiàn)中文聊天機器人,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-03-03
  • Python如何通過ARIMA模型進行時間序列分析預(yù)測

    Python如何通過ARIMA模型進行時間序列分析預(yù)測

    這篇文章主要介紹了Python如何通過ARIMA模型進行時間序列分析預(yù)測問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 淘寶秒殺python腳本 掃碼登錄版

    淘寶秒殺python腳本 掃碼登錄版

    這篇文章主要為大家詳細介紹了淘寶秒殺python腳本,掃碼登錄版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • python生成隨機密碼或隨機字符串的方法

    python生成隨機密碼或隨機字符串的方法

    這篇文章主要介紹了python生成隨機密碼或隨機字符串的方法,涉及Python字符串及隨機數(shù)的相關(guān)使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • 淺談Selenium 控制瀏覽器的常用方法

    淺談Selenium 控制瀏覽器的常用方法

    這篇文章主要介紹了淺談Selenium 控制瀏覽器的常用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-12-12

最新評論

界首市| 炉霍县| 禹州市| 康马县| 桂林市| 香河县| 平塘县| 泽库县| 若羌县| 怀安县| 铜梁县| 柘城县| 张北县| 西乌| 昌都县| 新乡县| 修武县| 廊坊市| 文登市| 永兴县| 五常市| 阿尔山市| 克拉玛依市| 台南市| 始兴县| 固安县| 广丰县| 安图县| 剑川县| 广德县| 孟连| 贵州省| 宜川县| 岑巩县| 汝南县| 阿图什市| 屏边| 玉林市| 漳州市| 海城市| 阿尔山市|