IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python彩蛋源码分析(二) -> 正文阅读

[Python知识库]Python彩蛋源码分析(二)

简介👾

非常高兴大家能够订阅这个专栏,在这里我将会给大家分享一些Python相关源码的剖析
在接下来的这段日子里,我会一同带各位pythonista探索Python的奥秘


hello world 👾

hello world, hello python, hello golang等等也许是你的第一行代码
__hello__是一个冻结模块,作为冻结模块支持的一个测试样例
source code link

$ python -c "import __hello__"
Hello world!
$ ipython                                          
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:
Type 'copyright', 'credits' or 'license' for more i
IPython 7.27.0 -- An enhanced Interactive Python. T
                                                   
In [1]: import __hello__                           
Hello world!                                       
In [2]: import __hello__   # 一个模块只会被导入一次,所以不会打印hello world                   
In [3]: __hello__.initialized                      
Out[3]: True                                       
In [4]: __hello__                                  
Out[4]: <module '__hello__' (frozen)>              
In [5]: help(__hello__)                            
Help on module __hello__:                          
                                                   
NAME                                               
    __hello__                                      
                                                   
DATA                                               
    initialized = True                             
                                                   
FILE                                               
    (built-in)                                     
In [6]: dir(__hello__)                             
Out[6]:                                            
['__builtins__',                                   
 '__doc__',                                        
 '__loader__',                                     
 '__name__',                                       
 '__package__',                                    
 '__spec__',                                       
 'initialized']                                    
In [7]: __hello__.__doc__                          
In [8]: import __phello__                          
Hello world!                                       
In [9]: import __phello__                          
In [10]: __phello__                                
Out[10]: <module '__phello__' (frozen)>            
In [11]: quit

在Unix系统中生成frozen程序参考如下
Freeze Utility


braces(花括号)👾

对于大多数语言,使用的是{}, 而Python是以缩进来代替
如果想要使用{}的话,不可能!

$ ipython
In [1]: from __future__ import braces
  File "<ipython-input-1-6d5c5b2f0daf>", line 1
    from __future__ import braces
    ^
SyntaxError: not a chance

Uncle Barry(尖括号) 👾

在Python的演进中, 有不等式运算符!=和<>的争论, !=获胜,以避免歧义并且提高可读性
Barry Warsaw成为了FLUFL(Friendly Language Uncle For Life)
你可以使用此语句from future import barry_as_FLUFL用<>作为不等运算符
这明显是个愚蠢的决定, 可以看看2009/04/01的PEP
PEP 401

$ ipython
In [1]: 1 != 1
Out[1]: False
In [2]: from __future__ import barry_as_FLUFL
In [3]: 1 != 1
  File "<ipython-input-3-a91d0d3dd7a4>", line 1
    1 != 1
      ^
SyntaxError: with Barry as BDFL, use '<>' instead of '!='
In [4]: 1 <> 1
Out[4]: False

Hash(哈希)👾

正无穷和负无穷的哈希
可以看到正无穷和负无穷的哈希(±10^5 x pi)与314159哈希冲突了
python中万物皆对象, 相同的哈希也可能是不同的对象

$ ipython
In [1]: import sys
In [2]: sys.float_info.max
Out[2]: 1.7976931348623157e+308
In [3]: hash(float('inf')) # hash(float('infinity')) 
Out[3]: 314159
In [4]: hash(float('nan')) # hash(float('-inf')) 或 hash(float('-infinity')) 
Out[4]: 0
In [5]: hash(31419), hash(0)
Out[5]: (31419, 0)

__peg_parser__(关键字)👾

__peg_parser__是python 3.9的一个关键字,使用会抛出SyntaxError

$ ipython
In [1]: import keyword
In [2]: keyword.iskeyword("__peg_parser__")
Out[2]: True
In [3]: keyword.kwlist
Out[3]:
['False',
 'None',
 'True',
 '__peg_parser__',
 'and',
 'as',
 'assert',
 'async',
 'await',
 'break',
 'class',
 'continue',
 'def',
 'del',
 'elif',
 'else',
 'except',
 'finally',
 'for',
 'from',
 'global',
 'if',
 'import',
 'in',
 'is',
 'lambda',
 'nonlocal',
 'not',
 'or',
 'pass',
 'raise',
 'return',
 'try',
 'while',
 'with',
 'yield']
In [4]: len(keyword.kwlist)
Out[4]: 36
In [5]: __peg_parser__
  File "<ipython-input-5-367c45f0f1f4>", line 1
    __peg_parser__
    ^
SyntaxError: You found it!

antigravity(抗重力)👾
  • antigravity👾

如下将会重定向你到xkcd 353

# import webbrowser
# webbrowser.open("https://xkcd.com/353/")
import antigravity

webbrowser模块是一个启动和远程控制浏览器的接口
在接下来的内置库(为了方便起见,我不在区分模块和库,接下来都是称之为模块)源码分析中会讲解到


  • geohashing👾

作为一个户外探险的游戏, 参与者可以到达一个随机的位置(GPS信息), 然后讲述旅行故事
geohashing 有游戏的详细描述
xkcd 426 使用漫画的形式来说明了此算法的原理

$ ipython
In [1]: from antigravity import geohash
In [2]: geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
37.857713 -122.544543

源码如下:

import hashlib

def geohash(latitude, longitude, datedow):
    '''Compute geohash() using the Munroe algorithm.

    >>> geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
    37.857713 -122.544543

    '''
    # https://xkcd.com/426/
    # 这里的False表示md5消息摘要没有在安全的上下文中使用
    h = hashlib.md5(datedow, usedforsecurity=False).hexdigest()
    p, q = [('%f' % float.fromhex('0.' + x)) for x in (h[:16], h[16:32])]
    print('%d%s %d%s' % (latitude, p[1:], longitude, q[1:]))

原理漫画图

上图显示将输入的字节序列也就是日期加道格拉斯指数用md5生成128位(32个十六进制数字表示)字符串
float.fromhex(argx)可以返回由十六进制字符串s表示的浮点数
(h[:16], h[16:32])将h分成了两半
'%f’没有给定精度会保留小数点后6位
%s是十进制整数类型, 以10为底的数字
输出经纬度的整数部分%d: 输入的经纬度整数部分分别组成
输出经纬度的小数部分%s: 是由p和q的小数部分分别组成的


结束语👾

如果有什么不足的地方,请在下方留言
我是江湖狗哥,我们下期再见

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:39:24  更:2022-02-09 20:40:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:26:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码