python 黑魔法

1.6

False == False == True
False == False and False == True

pass --> …

1.7

or 都为真,返回第一个值
and 都为真,返回第二个值

1.8

sum((a,b,c), [])多表连接

1.9

python3.6 后字典有序,并且字典效率提升

1.11

python中小整数池,[-5,256]

a = 257;b =257 同行赋值区别

1.12

字符串驻留

1.13

from distutils.sysconfig import get_python_lib
print(get_python_lib())

1.15

#!/usr/bin/env python
#!/usr/bin/python

当这个文件有可执行权限,可以./直接执行

1.16

{} ,dict(),第二种调用有函数进出栈,会慢一些

1.19

finally 和 return 之间
finally下有return 优先执行,并且使得try中的return无效,
finally下无return try中的return生效

1.20

字符串之间的缝隙”“

1.27

# =+
>>> a = [1, 2, 3, 4]
>>> b = a
>>> a = a + [5, 6, 7, 8]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>> b
[1, 2, 3, 4]
# +=
>>> a = [1, 2, 3, 4]
>>> b = a
>>> a += [5, 6, 7, 8]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>> b
[1, 2, 3, 4, 5, 6, 7, 8]

+= 就地改变,相当于extend;a+[]相当于返回新表

1.30

continue 和break 在遇到上下文管理器优先执行object.__enter__()object.__exit__() ,保证资源释放

2.2查看python包路径

python3 -m site
print(sys.path)

2.3json美化查看

python -m json.tool demo.json

2.6快速FTP服务器

目前测试在linux下可用

python -m SimpleHTTPServer 8888
python3 -m http.server 8888

2.7python文档离线网页

python -m pydoc -p 5200

2.8

多版本Python pip下载包的时候,使用python+版本号 -m 来指定到不同的包目录下

$ python -m pip install requests
$ python3 -m pip install requests
$ python3.8 -m pip install requests
$ python3.9 -m pip install requests

5

多层级列表推导式

>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> [x for l in (list01, list02, list03) for x in l]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

6heapq

堆排序,对list01、list02和list03中的元素同时排序

>>> from heapq import merge
>>> list(merge(list01, list02, list03))

3.2

字典合并

profile ={"name":"lzf","age":27}
ext_info = {"gender":"male"}full_dict = {**profile,**ext_info}{k:v for d in [profile, ext_info] for k,v in d.items()}3.9后
profile | ext_info   new_dict
ext_info |= profile  就地修改

6exec

>>> with open("/usr/lib64/python2.7/os.py", "r") as f:
... exec(f.read())
...
>>> getcwd()
'/home/wangbm执行其他文件代码

3.4

<on_true> if <condition> else <on_false>
<condition> and <on_true> or <on_false>

3.6海象

3.8版本后才有海象

if (age:= 20) > 18:print("成年了")
文件读取
file = open("demo.txt", "r")
while (line := file.readline()):print(line.strip())
密码校验
while (p := input("Enter the password: ")) != "youpassword":continue

4.1装饰器

logging 模块原型

class Logger():def __init__(self,func):self.func = funcdef __call__(self,*args,**kwargs):print(f"[Info]: function {self.func.__name__} is running...")return self.func(*args,**kwargs)

设计一个单例
Python中的单例模式的几种实现方式的及优化 - 听风。 - 博客园 (cnblogs.com)

"""
python 单例模式"""instances = {}def singleton(cls):def get_instance(*args, **kwargs):cls_name = cls.__name__if cls_name not in instances:instances[cls_name] = cls(*args, **kwargs)return instances[cls_name]return get_instance@singleton
class User:def __init__(self, name):self.name = nameif __name__ == '__main__':u1 = User("lll")u1.age = 2print(u1.age)

设计类时
使用__slots__进行类属性限制,使用装饰器@property进行修改类属性限制
防止用户为类添加其他属性,或者将某个属性设置成非预期的值

4.2访问描述符

数据描述符 实现了__ get __ 和__ set __ 两种
非数据描述符 只实现__ get __

相关的property、staticmethod、classmethod都是对__ get __ 和__ set __进行的改写
如果实例字典中有与描述符同名的属性,如果描述器是数据描述器,优先使用;如果是非数据描述器,则优先实例字典

obj.__dict__   type(obj).__dict__  type(obj)父类.__dict__

4.3上下文管理器

1.with open('test.txt') as f:  #上下文表达式
2.open('test.txt') #上下文管理器

也是就 __ enter __ 和 __ exit __ 的实现

with 也会帮助捕获代码中的异常,在其退出的时候会返回参数exc_type 、exc_val、exc_tb的异常信息

mport contextlib
@contextlib.contextmanager
def open_func(file_name):# __enter___print('open file:', file_name, 'in __enter__')file_handler = open(file_name, 'r')# ̓yieldyield file_handler# __exit__print('close file:', file_name, 'in __exit__')file_handler.close()return
with open_func('/Users/MING/mytest.txt') as file_in:for line in file_in:print(line)

5.5自带缓存

适用于3.2+ 以后

from functools import lru_cache@lru_cache(None)
def add(x, y):print("calculating: %s + %s" % (x, y))return x + yprint(add(1, 2))
print(add(1, 2))#直接调用结果
print(add(2, 3))
print(add(1, 2))

只会在内存溢出的时候被释放,设置参数max_size

5.6 流式读取大文件

from functools import partialdef read_from_file(f_name, block_size=1024 * 8):with open(f_name, "rb") as fp:while True:chunk = fp.read(block_size)if not chunk:breakyield chunkdef read_from_file01(f_name, block_size=1024 * 8):#通过设置block_size 来控制读取的大小with open(f_name, "rb") as fp:for chunk in iter(partial(fp.read, block_size), b''):  # 如果iterator的_next_() 等于 b”“,则会stopiteration# if not chunk:#     breakyield chunkif __name__ == '__main__':content = read_from_file01("test_file.txt")print(content)for i in content:print(i)

5.7 defer延迟调用

golang 中的defer 能在外部函数返回后,再执行内部函数。称为延迟调用

import "fmt"
func myfunc() {fmt.Println("B")
}
func main() {defer myfunc()fmt.Println("A")
}

在python中使用上下文管理器来实现延迟调用

5.9重定向标准输出到日志

"""
只会在Linux下生效
将程序中的标准输出记录为日志
"""import contextlib
import syslog_file = "./my_log"def you_task():print("good")pass@contextlib.contextmanager
def close_stdout():raw_stdout = sys.stdoutf = open(log_file, "a+")sys.stdout = fyieldsys.stdout = raw_stdoutf.close()with close_stdout():you_task()

5.11 程序退出后执行

atexit.register(clean_1, ݇1, ݇2, ݇3='xxx')
import atexit
@atexit.register
def clean():print("do some clean")def main():1/0main()

局限

1.程序是被你没有处理过的信号杀死,无法执行

2.严重的python内部错误,无法执行

3.手动调用os._exit(),无法执行

5.13

通过程序查询源码

improt inspect
def addd(x,y):retrn x + yprint(inspect.getsource(addd))

5.14重试

from tenacity import retry
@retry()
@retry(wait=wait_fixed(2))
@retry(stop=stop_after_attempt(7))
@retry(stop=stop_after_delay(10))
@retry(stop=(stop_after_delay(10) | stop_after_attempt(7)))
@retry(retry=retry_if_exception_type(exceptions.Timeout))
@retry(stop=stop_after_attempt(3),retry=retry_if_result(is_false))
@retry(stop=stop_after_attempt(7), reraise=True)
@retry(stop=stop_after_attempt(3),retry_error_callback=return_last_value,retry=retry_if_result(is_false))
def test_retry():print("重试")raise Exception #出现错误进行重试
test_retry()

5.20 else的用法

for else 当for没有被beak,则执行else

try else 当try没有捕获到异常,则执行else

5.21单分派函数

PEP 443 – Single-dispatch generic functions | peps.python.org

单分派函数:根据第一个函数入参的不同类型,来选择不通的调用函数
多分派函数:根据多个参数的类型专门选择函数的行为
泛函数:多个函数绑在一起组合成一个泛函数

from functools import singledispatch@singledispatch
def age(obj):print('请输入合法参数')@age.register(int)
def _(age):print('我已经{}了'.format(age))@age.register(str)
def _(age):print('I am {} years old.'.format(age))age(23)  # int
age('twenty three')  # str
age(['23'])  # list

6.1 不要直接调用私有方法

如果想调用

ins._class__fun()

6.2 默认参数

可变,默认,关键字

函数的默认参数不应该为可变参数,如下item_list默认值为列表对象

def func(item, item_list=[]):item_list.append(item)print(item_list)
func('iphone')
func('xiaomi', item_list=['oppo','vivo'])
func('huawei')
第一次调用 将iphone 放入新建列表1 输出iphone
第二次调用  新建列表2其中有oppo和vivo,再将xiaomi放入列表2
第三次调用 函数直接找到默认列表1 位置,将huawei放入

在函数第一次初始化的def的时候,先生成这个默认参数为可变对象的内存地址,这个默认参数将与这个地址绑定。接下来如果默认参数有新值,则使用新的地址(列表2);无新值,则仍然使用原来的地址(列表1)

6.3 增量运算符号

+= 背后的魔法方法是 __iadd__,如果没有实现这个方法则会退而求其次使用 __add__

7.1python lib

python常用热度比较高的库
GitHub - iswbm/awesome-python-cn: Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由伯乐在线持续更新。

paramiko ssh连接库

python技巧 黑魔法指南笔记相关推荐

  1. Django企业开发实战 高效Python Web框架指南 笔记 (一)

    Django企业开发实战 高效Python Web框架指南 笔记 (一) 内容: 作者是 the5fire,他的博客地址:https://www.the5fire.com/957.html 2016年 ...

  2. Google内部 Python 代码风格指南(中文版)

    文末有干货 "Python高校",马上关注 真爱,请置顶或星标 这是一位大佬翻译的Google Python代码风格指南,很全面.可以作为公司的code review 标准,也可以 ...

  3. python 编写实用小工具-toy: python平时积累的笔记以及编写的小工具

    所有人都告诉你怎么活,只有自己没有搞清楚该如何活.相信自己,我们每个人都是主角?? toy Python ?? 献给我亲爱的女朋友--如 ? 介绍 学习 python.matlab 时积累的笔记以及编 ...

  4. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  5. 《Python编程初学者指南》——1.6 回到Game Over程序

    本节书摘来自异步社区<Python编程初学者指南>一书中的第1章,第1.6节,作者[美]Michael Dawson,王金兰 译,更多章节内容可以访问云栖社区"异步社区" ...

  6. python新手入门讲解-这是大多数新手入门之后强烈推荐的python自学入门指南秘笈...

    人工智能的时代,是时候该学学python了. 对于初学者而言,在选择合适的入门语言是至少需要考虑两点: 是否能适用于构建你想要的应用.如果你的目标是创建一个运行在IPhone上的APP,那么最好选择 ...

  7. python入门基础代码图-python入门代码指南教程书籍推荐2020总结全集汇总

    python入门代码指南教程书籍推荐2020总结全集汇总 记住,如果您想学习Python,市场上有很多可用的资源.这些可以包括书籍,甚至在线课程..在这篇文章中,我们为Python编写了最好的书籍,无 ...

  8. Spark编程指南笔记

    Spark编程指南笔记 标签: spark 编程 笔记 | 发表时间:2015-02-02 16:00 | 作者: 分享到: 出处:http://blog.javachen.com/rss.xml 本 ...

  9. aws python库_适用于Alexa的新AWS Python SDK入门指南

    aws python库 by Ralu Bolovan 由Ralu Bolovan 适用于Alexa的新AWS Python SDK入门指南 (A Beginner's guide to the ne ...

最新文章

  1. static关键字用法
  2. SegmentFault Hackathon 2018 火热登场,Let's hack!
  3. 两种方法判断有向图是否有环【DFS】【拓扑排序】
  4. 深度学习项目-人群密度估计
  5. 深度学习人体姿态估计:2014-2020全面调研
  6. 完全使用linux工作 pdf下载,完全用Linux工作-计算机.pdf
  7. JPA(五):映射关联关系------映射单向多对一的关联关系
  8. python短视频教程_Python技巧:10万+的短视频被批量生产了,Python表示不服
  9. PLC的当前状态,电气工程师建议看完,进阶上位机编程
  10. 用VC进行64位编程
  11. KT148A语音芯片怎么烧录语音进入芯片里面通过串口和电脑端的工具
  12. K8s预选策略和优选函数简介
  13. C语言动态内存开辟详解(malloc,calloc,realloc,free,柔型数组)
  14. 华为服务器在哪里看型号,服务器型号怎么看
  15. 第三篇 树莓派的串口通信和语音识别模块
  16. 无MAC法安装genymotion的解决办法_Invalid reply from server..
  17. 淘宝4位数七段显示器模块 (74HC595)
  18. 四叉树 java 实现
  19. 计算机毕业设计Java高校多媒体设备报修管理系统(源码+系统+mysql数据库+lw文档)
  20. oracle到kdb迁移,DB2迁移到K-DB最佳实践

热门文章

  1. 深入理解Golang中的Context包
  2. android虚拟手柄摇杆的实现
  3. Google Play游戏服务入门
  4. 腾讯地图android,手机腾讯地图
  5. 服务器磁盘显示RAW,高手解决u盘盘符打不开、变成RAW分区有妙招
  6. 计算机教室管理使用标准,计算机教室管理标准制度.doc
  7. Python时间差计算
  8. Joinquant 指数10大持仓等比买入
  9. Spring DI详解
  10. iPhone上Siri无法正常回应如何解决?