Python关于装饰器的练习题

Python43

1.请实现一个装饰器,把函数的返回值+100然后返回

def wapper(func):
    def innner(*args,**kwargs):
        ret=func(*args,**kwargs)
        ret=print(ret+100)
        return ret
    return innner
@wapper
def func(number):
    return int(number)
func(100)
###结果:200

2.请实现一个装饰器,通过一次调用使函数重复执行5次

#Python学习交流群:725638078

def wapper(func):
    def innner(*args,**kwargs):
        count=0
        while count

3.请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中

import time
def wapper(func):
    def inner(*args,**kwargs):
        with open("log",encoding="utf-8",mode="a+") as f:
            structime=time.localtime()
            f.write(f'北京时间:{time.strftime("%Y-%m-%d %H:%M:%S",structime)} 函数名字为:{func.__name__}\n')
        ret=func(*args,**kwargs)
        return ret
    return inner
@wapper
def func():
    print("执行")
func()

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者

Original: https://www.cnblogs.com/djdjdj123/p/15593651.html
Author: Python探索牛
Title: Python关于装饰器的练习题



相关阅读1

Title: Python中的sort()方法使用基础

参数解释:

(1)iterable指定要排序的list或者iterable,不用多说;

(2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:

students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])

(3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:

sorted(students, key=lambda student : student[2])

key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。

1.原址排序

1)列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。

x = [4, 6, 2, 1, 7, 9]
x.sort()
print (x) # [1, 2, 4, 6, 7, 9]

2.副本排序

1)[:]分片方法

x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print (y) #[1, 2, 4, 6, 7, 9]
print (x) #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。

2)sorted方法

sorted返回一个有序的副本,并且类型总是列表,如下:


x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print (y) #[1, 2, 4, 6, 7, 9]
print (x) #[4, 6, 2, 1, 7, 9]

print (sorted('Python')) #['P', 'h', 'n', 'o', 't', 'y']

1.自定义cmp比较函数

def comp(x, y):
    if x < y:
        return 1
    elif x > y:
        return -1
    else:
        return 0

nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print (nums) # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print (nums) # 降序排序[0, 1, 2, 3, 8]

2.自定义key和reverse

(1.reverse实现降序排序,需要提供一个布尔值,默认为False(升序排列)。

(2.key在使用时必须提供一个排序过程总调用的函数:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print (sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False))

[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]

Original: https://www.cnblogs.com/xxpythonxx/p/16424704.html
Author: python学习者0
Title: Python中的sort()方法使用基础

相关阅读2

Title: Python 实现语句中提取人名(附代码) | Python工具

前言

本文提供将语句中的人名提取出来的工具方法,可以拿去直接使用。

环境依赖

需要安装两个库,其实一个也可以,但是我这边准备了两个库做个比较。

安装命令如下:

pip install LAC&#xA0;-i https://pypi.douban.com/simple
pip install ltp&#xA0;-i https://pypi.douban.com/simple

代码

不废话,上代码。

#!/user/bin/env python
coding=utf-8
"""
@project : csdn
@author  : 剑客阿良_ALiang
@file   : extract_sentence_name_tool.py
@ide    : PyCharm
@time   : 2022-01-25 11:11:43
"""
from LAC import LAC
from ltp import LTP
import time

lac = LAC(mode="lac")
ltp = LTP()

句子提取名字
def extract_name(sentence: str, type='lac'):
    user_name_lis = []
    if type == 'lac':
        _result = lac.run(sentence)
        for _index, _label in enumerate(_result[1]):
            if _label == "PER":
                user_name_lis.append(_result[0][_index])
    elif type == 'ltp':
        _seg, _hidden = ltp.seg([sentence])
        _pos_hidden = ltp.pos(_hidden)
        for _seg_i, _seg_v in enumerate(_seg):
            _hidden_v = _pos_hidden[_seg_i]
            for _h_i, _h_v in enumerate(_hidden_v):
                if _h_v == "nh":
                    user_name_lis.append(_seg_v[_h_i])
    else:
        raise Exception('type not suppose')
    return user_name_lis

if __name__ == '__main__':
    _start_lac = time.time()
    lis1 = extract_name("就因为看了沈腾和贾玲的王牌对王牌节目,所以杨迪肯定偷题了。", 'lac')
    _end_lac = time.time()
    print("LAC: {}

代码说明:

1、extract_name方法入参分别为:语句参数、类型参数。其中默认为lac模式,可以选择ltp模式。

其中lac模型提取人名的速率较快,但是ltp的提取人名准确率更高。

验证一下,执行看看效率。

Python关于装饰器的练习题

总结

使用的时候可以多试试两个库的区别,ltp的准确率稍微高一点。

分享:每个人都睁着眼睛,但不等于每个人都在看世界,许多人几乎不用自己的眼睛看,他们只听别人说,他们看到的世界永远是别人说的样子。——猜猜看

如果本文对你有帮助的话,点个赞吧,谢谢!

Python关于装饰器的练习题

本人CSDN主页地址:剑客阿良_ALiang的主页

一起学习,一起进步。

Original: https://www.cnblogs.com/jk-aliang/p/15843223.html
Author: 剑客·阿良
Title: Python 实现语句中提取人名(附代码) | Python工具

相关阅读3

Title: 办公自动化:PDF文件合并器,将多个PDF文件进行合并...

操作说明:选择多个PDF文件,执行完合并后会生成一个新的PDF文件,这个新的PDF文件包含所有源PDF文件的页面。

【阅读全文】

Python关于装饰器的练习题

将相关的三方模块导入到代码块中...

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import os
import PyPDF2  # PDF操作库

QThread是PyQt5的子线程应用,之前已经使用过比较多的次数了。一般使用时通过创建一个类专门处理线程相关的逻辑。注意在这个类上面继承 QThread,创建好之后里面的函数应用范式基本都是不会改变的。一个__ init__ 函数用来初始化、另一个 del 函数控制线程的销毁,还有一个run函数用来编写线程里面的业务逻辑。

这里面定义了一个信号量finished

finished = pyqtSignal(bool)

这个变量主要是为了在子线程执行完成时向主线程传送变量值。这样,主线程就知道子线程的执行状态。

class WorkThread(QThread):
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(WorkThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        pdf_files_path = self.parent.pdf_files_path.text().strip()
        pdf_tar_dir = self.parent.pdf_tar_dir.text().strip()

        file_list = pdf_files_path.split(',')

        merge = PyPDF2.PdfFileMerger()
        for file in file_list:
            merge.append(PyPDF2.PdfFileReader(file))
        merge.write(pdf_tar_dir + '/汇总.pdf')

        self.finished.emit(True)

编写UI界面,界面上的UI组件比较少,源文件按钮是为了选择需要合并的PDF文件(支持多选,选择文件时按住Ctrl键就可以选择多个文件)。目标路径是为了选择存储生成的后的合并文件的路径的。选择好之后点击开始按钮就可以调用子线程去执行PDF文件合并操作了。

class PDFMerge(QWidget):
    def __init__(self):
        super(PDFMerge, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('PDF文件合并器  公众号:[Python 集中营]')
        self.setWindowIcon(QIcon('pdf.ico'))
        self.setFixedWidth(500)
        self.setFixedHeight(120)

        grid = QGridLayout()

        self.pdf_files_path = QLineEdit()
        self.pdf_files_path.setReadOnly(True)

        self.pdf_files_btn = QPushButton()
        self.pdf_files_btn.setText('源文件')
        self.pdf_files_btn.clicked.connect(self.pdf_files_btn_click)

        self.pdf_tar_dir = QLineEdit()
        self.pdf_tar_dir.setReadOnly(True)

        self.pdf_tar_btn = QPushButton()
        self.pdf_tar_btn.setText('目标路径')
        self.pdf_tar_btn.clicked.connect(self.pdf_tar_btn_click)

        self.start_btn = QPushButton()
        self.start_btn.setText('开始合并吧')
        self.start_btn.clicked.connect(self.start_btn_click)

        grid.addWidget(self.pdf_files_path, 0, 0, 1, 1)
        grid.addWidget(self.pdf_files_btn, 0, 1, 1, 1)

        grid.addWidget(self.pdf_tar_dir, 1, 0, 1, 1)
        grid.addWidget(self.pdf_tar_btn, 1, 1, 1, 1)

        grid.addWidget(self.start_btn, 2, 0, 1, 2)

        self.thread_ = WorkThread(self)
        self.thread_.finished.connect(self.finished)

        self.setLayout(grid)

    def pdf_files_btn_click(self):
        files = QFileDialog.getOpenFileNames(self, os.getcwd(), '打开文件', 'PDF Files(*.pdf)')
        file_list = files[0]
        self.pdf_files_path.setText(','.join(file_list))

    def pdf_tar_btn_click(self):
        dir = QFileDialog.getExistingDirectory(self, os.getcwd(), '打开文件夹')
        self.pdf_tar_dir.setText(dir)

    def start_btn_click(self):
        self.start_btn.setEnabled(False)
        self.thread_.start()

    def finished(self, finished):
        if finished is True:
            self.start_btn.setEnabled(True)

通过main函数启动应用...

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = PDFMerge()
    main.show()
    sys.exit(app.exec_())

将上述所有代码块copy到一个.py的python文件中,直接启动即可运行。

有任何问题,欢迎大家留言。博主必当知无不言、言无不尽!

Python关于装饰器的练习题

【往期精彩】

GUI猜数字游戏,直接开玩...

手把手教你做一个数据图表生成器(附源码)...

动态指针时钟:利用pyqt5制作指针钟表显示实时时间

hashlib.md5()函数来筛选出系统重复文件并移除...

python 日志中最亮的仔,是喜欢的花里胡哨吖...

哈撒给,英雄联盟全皮肤下载器来了...

手绘图片生成器:以雪容融为例一键生成...

PyQt5的敏感词检测工具制作,运营者的福音...

刚刚出炉的冬奥会吉祥物:冰墩墩,附源码...

最优美的表格查看插件:tabulate

手绘图片生成器:以雪容融为例一键生成...

大年初二、做了一个windows通知管理器!

Original: https://www.cnblogs.com/lwsbc/p/15957150.html
Author: Python集中营
Title: 办公自动化:PDF文件合并器,将多个PDF文件进行合并...