# magic-python **Repository Path**: menkeyi/magic-python ## Basic Information - **Project Name**: magic-python - **Description**: python 黑魔法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-08-10 - **Last Updated**: 2021-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 
## 在线阅读 在线阅读:[《Python 黑魔法指南》](http://magic.iswbm.com/) ## 目录大纲  (以下链接无效,请前往 PDF 进行阅读) - [第一章:魔法冷知识](#---------) * [1.1 默默无闻的省略号很好用](#11------------) * [1.2 使用 end 来结束代码块](#12----end-------) * [1.3 可直接运行的 zip 包](#13--------zip--) * [1.4 反斜杠的倔强: 不写最后](#14-------------) * [1.5 如何修改解释器提示符](#15-----------) * [1.6 简洁而优雅的链式比较](#16------------) * [1.7 and 和 or 的短路效应](#17-and---or------) * [1.8 连接多个列表最极客的方式](#18-------------) * [1.9 字典居然是可以排序的?](#19------------) * [1.10 哪些情况下不需要续行符?](#110-------------) * [1.11 用户无感知的小整数池](#111-----------) * [1.12 神奇的 intern 机制](#112-----intern---) * [1.13 site-packages和 dist-packages](#113-site-packages--dist-packages) * [1.14 argument 和 parameter 的区别](#114-argument---parameter----) * [1.15 /usr/bin/env python 有什么用?](#115--usr-bin-env-python------) * [1.16 dict() 与 {} 生成空字典有什么区别?](#116-dict-------------------) * [1.17 有趣但没啥用的 import 用法](#117---------import---) * [1.18 正负得正,负负得正](#118----------) * [1.19 return不一定都是函数的终点](#119-return----------) * [1.20 字符串里的缝隙是什么?](#120------------) * [1.21 Python2下 也能使用 print(“”)](#121-python2-------print----) * [1.22 字母也玩起了障眼法](#122----------) * [1.23 数值与字符串的比较](#123----------) * [1.24 时有时无的切片异常](#124----------) * [1.25 迷一样的字符串](#125--------) * [1.26 x 与 +x 等价吗?](#126-x----x-----) * [1.27 += 不等同于=+](#127----------) * [1.28 循环中的局部变量泄露](#128-----------) * [1.29 局部/全局变量傻傻分不清](#129-------------) * [1.30 break /continue 和 上下文管理器哪个优先级高?](#130-break--continue----------------) - [第二章:魔法命令行](#---------) * [2.1 懒人必备技能:使用 “_”](#21--------------) * [2.2 最快查看包搜索路径的方式](#22-------------) * [2.3 使用 json.tool 来格式化 JSON](#23----jsontool------json) * [2.4 命令行式执行 Python 代码](#24--------python---) * [2.5 用调试模式执行脚本](#25----------) * [2.6 如何快速搭建 FTP 服务器](#26--------ftp----) * [2.7 快速构建 HTML 帮助文档](#27------html-----) * [2.8 最正确且优雅的装包方法](#28------------) * [2.9 往 Python Shell 中传入参数](#29---python-shell------) * [2.10 让脚本报错后立即进入调试模式](#210---------------) * [2.11 极简模式执行 Python Shell](#211--------python-shell) * [2.12 在执行任意代码前自动念一段平安经](#212-----------------) * [2.13 启动 Python Shell 前自动执行某脚本](#213----python-shell---------) - [第三章:炫技魔法操作](#----------) * [3.1 八种连接列表的方式](#31----------) + [1、最直观的相加](#1-------) + [2、借助 itertools](#2----itertools) + [3、使用 * 解包](#3--------) + [4、使用 extend](#4----extend) + [5、使用列表推导式](#5--------) + [6、使用 heapq](#6----heapq) + [7、借助魔法方法](#7-------) + [8. 使用 yield from](#8----yield-from) * [3.2 合并字典的 8 种方法](#32-------8----) + [1、最简单的原地更新](#1---------) + [2、先解包再合并字典](#2---------) + [3、借助 itertools](#3----itertools) + [4、借助 ChainMap](#4----chainmap) + [5、使用dict.items() 合并](#5---dictitems-----) + [6、最酷炫的字典解析式](#6----------) + [7、Python 3.9 新特性](#7-python-39----) * [3.3 花式导包的八种方法](#33----------) + [1. 直接 import](#1----import) + [2. 使用 \__import__](#2-------import--) + [3. 使用 importlib 模块](#3----importlib---) + [4. 使用 imp 模块](#4----imp---) + [5. 使用 execfile](#5----execfile) + [6. 使用 exec 执行](#6----exec---) + [7. import_from_github_com](#7-import-from-github-com) + [8、远程导入模块](#8-------) * [3.4 条件语句的七种写法](#34----------) + [第一种:原代码](#-------) + [第二种](#---) + [第三种](#---) + [第四种](#---) + [第五种](#---) + [第六种](#---) + [第七种](#---) * [3.5 判断是否包含子串的七种方法](#35--------------) + [1、使用 in 和 not in](#1----in---not-in) + [2、使用 find 方法](#2----find---) + [3、使用 index 方法](#3----index---) + [4、使用 count 方法](#4----count---) + [5、通过魔法方法](#5-------) + [6、借助 operator](#6----operator) + [7、使用正则匹配](#7-------) * [3.6 海象运算符的三种用法](#36-----------) + [第一个用法:if/else](#------if-else) + [第二个用法:while](#------while) + [第三个用法:推导式](#---------) - [第四章:魔法进阶扫盲](#----------) * [4.1 精通装饰器八大用法](#41----------) + [Hello,装饰器](#hello----) + [入门:日志打印器](#--------) + [入门:时间计时器](#--------) + [进阶:带参数的函数装饰器](#------------) + [高阶:不带参数的类装饰器](#------------) + [高阶:带参数的类装饰器](#-----------) + [使用偏函数与类实现装饰器](#------------) + [如何写能装饰类的装饰器?](#------------) + [wraps 装饰器有啥用?](#wraps--------) * [4.2 深入理解描述符](#42--------) + [为什么要使用描述符?](#----------) + [描述符的访问规则](#--------) + [基于描述符如何实现property](#---------property) + [基于描述符如何实现staticmethod](#---------staticmethod) + [基于描述符如何实现classmethod](#---------classmethod) + [所有实例共享描述符](#---------) * [4.3 精通上下文管理器](#43---------) + [what context manager?](#what-context-manager-) + [how context manager?](#how-context-manager-) + [why context manager?](#why-context-manager-) + [how contextlib?](#how-contextlib-) - [第五章:魔法开发技巧](#----------) * [5.1 嵌套上下文管理的另类写法](#51-------------) * [5.2 将嵌套 for 循环写成单行](#52-----for-------) * [5.3 单行实现 for 死循环如何写?](#53------for--------) * [5.4 如何关闭异常自动关联上下文?](#54---------------) * [5.5 自带的缓存机制不用白不用](#55-------------) * [5.6 如何流式读取数G超大文件](#56--------g----) * [5.7 实现类似 defer 的延迟调用](#57------defer------) * [5.8 如何快速计算函数运行时间](#58-------------) * [5.9 重定向标准输出到日志](#59-----------) * [5.10 快速定位错误进入调试模式](#510-------------) * [5.11 在程序退出前执行代码的技巧](#511--------------) * [5.12 逗号也有它的独特用法](#512-----------) * [5.13 如何在运行状态查看源代码?](#513--------------) * [5.14 少为人知的重试机制](#514----------) * [5.15 让我爱不释手的用户环境](#515------------) * [5.16 字符串的分割技巧](#516---------) * [5.17 反转字符串/列表最优雅的方式](#517---------------) * [5.18 如何将 print 内容输出到文件](#518------print--------) * [5.19 改变默认递归次数限制](#519-----------) * [5.20 让你晕头转向的 else 用法](#520---------else---) * [5.21 单分派泛函数如何写?](#521-----------) - [第六章:良好编码习惯](#----------) * [6.1 不要直接调用类的私有方法](#61-------------) * [6.2 默认参数最好不为可变对象](#62-------------) * [6.3 增量赋值的性能更好](#63----------) * [6.4 别再使用 pprint 打印了](#64------pprint----) + [1. 吐槽问题](#1-----) + [2. 解决问题](#2-----) - [打印中文](#----) - [打印双引号](#-----) + [3. 何必折腾](#3-----) - [打印中文](#-----1) + [4. 总结一下](#4-----) - [第七章:神奇的魔法模块](#-----------) * [7.1 远程登陆服务器的最佳利器](#71-------------) + [1. 使用 subprocess](#1----subprocess) + [2. 使用 sh.ssh](#2----shssh) + [3. 使用 paramiko](#3----paramiko) - [方法1:基于用户名和密码的 sshclient 方式登录](#--1-----------sshclient-----) - [方法2:基于用户名和密码的 transport 方式登录](#--2-----------transport-----) - [方法3:基于公钥密钥的 SSHClient 方式登录](#--3---------sshclient-----) - [方法4:基于密钥的 Transport 方式登录](#--4-------transport-----) - [实现 sftp 文件传输](#---sftp-----) - [注意事项](#----) + [4. 写在最后](#4-----) * [7.2 代码 BUG 变得酷炫的利器](#72----bug--------) + [1. 环境要求](#1-----) + [2. 效果对比](#2-----) + [3. 配置全局可用](#3-------) + [4. 单文件中使用](#4-------) + [5. 自定义设置](#5------) - [5.1 设置颜色](#51-----) - [5.2 设置显示内容](#52-------) - [5.3 设置怎么显示](#53-------) * [7.3 少有人知的 Python "重试机制"](#73-------python-------) + [最基本的重试](#----------) + [设置停止基本条件](#--------) + [设置何时进行重试](#--------) + [重试后错误重新抛出](#---------) + [设置回调函数](#------) 