python
文章平均质量分 86
zhouguoqionghai
这个作者很懒,什么都没留下…
展开
-
通过函数名称字符串发起调用/函数名反射
python在 python 当中,一切都是对象。函数也是第一等公民。如果要使用函数名称字符串发起调用,目标在于通过字符串找到函数对象。函数```pythondef func(a): print("global function func", a)```显示的从全局命名空间中查找python 当中,全局的命名空间可使用内置函数`global`获取。```pythonglobals()["func"](3)```使用内置的解释器脚本语言都是解释执行,而且一般...原创 2021-12-03 17:47:09 · 1378 阅读 · 0 评论 -
mycli 启动 UnicodeDecodeError 及运行时 WinError 995 问题
mycli 是一个 python 写的功能强大的 mysql 命令行补全工具,交互体验类似 ipython 或者 jupyter。项目在这里.直接使用 pip 来安装即可,pip install mycli.安装完毕运行报错。UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa8 in position 52: invalid start byte报错的调用栈如上。报错的部分是 configobj 模块,遇到编码问题。configobj原创 2021-04-22 09:16:49 · 663 阅读 · 10 评论 -
python 中 fcntl, ioctl 值结果参数
python 标准库中包含一些 Linux 系列的专有服务 模块,fcntl 就是其中一个。本文讨论的 fcntl 和 ioctl 的 python 包装函数都包含在这个模块当中。fcntl 获取操作fcntl 的函数 C 原型如下,《Linux/Unix系统编程手册》5.2 节有介绍。fcntl 对于大多数操作来说,从返回值中就能获取结果;只有少部分需要值结果参数来完成功能。int fcntl(int fd, int cmd, ... /* arg */ );python 原型如下 fcntl原创 2021-02-20 14:00:46 · 1843 阅读 · 1 评论 -
blocking socket 读写返回 EAGAIN
非阻塞的 socket 读写操作返回 EAGAIN,表示当前已经读完内核缓冲区或者写满内核缓冲区,需要等待下一次 select/poll/epoll 事件到来时再操作。对于阻塞的 socket 读写操作,如果内核缓冲区是空,read 将一直阻塞;如果不能一下全部写入用户态缓冲区的所有数据,write 将阻塞。原以为对于阻塞的 socket,如果设置超时时间,读操作内核缓冲区为空或写操作内核缓冲区已满,返回的是 ETIMEDOUT,原来返回的也是 EAGAIN.内核缓冲区还有 4 个字节的剩余空间,那原创 2020-05-27 12:51:37 · 841 阅读 · 1 评论 -
ctypes 指针类型 byref pointer POINTER
byref 并不会构造一个指针对象,因此速度比 pointer 快,只能作为导出函数的实参使用。其 _obj 是只读属性,不能更改。pointer 会构造一个指针对象。.contents 属性即其所指的对象,但是指向是能够变动的。相当于int *ptr = n;ptr = &m; //指向可以变化对于一个包含如下函数,名为 lib.so 动态库:void chang...原创 2019-12-28 21:49:52 · 8623 阅读 · 0 评论 -
Linux pyinstaller 打包问题 enable-shared
线上服务器的系统基本都是centos 6.x,python 版本是 2.7.5。仅仅是为字符的问题处理上,应该使用python3.x,而不是python2。所以用 pyinstaller 打包 python 3.x 运行的脚本,而不用在线上安装依赖的环境。wget 下载源码,configure ;make ;make install 三部曲安装。wget https://www.pyth...原创 2019-11-16 21:30:46 · 3007 阅读 · 1 评论 -
python 脚本退出
exit(),os._exit(),sys.exit() 都能退出当前脚本的执行。差别在于 os._exit() 直接退出;exit() 和 sys.exit() 会抛出异常。当然,如果不捕获异常,看起来的效果和 os._exit() 一样,不会有任何意外的信息,不过当然可以用来做一些清理的工作。try: for i in range(10): time.sleep(0.5) ...原创 2018-11-23 11:20:12 · 4758 阅读 · 0 评论 -
windows 属性对话框编码问题 The filename, directory name, or volume label syntax is incorrect.
背景:用 go 写个小程序,涉及到文件的读写,右键要打开的文件,打开属性面板,从面板里复制文件的决定路径到notepad++当中,结果程序,运行,提醒 The filename, directory name, or volume label syntax is incorrect. 错误。小实验 ,新建一个文件,复制上边的绝对路径到 notepad++ 当中,然后将文件保存成 utf8 ...原创 2018-11-07 01:14:20 · 30927 阅读 · 2 评论 -
python go 延迟调用的多个闭包捕获同一变量的问题
def mult(): return [lambda x : x * i for i in range(4)]for ele in mult(): print(ele(2))lambda 先捕获上下文环境中的变量构成可调用对象,真正的调用在后边显式的调用处。问题在于 lambda 捕获的是变量的引用(一个地址对应的内存),而不是捕获时,变量的值,实际上这个值在捕获之后可以被修改。所以实...原创 2018-10-26 22:01:32 · 457 阅读 · 0 评论 -
python 抽象基类
具体化抽象基类的两种方式:1、通过抽象基类 ABCMeta 的 register 方法注册。2、通过继承的方式。class Base(metaclass = ABCMeta): @classmethod def __subclasshook__(cls, subclass): if cls is Base: return True return NotImpleme...原创 2018-09-12 13:55:34 · 1126 阅读 · 0 评论 -
python time datetime相互转换
原创 2018-07-09 13:17:44 · 448 阅读 · 0 评论 -
Mysql 编码修改与 pymysql 编码参数说明
show variables like 'character%'; 查看所有的编码:在配置文件 my.ini 中的 [mysqld] 章节下添加 character-set-server = utf8 改变 character_set_server 的编码,需要重启mysql服务生效。character_set_database 的编码的配置不在配置文件中,使用 alter database da...原创 2018-06-13 13:29:26 · 1392 阅读 · 0 评论 -
细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 评注
原文在这里 https://www.cnblogs.com/malecrab/p/5300503.htmlUnicode编码点分为17个平面(plane),每个平面包含216(即65536)个码位(code point)。17个平面的码位可表示为从U+xx0000到U+xxFFFF,其中xx表示十六进制值从0016到1016,共计17个平面。2. UTF-32与UCS-4在Unicod...转载 2018-03-28 21:13:40 · 923 阅读 · 0 评论 -
python 作用域总结
1、LEGB 规则。2、方法内部不能直接访问类属性,需要通过 self. 或者类名。python 里只有显示的 self,没有隐式的 this.类体和函数/方法体都是独立的作用域。类体的代码是生成类时执行;函数/方法体的代码是调用时才执行。上边代码调用时已经无法识别 x,x 属于 A 的作用域,而 A 的作用域与 f 的作用域相互独立。所以 f 中访问,需要加显示的写 A.x 或 s...原创 2018-12-07 22:36:44 · 372 阅读 · 0 评论 -
python给普通对象添加方法
内容来源 stack overflowMethod nought (0) - use the descriptor method, __get__Dotted lookups on functions call the __get__ method of the function with the instance, binding the object to the method and...转载 2018-12-06 16:30:52 · 537 阅读 · 0 评论 -
python 柯里化与偏函数
from functools import partialimport inspectdef f(x, y): return x + ya, b= 3, 4,g = partial(partial(f, a), b)() #偏函数def decorator_1(f): def decorator_2(x): def decorator_3(y): return f...原创 2018-12-06 18:42:41 · 486 阅读 · 0 评论 -
Understanding Python Class Instantiation
概要(纠正原文中代码的问题)def __call__(obj_type, *args, **kwargs): obj = obj_type.__new__(obj_type, *args, **kwargs) if obj is not None and isinstance(obj, obj_type): obj_type.__init__(obj, *ar...转载 2019-03-25 21:40:41 · 390 阅读 · 0 评论 -
python socket 超时设置
python socket 提供 settimeout 设置阻塞 IO 的超时时间,一旦超时,抛出 timeout 异常。不过这样,接收与发送的超时时间都被设置为相同了。如果需要接收与发送设置不同的超时时间,需要利用 socket 选项 SO_RCVTIMEO 和 SO_SNDTIMEO 来实现。Linux 下,选项的参数值为 timeval,两个字段表示秒与微妙,都是 64 位整数。s...原创 2019-06-14 21:55:57 · 20571 阅读 · 1 评论 -
python 包有无 __init__.py 文件的区别
python 的包并不一定需要一个 __init__.py 文件。1、命名空间包不包含 __init__.py 文件的包叫 命名空间包,这种包有几个差异的地方。假如文件的组织结构如下,每一个 py 文件都只简单的包含一句 print(__name__) 。包路径下不包含 __init__.py 文件:import syssys.path.append(r"D:\foo\spa...原创 2019-08-17 22:24:36 · 5050 阅读 · 0 评论 -
python threading 模块类总结
1、print 函数不是线程安全的。logging 系列方法时,deque.Queue 线程安全队列。2、python 线程对象的daemon属性继承自父线程,主线程的daemon属性是 False. 所谓 daemon 即父线程退出时,子线程立即退出。而非 deamon 子线程;父线程会等待子线程退出时才退出。3、threading.Event 类,线程间同步工具类之一。内部维持一个状态...原创 2019-09-08 17:07:40 · 373 阅读 · 0 评论 -
python nmap工具
python-nmap安装自动安装:pip install python-nmap手动安装:下载安装包,python setup.py installpython-nmap实际实现的只是对 nmap 工具的管理,所以需要首先安装 nmap 工具。去官网 https://nmap.org/download.html 下载 nmap 安装,默然会添加 nmap.exe到环境变量原创 2017-03-12 22:57:03 · 4099 阅读 · 1 评论 -
Beautiful Soup 使用总结
Beautiful Soup 用来方便的解析 html 和 xml 文档,实现快速的在文档树中查找、提取、跳转。Beautifusoup 将整个文档分为四种对象:Beautifusoup对象、bs4.element.tag 简称 tag 对象、bs4.element.NavigableString 简称 string 对象、bs4.element.Comment 简称 comment 对象。B...原创 2017-06-01 23:03:03 · 2403 阅读 · 0 评论 -
python3 读写文件换行符
最近在处理文本文件时,遇到编码格式和换行符的问题。基本上都是GBK 和 UTF-8 编码的文本文件,但是python3 中默认的都是按照 utf-8 来打开。用不正确的编码参数打开,在读取内容时,会抛出异常。open(dirpath + "\\" + file, mode = "r+", encoding = "gbk", newline = "")捕获抛出的异常,关闭文件。使用另外一原创 2017-03-08 20:46:39 · 20493 阅读 · 0 评论 -
python 对象树
1、python 对象树python的继承树中的每个节点即一个命名空间,最底下的叶子为对象实例,对象实例通过 __class__ 钩子与上边的类节点连接,类通过__base__钩子与更高的超类连接。位于最顶上的根节点是type元类。无论属性或者方法,最终都是在命名空间中爬树、进行查找,每个命名空间的存储以字典的形式进行,字典的键为属性或者方法的名称字符串。每个对象的属性的查找的命名空间...原创 2017-01-22 01:29:29 · 4185 阅读 · 0 评论 -
python import 搜索路径及相对导入和绝对导入
python 接收器的搜索路径1、当前工作目录。通过import osos.getcwd() 可以查看当前的工作目录。在命令行通过 python xx/yy/zz.py 文件执行时,当前的工作目录是 xx 所在的路径,但是加入到搜索路径的是 zz.py 所在的路径。2、PYTHONPATH 环境变量中的目录。(如果是在运行python时新添加PYTHONPATH 环境变量,需要...原创 2017-04-08 22:50:32 · 19069 阅读 · 0 评论 -
Anaconda 包管理器 conda and pip
最近更行了anaconda,发现在自带3.6 python版本的anaconda中,PyQt5 无法正常使用:动态链接库总是没法正常导入;另外,matplotlib.pyplot 也没法正常使用。所以转向了 winpython,最新带 3.6 python版本的 winpython,安装之后,PyQt5 和 matplotlib.pyplot都能正常使用。只是,包管理工具 pip 没法正常原创 2017-04-04 17:32:47 · 12877 阅读 · 0 评论 -
notepad++ 正则表达式与python
熟练的掌握一款编辑器的使用,notepad++ 我觉得就不错。Windows的换行符为 CR + LF,即 ‘\r’ 和 ‘\n’Linux的换行符为LF, 即 ‘\n’MacOs的换行符为CR,即'\r'在某些时候,文本文件中可能同时存在三种不同的换行符:对于文本文件,行的结束用换行符来标记。正则表达式中存在一些边界符,本身不表示任何字符,只用用来限定边界占位用。比...原创 2016-12-25 16:49:21 · 4071 阅读 · 0 评论 -
python 协程
import timeimport randomimport asyncioasync def waiter(name): for _ in range(6): time_to_sleep = random.randint(1, 3) / 4 time.sleep(time_to_sleep) #await asyncio.sleep(time_to_sleep) prin原创 2017-03-19 22:08:04 · 3358 阅读 · 0 评论 -
objgraph 查找内存泄漏的工具 Image renderer (dot) not found, not doing anything else
在pip install xdot 之后,使用objgraph.show_refs 方法作图时,提示Image renderer (dot) not found, not doing anything else由于生成的文件是 .dot 格式的,可以使用 Graphviz 图像绘制工具来将 .dot 描述的图形转换为各种图形格式。参见维基百科:DOT语言是一种文本图形描述语言...原创 2017-03-19 11:45:29 · 7908 阅读 · 1 评论 -
python 编程风格术语说明
LBYL: Look before you leap.EAFP. Easier to ask for forgiveness than permission.例子来自于stackoverflow.EAFP:try: x = my_dict["key"]except KeyError: # handle missing keyLBYL:if "原创 2017-02-25 19:22:52 · 4493 阅读 · 1 评论 -
python中嵌入C运行时函数
详细的文档看这里:https://docs.python.org/3.6/library/ctypes.html?highlight=ctypes#module-ctypes需要注意的是文档中提到的几点:cdll 中的C函数的调用约定是cdecl 的,windll 中的C函数的调用约定是stdcall 的,Windows API专用。1、NoteAccessing原创 2017-01-01 00:28:04 · 3809 阅读 · 0 评论 -
matplotlib学习
matplotlib 面向对象作图。matplotlib作图的层次:1、Figure_Canvas 绘图的地方,画布。2、Renderer 在画布上进行绘图的动作。3、Artist 图画中的元素和元素的集合,包括子图、坐标轴、文本、线、刻度短线、点。绘图中使用的高层接口。对于多figure的,有一个当前的figure,每次都是对当前的figure进行操作。对于f原创 2017-04-16 19:17:29 · 4123 阅读 · 0 评论 -
python 操作数据库插入语句占位符问题
1,在 Python 中使用 sqlite3 连接数据库,插入语句的展位符为 "?"cur.execute("insert into user values(?,?,?)",(1,2,"zhang"))2、在 Python 中,使用 pymysql 连接 mysql 数据库,插入语句的占位符为 "%s"cursor.execute("insert into user values(%s原创 2017-08-01 01:20:58 · 12774 阅读 · 1 评论 -
HTTP cookies
http cookies 分为 session cookies 和 persistent cookies 两种。session cookies:服务器在应答头中发送给客户端一个设置特定字段 Set-Cookie 的数据(各种不同的字段有好几百种),客户端在请求头中回应给服务器端一个 Cookie 数据。效果大概如下:HTTP response from web server:原创 2017-05-31 22:17:51 · 2933 阅读 · 0 评论 -
python 迭代器与生成器即迭代协议的特别说明
python 中抽象程度更高,直接在语言层面支持对容器进行迭代。C++ 中在泛型算法和容器之间还需要借助中间层迭代器来粘合。可迭代的是两类对象:1、包含 __iter__ 方法的。2、包含 __getitem_ 方法的。比如 str 对象就没有 __iter__ 方法,但是一样能够迭代。另外,判断是否只能迭代一次的:iter(obj) == obj相等表示 obj 是自原创 2017-05-26 17:16:21 · 3526 阅读 · 0 评论 -
python 利用浏览器 Cookie 模拟登录的用户访问知乎
首先在火狐浏览器上登录知乎,然后使用火狐浏览器插件 Httpfox 获取 GET 请求的Cookie,这里注意使用状态值为 200(获取成功)的某次GET.将 Cookies 复制出来,注意这一行非常长,不要人为添加换行符。而且 Cookie 中使用了双引号,最后复制到代码里使用单引号包起来。使用下边代码检验是否是模拟了登录的用户的请求:import requestsimport原创 2017-06-03 19:25:17 · 7900 阅读 · 1 评论 -
Kali Linux安装ipython2 和 ipython3
1、更新包管理 apt-get install update.2、安装 pip3 :apt-get install python3-pip3、安装ipython 2 : pip install ipython.查看 ipython 命令的所在位置:which/usr/local/bin/ipython改名:mv /usr/local/bin/ipython/usr/lo原创 2017-05-20 16:48:01 · 6763 阅读 · 0 评论 -
pyinstaller 打包 python 脚本成 exe 的坑
pyinstaller 打包python脚本成exe,只需要简单的两步:pip install pyinstallerpyinstaller script.py或者将动态链接库也打包到 exe 当中:pyinstaller --console --onefile script.py然后在当前目录下回产生两个目录和一个文件:dist、build、.spec原创 2017-05-31 12:58:43 · 4570 阅读 · 0 评论 -
Awesome python (了不起的python)
python各种相见恨晚的包,框架。原文在 github中文的在这里。A curated list of awesome Python frameworks, libraries, software and resources.Inspired by awesome-php.Awesome PythonAdmin PanelsAlgorithms and Des转载 2017-05-18 19:14:34 · 16998 阅读 · 0 评论 -
redis windows 初体验与 hiredis 编译
redis 官方是不提供windows 下的版本。github 这里 可以下载到windwos 下的版本。安装 .mis文件,以 管理员身份 在命令行切换到安装目录下,执行:redis-server.exe redis.windows.conf (这两个文件都在安装目录下)这个时候可能会出现 Creating Server TCP listening socket 127.0.0原创 2017-05-10 23:00:12 · 3255 阅读 · 0 评论