点击网页特效
上周写了一篇文章快速搭建个人博客的教程文章:
其中说到了一个点击网页出现爱心特效的插件 click_heart.js ,当然大家可能也见过其他博客上面,有点击网页出现类似 富强、民主、文明、和谐等等,关于代码在这里不多赘述,网上一查就能查到。代码如下:
使用效果如下:
![](https://img-blog.csdnimg.cn/img_convert/5f2a794f6068738587aefe3f1b4c0e0c.gif)
那么,既然周末闲来无事,不如给自己找点乐子吧!
获取Python模块
如何快速获取电脑已安装的Python模块呢?方法有很多:
- 打开cmd,输入python进入python命令行,然后输入
help("modules")
![](https://img-blog.csdnimg.cn/img_convert/25bc65b1d798f602acfd98e9c03e0412.png)
- 通过代码查询Python内置的模块
import syssys.modules.keys()# dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'encodings', 'codecs', '_codecs', 'encodings.aliases', ...
- 输入
pip list
可以查看通过pip 安装过的所有模块
![](https://img-blog.csdnimg.cn/img_convert/9c9ba7d8c0f5c4f7c0f6f9c61484bd33.png)
冷门知识点
这里介绍一个冷门知识点,可能面试的时候,遇到坑人的面试官会用到哦,大家可要记好了。
在刚才我们打印的内置模块中,有很多是_开头的模块,这些是干嘛的,你知道吗?
大家了解我们日常学习的Python其实最广泛是通过C语言实现的Python解释器,即Cpython,当然还有Jpython、ironpython等等。那么这些下划线开头的模块,绝大多数都是代表这个模块时通过C语言编写的扩展,然后编译到Python中的,所以这些模块其实是一个连接库,并不是.py文件。
当然他们编译后的存储也是有所不同的,有些作为内置的Builtin,而有些作为文件保存。即便是作为文件,名称也是有所不同的,在windows下他们可能叫xxx.pyd,而在Linux下他们绝大多数是xxx.so文件。
比如Python自带的GUI模块tkinter,让我们看看下面这段代码输出:
import _tkinterprint(_tkinter.__file__)# E:\Software\Python37\DLLs\_tkinter.pyd
这么冷门的知识,大家学废了么,以后关键时刻装X就靠它了!
代码获取pip安装的模块
回归我们页面点击的正题,既然我们是Python博客,那么什么点击爱心和标语明显不适合我们,让用户点击出现Python的模块岂不是很赞?说干就干走起。
刚才我们看到,上面那段js,显示的内容都在那段Array内,我们只需要准备好那一堆字符串即可,但是我们如果只导入sys.modules,那仅仅能获取系统内置的所有模块,我们安装的模块该如何获取呢?
难道只能用subprocess 执行pip list
命令解析结果?这里找了很多资料,研究结果如下:
# python2import pippip.get_installed_distributions()# python3 版本get_installed_distributions方法藏得很深from pip._internal.utils.misc import get_installed_distributionsget_installed_distributions()# 最终代码:from pip._internal.utils.misc import get_installed_distributionsfor module_name in get_installed_distributions(): print(module_name.key)# output: -ip you-get wtforms werkzeug webassets watchdog urllib3 texttable sqlalchem ...
获取全量模块
既然能得到内部模块+pip安装的模块,那么我们追加两者的结果就可以获取我们本机所有安装的模块了。但是这里有一个小坑
一定要等我们sys.modules数据获取完成后,再导入pip否则会将pip的子类全部追加到modules中去!
最终代码如下:
# -*- coding: utf-8 -*-# @Author : 王翔# @微信号 : King_Uranus# @公众号 : 清风Python# @GitHub : https://github.com/BreezePython# @Date : 2021/01/09 23:54:47# @Software : PyCharm# @version :Python 3.7.3# @File : click_modules.pyimport sys# 提供我们将模块列表转化为字符串所需import json# from pip._internal.utils.misc import get_installed_distributions# 过滤掉那些 _开头的C语言链接库modules = [name for name in sys.modules if not name.startswith('_')]print(len(modules)) # 53个# 等待获取完成后再导入pip,否则内置模块编程了177个from pip._internal.utils.misc import get_installed_distributionsfor module_name in get_installed_distributions(): modules.append(module_name.key)print(len(modules)) # 还以为自己用了很多,原来全量才135个啊...print(json.dumps(sorted(modules))) # output: # ["-ip", "abc", "alabaster", "alembic", "altgraph", "babel", "baidu-aip", "blinker", "builtins", "certifi", "chardet", "click", "codecs", "collections", "colorama", "commonmark", "contextlib", "copyreg", "cssmin", "docutils", "encodings", "encodings.aliases", "encodings.gbk", "encodings.latin_1", "encodings.utf_8", "enum", "flask", "flask-assets", "flask-caching", "flask-ckeditor", "flask-debugtoolbar", "flask-dropzone", "flask-mail", "flask-migrate", "flask-sqlalchemy", "flask-wtf", "functools", "future", "genericpath", "heapq", "idna", "imageio", "imagesize", "importlib", "importlib._bootstrap", "importlib._bootstrap_external", "importlib.abc", "importlib.machinery", "importlib.util", "install", "io", "itertools", "itsdangerous", "jinja2", "jsmin", "json", "json.decoder", "json.encoder", "json.scanner", "keyboard", "keyword", "linecache", "lxml", "mako", "markupsafe", "marshal", "myqr", "nt", "ntpath", "numpy", "operator", "os", "os.path", "packaging", "pathtools", "pefile", "pillow", "pip", "py7zr", "pycryptodome", "pyfiglet", "pygments", "pyinstaller", "pyparsing", "python-dateutil", "python-dotenv", "python-editor", "python-http-client", "pytz", "pywin32-ctypes", "pyyaml", "pyzbar", "re", "recommonmark", "redis", "reprlib", "requests", "ruamel", "ruamel.yaml", "ruamel.yaml.clib", "sendgrid", "setuptools", "site", "sitecustomize", "six", "snowballstemmer", "sphinx", "sphinx-rtd-theme", "sphinxcontrib", "sphinxcontrib-applehelp", "sphinxcontrib-devhelp", "sphinxcontrib-htmlhelp", "sphinxcontrib-jsmath", "sphinxcontrib-qthelp", "sphinxcontrib-serializinghtml", "sqlalchemy", "sre_compile", "sre_constants", "sre_parse", "stat", "sys", "texttable", "token", "tokenize", "traceback", "types", "urllib3", "warnings", "watchdog", "webassets", "werkzeug", "winreg", "wtforms", "you-get", "zipimport"]
简单几行代码,完成我们的模块导出诉求。现在把这些模块,添加当刚才的js中,然后验证下效果,来看看钢琴手卡尔的点击速度吧,哈哈:
![](https://img-blog.csdnimg.cn/img_convert/6d2e3ff4ae73f5a30a68e9d75da61159.gif)
我们把这样的点击特效放到自己博客上,才能算是Pythoner该有的样子啊!大家觉得有道理吗?哈哈...
我的博客特效已更新,快去访问点击玩玩吧:清风Python的个人博客: !结束语
最近创建了一个清风Python资源分享与学习交流群,喜欢的朋友加我微信,我拉你入群。那些微商和为了进群发广告的就别自讨无趣了,群内禁止推文与发广告,发现必踢!
期待你关注我的公众号清风Python
,如果你觉得不错,希望能动动手指转发给你身边的朋友们。 我的个人博客地址: