點擊網頁特效
上周寫了一篇文章快速搭建個人博客的教程文章:
其中說到了一個點擊網頁出現愛心特效的插件 click_heart.js ,當然大家可能也見過其他博客上面,有點擊網頁出現類似 富強、民主、文明、和諧等等,關于代碼在這里不多贅述,網上一查就能查到。代碼如下:
/*鼠標點擊出現文字*/
$(document).ready(function () {
var a_index = 0;
$("body").click(function (e) {
var a = new Array("富強", "民主", "文明", "和諧", "自由", "平等", "公正", "法治", "愛國", "敬業", "誠信", "友善");
var $i = $("").text(a[a_index]);
a_index = (a_index + 1) % a.length;
var x = e.pageX, y = e.pageY;
$i.css({
"z-index": 99999,
"top": y - 20,
"left": x,
"position": "absolute",
"font-weight": "bold",
"font-size": "12px",
"color": "#ff6651"
});
$("body").append($i);
$i.animate({"top": y - 180, "opacity": 0}, 1500, function () {
$i.remove();
});
});
});
div {
width: 200px;
height: 200px;
margin: 0 auto;
background-color: rgba(133, 132, 132, .2);
text-align: center;
}
使用效果如下:
點擊特效
那么,既然周末閑來無事,不如給自己找點樂子吧!
獲取Python模塊
如何快速獲取電腦已安裝的Python模塊呢?方法有很多:
打開cmd,輸入python進入python命令行,然后輸入help("modules")
命令行查看模塊
通過代碼查詢Python內置的模塊
import sys
sys.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 安裝過的所有模塊
查看pip安裝的模塊
冷門知識點
這里介紹一個冷門知識點,可能面試的時候,遇到坑人的面試官會用到哦,大家可要記好了。
在剛才我們打印的內置模塊中,有很多是_開頭的模塊,這些是干嘛的,你知道嗎?
大家了解我們日常學習的Python其實最廣泛是通過C語言實現的Python解釋器,即Cpython,當然還有Jpython、ironpython等等。那么這些下劃線開頭的模塊,絕大多數都是代表這個模塊時通過C語言編寫的擴展,然后編譯到Python中的,所以這些模塊其實是一個連接庫,并不是.py文件。
當然他們編譯后的存儲也是有所不同的,有些作為內置的Builtin,而有些作為文件保存。即便是作為文件,名稱也是有所不同的,在windows下他們可能叫xxx.pyd,而在Linux下他們絕大多數是xxx.so文件。
比如Python自帶的GUI模塊tkinter,讓我們看看下面這段代碼輸出:
import _tkinter
print(_tkinter.__file__)
# E:\Software\Python37\DLLs\_tkinter.pyd
這么冷門的知識,大家學廢了么,以后關鍵時刻裝X就靠它了!
代碼獲取pip安裝的模塊
回歸我們頁面點擊的正題,既然我們是Python博客,那么什么點擊愛心和標語明顯不適合我們,讓用戶點擊出現Python的模塊豈不是很贊?說干就干走起。
剛才我們看到,上面那段js,顯示的內容都在那段Array內,我們只需要準備好那一堆字符串即可,但是我們如果只導入sys.modules,那僅僅能獲取系統內置的所有模塊,我們安裝的模塊該如何獲取呢?
難道只能用subprocess 執行pip list命令解析結果?這里找了很多資料,研究結果如下:
# python2
import pip
pip.get_installed_distributions()
# python3 版本get_installed_distributions方法藏得很深
from pip._internal.utils.misc import get_installed_distributions
get_installed_distributions()
# 最終代碼:
from pip._internal.utils.misc import get_installed_distributions
for 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.py
import 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_distributions
for 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中,然后驗證下效果,來看看鋼琴手卡爾的點擊速度吧,哈哈:
Python模塊點擊特效
我們把這樣的點擊特效放到自己博客上,才能算是Pythoner該有的樣子啊!大家覺得有道理嗎?哈哈...
我的博客特效已更新,快去訪問點擊玩玩吧:
清風Python的個人博客: https://qingfengpython.cn/!
結束語
最近創建了一個清風Python資源分享與學習交流群,喜歡的朋友加我微信,我拉你入群。那些微商和為了進群發廣告的就別自討無趣了,群內禁止推文與發廣告,發現必踢!
期待你關注我的公眾號清風Python,如果你覺得不錯,希望能動動手指轉發給你身邊的朋友們。
我的個人博客地址:https://qingfengpython.cn/