函數進階(一)

目錄python

閉包函數

1.閉包函數必須在函數內部定義
 2.閉包函數能夠引用外層函數的名字
 閉包函數是 函數嵌套、函數對象、名稱空間與做用域 結合體。

直接調用閉包

# def func(x):
#     print(x)
# func(1010)

經過閉包函數傳參app

# def outer(number):
#     print(number)
#     def inner():
#         print(number)
#     return inner
#
# func = outer(100)
# func()

直接傳入地址,爬取小哥哥的博客ide

# import requests
# def spider_func(url):
#     response = requests.get(url)
#     if response.status_code == 200:
#         print(len(response.text))
#         print(response.text)
# url = 'https://www.cnblogs.com/zhulipeng-1998/'
# spider_func(url)

經過閉包傳入地址,爬取小哥哥博客函數

# import time
# import requests
# def spider_outer(url):
#     def spider_inner():
#         start_time = time.time()
#         response = requests.get(url)
#         end_time = time.time()
#         if response.status_code == 200:
#             print(f'爬取須要的時間{end_time - start_time}')
#             print(len(response.text))
#             print(response.text)
#     return spider_inner
# spider_jingdong = spider_outer('https://www.cnblogs.com/zhulipeng-1998/')
# spider_jingdong()

試着讓用戶輸入網址爬出內容,沒有成功url

import time
import requests
def spider_outer(url):
    def spider_inner():
        start_time = time.time()
        response = requests.get(url)
        end_time = time.time()
        if response.status_code == 200:
            print(f'爬取須要的時間{end_time - start_time}')
            print(len(response.text))
            print(response.text)
    return spider_inner
chioce = input('請輸入爬取網址:')
spider_chioce = spider_outer('chioce')
spider_chioce()

裝飾器:

不修改被裝飾對象的源代碼
不修改被裝飾對象的調用方式

閉包傳入,添加計時功能code

# import time
#
# def time_record(func):
#     start_time = time.time()
#     func()
#     end_time = time.time()
#     print(f'下載電影消耗的時間{end_time - start_time}')
#     return '蒼天老師的大片'
# def download_movie():
#     print('開始下載電影....')
#     time.sleep(5)
#     print('電影下載成功...')
#     return
# res = time_record(download_movie)
# for i in res:
#     print(i)

初級裝飾器,無返回值對象

# import time
# def download_movie(name):
#     print('開始下載電影.....')
#     time.sleep(3)
#     print('電影下載成功.....')
#     return f'{name}救援隊高清無碼.mp4'
#
# def time_record(func):
#     def inner(*args, **kwargs):
#         start_time = time.time()
#         res = func(*args, **kwargs)
#         end_time = time.time()
#         print(f'下載消耗時間{end_time - start_time}')
#         return res
#     return inner
# download_movie = time_record(download_movie)
# download_movie(name='nick')

有返回值,可是沒有接收到,打印了res,不知道對不對blog

# import time
# def download_movie():
#     print('開始下載電影.....')
#     time.sleep(3)
#     print('電影下載成功.....')
#     return '救援隊高清無碼.mp4'
#
# def time_record(func):
#     def inner(*args, **kwargs):
#         start_time = time.time()
#         res = func(*args, **kwargs)
#         print(res)
#         end_time = time.time()
#         print(f'下載消耗時間{end_time - start_time}')
#         return res
#     return inner
#
# download_movie = time_record(download_movie)
# download_movie()

最終版本ip

# def wrapper(func):
#     def inner(*args,**kwargs):
#         username = input('請輸入名字')
#         if username == 'dsb':
#             res = func(*args,**kwargs)
#             return res
#
#         else:
#             print('用戶權限不足')
#     return inner
#
# def func1():
#     pass
#
# func1 = wrapper(func1)
# func1()


### def wrapper(func):
        def inner(*args,**kwargs):
            res = func(*args,**kwargs)
            return res
        return inner

魔法糖

import time
'''def wrapper(func):
    def inner(*args,**kwargs):
        res = func(*args, **kwargs)
        return res
    return inner

@wrapper
def func1():
    pass
def func2():
    pass

func1()'''
相關文章
相關標籤/搜索