当前位置: 首页 > news >正文

win2003 iis做网站网页加速器手机版

win2003 iis做网站,网页加速器手机版,金融网站建站,wordpress3.5.2#x1f433;序言 在Python社区#xff0c;没有强制的编码标准#xff0c;这虽然赋予了开发者更多的自由#xff0c;但也导致代码风格不一致性。使得部分代码变得晦涩难懂#xff0c;本文将探讨一系列的开发技巧和最佳实践#xff0c;开发出优雅的Python脚本。 1、参数接… 序言 在Python社区没有强制的编码标准这虽然赋予了开发者更多的自由但也导致代码风格不一致性。使得部分代码变得晦涩难懂本文将探讨一系列的开发技巧和最佳实践开发出优雅的Python脚本。 1、参数接收与校验 argparse模块可以使用标准的命令行界面风格解析命令行参数支持位置参数和可选参数使用-h可查看脚本使用说明。 1.1 ArgumentParser常用属性 字段说明备注name参数名称或选项例如-file、–filedefault默认值type类型choices可选值列表required是否必传默认为Falsenargs参数的数量默认为None,支持int*metavar帮助信息显示参数的名字action动作支持store_true、store_false等help帮助信息 1.2 获取位置参数 使用位置参数我们可以处理n多个值输出列表 # python main.py 3 5import argparseparser argparse.ArgumentParser(description位置参数测试) parser.add_argument(number, typeint, nargs*, help传入数字)args parser.parse_args()# [3, 5] print(args.number)1.3 获取可选参数 使用可选参数可以避免传入位置不准确的问题 # python main.py --name 欢颜 --datatime 2023-08-18 13:14:52 --is_worktimeimport argparsefrom datetime import datetimeclass ParserArgs:def __init__(self):parser argparse.ArgumentParser(description从Python代码到诗)parser.add_argument(--name, typestr, requiredTrue, help输入名称)parser.add_argument(--datetime, typeself.validate_dt, requiredTrue, help日期时间(YYYY-MM-DD HH:MM:SS))parser.add_argument(--is_worktime, actionstore_true, help是否在工作时间)self.args parser.parse_args()staticmethoddef validate_dt(dt_str, fmt_dt%Y-%m-%d %H:%M:%S):try:dt_obj datetime.strptime(dt_str, fmt_dt)except ValueError:raise argparse.ArgumentTypeError(Invalid datetime format.)else:return dt_obj# Namespace(name欢颜, datetimedatetime.datetime(2023, 8, 17, 0, 0), is_worktimeTrue) Args ParseArgs().args2、日志记录器 ​ 项目开发中应避免直接使用print函数日志记录能够更好地管理和调试代码、故障排除以及监控程序的运行状态。Python内置了logging 模块用于创建日志记录器实现灵活的日志记录和输出控制通常将日志直接写入文件输出更加优雅。 2.1 日志简单使用 #!/usr/bin/env python3 # -*-coding:utf-8 -*-import loggingdef get_logger():# 实例化日志对象logger logging.getLogger()logger.setLevel(logging.INFO)ch logging.StreamHandler()formatter logging.Formatter([%(asctime)s] [%(levelname)s] [%(filename)s] [%(funcName)s:%(lineno)d] %(message)s, %Y-%m-%d %H:%M:%S)ch.setFormatter(formatter)logger.addHandler(ch)return loggerlogger get_logger()# [2023-08-18 16:40:07] [INFO] [main.py] [main:27] hello world! logger.info(hello world!)3、进度条的使用 在命令行界面中展示进度条以增强长时间运行的循环、任务或操作的可视化体验。Python的tqdm库可以非常方便地应用于各种迭代操作从文件读写到数据处理都能通过进度条的方式直观地显示进度。 3.1 tqdm方法常用参数 参数含义类型必填备注iterableIterable 用进度条装饰iterable可选可迭代对象total预计迭代的次数int/float可选默认为迭代器的长度ncols整个输出消息的宽度int可选mininterval最小进度显示更新间隔float可选默认0.1sascii进度填充bool可选默认unicode平滑块来填充仪表unit单位str可选默认为itcolor条形颜色str可选initial初始计数器值int/float可选 3.2 trange方法 trange方法是封装了range方法的tqdm, 它会在循环中显示进度条、多用于循环次数固定的情况。 import timefrom tqdm import trangefor _ in trange(10):time.sleep(0.1)3.3 tqdm方法 tqdm是tqdm模块最常用的方法用于在循环中显示进度条。传递一个迭代对象给它然后迭代这个对象会产生一个进度条。 import timefrom tqdm import tqdm from colorama import Fore, Styleiterable [Python, GoLang, Java, JavaScript] progress_bar tqdm(iterable, ncols100, asciiFalse) for element in progress_bar:progress_bar.set_description({}正在处理:{}.format(Fore.LIGHTBLUE_EX, element))time.sleep(0.5)4、测试函数执行时间 Python关于计时比较有代表性的两个库是time和timeit。time库中有time()、perf_counter()以及process_time()三个函数可用来计时以秒为单位加后缀_ns表示以纳秒计时。上述三者的区别如下 time()精度上相对没有那么高而且受系统的影响适合表示日期时间或者大程序的计时。perf_counter()适合小一点的程序测试会计算sleep()时间。process_time()适合小一点的程序测试不计算sleep()时间。 与time库相比timeit 有两个优点 timeit 会根据您的操作系统和 Python 版本选择最佳计时器。timeit 在计时期间会暂时禁用垃圾回收。 4.1 使用time计时 import timedef statistic_cost(func):def wrapper(*args, **kwargs):start_time time.time()result func(*args, **kwargs)cost time.time() - start_timelogger.info(fexecute {func.__name__} cost {cost:.3f} 秒)return resultreturn wrapperdef test():time.sleep(3)if __name__ __main__:test()4.2 使用timeit timeit方法参数:stmt: 需要计时的语句或者函数 setup: 执行stmt之前要运行的代码。通常它用于导入一些模块或声明一些必要的变量。 timer: 计时器函数默认为time.perf_counter()。 number: 执行计时语句的次数默认为一百万次。 globals: 指定执行代码的命名空间。 import time from timeit import timeitdef test():time.sleep(3)if __name__ __main__:cost timeit(test, number1)print(cost)5、使用装饰器缓存 Python支持装饰器缓存在内存中维护特定类型的缓存以实现最佳软件驱动速度使用lru_cache来实现。lru_cache 的性能优势在于重复性高、计算密集型的函数。在一些情况下使用缓存可能会导致额外的内存使用因为缓存会保留一部分函数调用的结果。因此应根据具体情况权衡是否使用缓存。对于需要实时更新或频繁变动的数据lru_cache 并不适用。它适用于那些函数的计算结果在短时间内保持一致的场景。 5.1 缓存简单使用 #!/usr/bin/env python3 # -*-coding:utf-8 -*- # maxsize: 指定缓存中保留的最大函数调用结果数量。当超过数量,最早的结果将被移除,默认为128。 # typed: 如果设置为True,则不同类型的参数会被视为不同的参数。import functoolsfunctools.lru_cache(maxsize128) def fibonacci(n):if n 0:return 0elif n 1:return 1return fibonacci(n - 1) fibonacci(n - 2)# 从获取相同 for _ in range(10):fibonacci(10)5.2 缓存强制刷新 lru_cache函数不支持主动刷新的功能, 缓存的更新是由缓存装饰器内部的缓存策略自动管理的通常是根据函数的参数和调用次数来决定哪些缓存条目会被保留或淘汰。如果需要在特定时刻主动刷新缓存 可以使用cache_clear() 方法强制清除缓存中的所有条目从而让缓存失效下次访问时会重新计算。你可以在数据发生变动时调用此方法。 # 以上面计算斐波那契函数为例# 强制清除缓存 fibonacci.cache_clear()6、单元测试 本文使用unittest编写单元测试 单元测试是软件开发过程中的一个关键环节旨在验证代码中的最小功能单元是否按预期工作。通过编写单元测试你可以有效地发现和修复代码中的错误确保代码在不同情况下都能正确运行。在Python中有多个测试框架可以选择unittest、pytest和nose等。 6.1 单元测试简单使用 6.1.1 编写一个函数用于测试 import functoolsfunctools.lru_cache(maxsize128) def fibonacci(n):if n 0:raise ValueError(Invalid Value)elif n in (0, 1):return nreturn fibonacci(n - 1) fibonacci(n - 2)6.1.2 使用unittest完成测试 import unittestfrom script import main as algclass TestFibonacci(unittest.TestCase):def test_fibonacci(self):output alg.fibonacci(10)self.assertEqual(output, 55)def test_fibonacci_invalid(self):with self.assertRaises(ValueError):alg.fibonacci(-1)if __name__ __main__:unittest.main()6.2.1 模拟对象 模块unittest.mock提供了两个主要的类来进行模拟和断言行为(Mock和MagicMock)Mock通常用于模拟普通方法和属性MagicMock具有更多的魔法方法允许一些特殊的Python行为如迭代上下文管理等返回自身。 对以下函数进行测试 ParserArgs对象在参数接收于校验模块 import time from colorama import Forefrom logger import logger from parser_args import ParserArgsdef launch():args ParserArgs().argslogger.info(finput args: {args.__dict__})iterable [Python, GoLang, Java, JavaScript]progress_bar tqdm(iterable, ncols100, asciiFalse)for element in progress_bar:progress_bar.set_description({}正在处理:{}.format(Fore.LIGHTBLUE_EX, element))return Trueif __name__ __main__:launch()模拟获取参数的行为 替换ParserArgs的参数为mock对象 import argparse import unittest from unittest.mock import patchfrom script import main as algclass TestParserArgs(unittest.TestCase):def setUp(self) - None:self.mock_args argparse.Namespace(name欢颜,datetime2023-05-20 13:14:00,is_worktimeTrue)patch(script.main.ParserArgs)def test_launch(self, mock_parser_args):parser_args_obj mock_parser_args.return_valueparser_args_obj.args self.mock_argsoutput alg.launch()expect Trueself.assertEqual(output, expect)if __name__ __main__:unittest.main()7、包的构建与分发 7.1 打包程序为可执行文件(EXE) 可以使用pyinstaller将单文件应用或多文件应用打包为exe可执行文件需要编译作为程序入口的文件即可。 7.1.1 打包应用程序 pip3 install pyinstaller # pyinstaller -F app.pydef main():print(程序开始执行)if __name__ __main__:main()7.2.2 Pyinstaller常用选项 -h帮助信息-F产生单个的可执行文件-D产生一个目录包含多个文件作为可执行程序-a不包含 Unicode 字符集支持-d产生 debug 版本的可执行文件-w指定程序运行时不显示命令行窗口仅对 Windows 有效-c指定使用命令行窗口运行程序仅对 Windows 有效-o指定 spec 文件的生成目录。如果没有指定则默认使用当前目录来生成 spec 文件-p设置 Python 导入模块的路径-n指定项目名字。如果省略该选项那么第一个脚本的主文件名将作为 spec 的名字 7.2 使用setuptools构建包 7.2.1 创建合适的项目结构 # 一个最简单的项目结构 pkgs/ ├── LICENSE # 许可证文件 ├── main.py # 入口文件 ├── app # 存放子文件等 ├── README.md # 应用文档 └── setup.py # 用于构建、安装和分发包的脚本文件7.2.2 编写setup文件 一个最简单的setup示例 from setuptools import setup, find_packagessetup(namePkgName,version0.1,description描述信息,authorYour Name,packagesfind_packages(),install_requires[# 依赖项列表], )7.2.3 构建包 在项目根目录中运行python setup.py sdist生成源分发包也可以生成二进制分发包bdist_wheel。然后可以将包发布到Python包索引(PyPI)这需要在PyPI上创建一个帐户并使用工具如twine来上传包(twine upload dist/*)。 7.2.4 分发包 您可以通过以下方式分享生成的分发包将其发布到代码托管平台如GitHub上传至内部或外部的PyPI服务器或者使用pip来进行安装包。 小结 编写一个优雅的Python脚本关键在于遵循Python的最佳实践和编码规范(PEP8)以确保代码风格一致性和可读性。使用有意义的命名、拆分代码块成小函数、适度添加注释和文档、合理处理异常、充分利用Python的内置函数和模块、避免滥用全局变量、保持模块化和可重用性、采用测试驱动开发等方法有助于编写出清晰、可维护、优雅的Python脚本提高代码质量和可维护性。以上是笔者开发过程中经常使用的一些小Tips在这里记录分享当然我没还可以使用pandasnumpy等工具处理数据提高脚本执行效率等…
http://www.zqtcl.cn/news/508233/

相关文章:

  • 抚顺网站seo建设网站需要支付什么插件费用吗
  • 东台做淘宝网站电子商务是学什么
  • 建一个购物网站多少钱wordpress托管在哪里
  • 怎么建设免费网站北京最大的火车站
  • 做视频网站被判刑豫建设标 网站
  • 济南网站建设济南wordpress计次查询
  • 做英文小工具网站赚钱商城网站是免费开吗
  • 做网站需要注意的问题seo推广代运营
  • 采购网站大全wordpress decorum
  • wordpress建站教程道一网页效果图素材
  • 广州网站开发哪家专业免费咨询怀孕医生
  • 洛阳网站的优化阿里云购买域名后怎么建网站
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢网站功能模块设计
  • 叫人做网站多少钱百度免费网站怎样建设
  • 本地南通网站建设新手编程入门先学什么
  • asp网站开发的背景与环境久久建筑网会员
  • 河北省住房建设厅官方网站个人计算机做服务器建网站
  • 上海自助建站费用页游网站
  • 浙江省住建厅网站沈阳网站建设专家
  • 基础建设文本网站施工企业在施工过程中发现设计文件和图纸有差错的应当
  • 做互联网交易网站的条件17网站一起做网店揭阳
  • 做公司网站合同asp.net sql server网站建设 pdf
  • 建筑兼职网站天津网站优化公司哪家好
  • 怎么做网站设计商城型网站开发网站建设
  • 建设网站目录帮别人做网站要投资吗
  • 网站meta 优化建议桥梁建设设计网站
  • 网站建设 甘肃wordpress rss去掉
  • 网站安全检测大连网龙建站优化推广
  • 人才网官方网站公众号排名优化软件
  • 淘宝返利网站建设软件开发哪里学好