最近得知凤凰os,给自己平板也装了个这个系统,感觉蛮不错的,系统的tty1有root权限,但是安装的apk却没有root权限,直接安装super su提示su文件被占用,原因是系统自带的su文件动手脚了,只能给tty1用,我们的解决方法就是下载官方的su文件。遂寻找解决办法,参考网络,方法如下: 1. 去官网下载zip包。解压到本地。假定解压到了/sdcard/Download/su/ 2. 按alt+F1进入系统终端 3. cd /system/xbin 4. mv su su.bak 5. cp /sdcard/Download/su/x86/su.pie su 如果是x64架构就复制x64目录下的 6. su --install 7. su --daemon 8. alt+F7切换会GUI,在su/common/,目录中安装supersu.apk 9. 打开supersu.apk点击确定更新su文件 10. 选择常规 11. 重启系统 获取root权限教程完毕 继续阅读 >>


李余通 18/05/08 10:55:55
关于Python的web application,可以参考PEP-3333。另外,我还找到了一篇翻译,英文有困难的童鞋可以点这里。 WSGI Python Web Server Gateway Interface,翻译过来时Python web服务器网关接口,实际上就是一种协议,我们的应用(Django,Flask)实现了WSGI,就可以配合实现了WSGI(uWSGI,gunicorn)的服务器工作了。 以下是他们的结构图。 下面详述两种模式: 两级结构 在这种结构里,uWSGI作为服务器,它用到了HTTP协议以及wsgi协议,flask应用作为application,实现了wsgi协议。当有客户端发来请求,uWSGI接受请求,调用flask app得到相应,之后相应给客户端。 这里说一点,通常来说,Flask等web框架会自己附带一个wsgi服务器(这就是flask应用可以直接启动的原因),但是这只是在开发阶段用到的,在生产环境是不够用的,所以用到了uwsgi这个性能高的ws 继续阅读 >>


李余通 18/05/04 13:58:49
本文是我看了http://python.jobbole.com/88291/后加上自己的一些感想所创 我们都知道,IO比CPU慢很多个数量级,而传统的IO,是阻塞型的,CPU花在等待IO上的时间很多,那么想要提高并发量,选择解决CPU在等待IO上花费的大量时间是一个比较好的出路。 先来看一个阻塞型IO的例子。 同步阻塞下载程序 该脚本的功能是下载10个网页。 import socket urls = ['/'+str(i) for i in range(10)] host = 'www.baidu.com' def fn(url): sock = socket.socket() sock.connect((host,80)) # 这里会阻塞直到发送成功 #send不会阻塞 sock.send(('GET %s HTTP/1.0\r\nHost: %s\r\n\r\n' % (url,host)).encode('utf-8')) respon 继续阅读 >>


李余通 18/04/24 23:53:57
Python中一共有三种推导式,做一个简述。 推导式的结构 开始符号 处理结果 迭代对象 过滤条件 结束符号 列表推导式 读取输入的内容并转成整数。 [int(x) for x in sys.stdin.readline().split() if x != '\n'] 开始符号:[ 结束符号:] 处理结果:int(x) 迭代对象:for x in sys.stdin.readline().split() 过滤条件:if x != '\n' #实际上这句话可以不要 会生成一个类似[1,2,3,4]的列表 生成器表达式 这个和列表推导式很类似,只是开始符号和结束符号变成了()。 生成器的好处是惰性计算,不会一下子占用太多内存。 集合推导式 这个和列表推导式很类似,只是开始符号和结束符号变成了{}。 {x**2 for x in [1,2,3,4,1,2,3] if x != 1} ==>{16, 9, 4} 字典推导式 符号:{} 处理结果k:v #e 继续阅读 >>


李余通 18/04/22 10:23:44
这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 Sum(1) =>1 Sum(1,2,3) =>6 MegaSum(1)() =>1 MegaSum(1)(2)(3)() =>6 实际上Sum就是Python自建的sum函数,它支持变参,变参怎么实现,自然是*args,所以很容易写出雏形: Sum def Sum(*args): count = 0 for i in args: count+=i return count 第二个函数就有点皮了,它要求有参数的时候,返回的值是一个函数的引用,无参数的时候,返回的是结果。 要实现可以有或无参数,那么首想到的是Python的默认参数。我们可以默认参数值是None,当主动传入参数时,返回一个函数的引用,否则,返回结果。这里用到了Python可变类型作为函数参数时的一些特性。代码如下: def Sum(*args): s = 0 for i i 继续阅读 >>


李余通 18/04/15 20:50:14
很多时候,我们需要对已经实现的功能进行扩展,即增加新的功能,那么,最容易想到的就是就是对原有功能进行修改,这个时候免不了要修改原始代码,但面向对象编程的一个思想是开放封闭原则,即: 开放:对扩展开发 封闭:对已实现的功能模块 已实现的功能可以被扩展,不能被修改 需求来了 现在有一个函数 def do(msg): print("do %s..." % msg) 现在要求执行do之前打印一句before do...,执行完之后打印一句end do... 很容易想到这样的做法: def other_do(msg): print('before do...') do(msg) print('end do...') 功能达到了,但是有一个问题,我实际调用的函数已经不是do(msg),而是other_do(msg)了,那么有没有什么别的方法呢? 答案是装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功 继续阅读 >>


李余通 18/04/10 18:20:13
本文需要您有Python变量查找的知识,如果您不知道,可以参考上篇博文Python变量查找LEGB原则 构成闭包的条件 外函数中定义了内函数 内函数使用了外函数的变量 外函数的返回值是内函数的引用 以下是一个简单的闭包的定义 def outer(): b = 1 def inner(): #外部函数内定义了内部函数 print(b) #内部函数使用了外部函数的变量 return inner #外部函数的返回值是内函数的引用 使用 a = outer() a() #1 我们先是调用了外部函数outer()将其返回值赋值给了a变量,那么a变量实际上是指向的内部函数inner,当我们调用a时,相当于调用了inner,然后打印了外部变量b的值。 似乎没什么不妥 但是,我们知道,函数中的局部变量,在函数结束时会释放掉,但是上例中,执行a()的时候outer()已经退出了,那么对应的b也就释放了,但是inner还调用了b变量,这就是闭包。 闭包变 继续阅读 >>


李余通 18/04/08 21:02:36
实际上很简单,贴上方法。 首先,你应该有.desktop文件,这个文件相当于win的快捷方式,通过这个可以找到安装目录。 下载最新版本的.tar.gz包 解压。譬如我的在/opt/中安装着,那么tar zxf idea.tar.gz -C /opt/ 把原始的目录重命名,之后把刚解压的修改为新的原始的名字。 启动idea,弹框选择从老版本导入配置 没问题后就可以把老版本的删除了 作者:baidu_35085676 发表于 2018/04/08 20:05:14 原文链接 https://blog.csdn.net/baidu_35085676/article/details/79856983 阅读:79 继续阅读 >>


李余通 18/04/08 20:05:14
两种类型 首先要知道Python的基本数据类型分为2种,可变以及不可变类型。 可变类型list dict set 不可变类型 number tuple string 变量访问 LEGB L-Local(function);函数内的名字空间 E-Enclosing function locals;外部嵌套函数的名字空间(例如closure) G-Global(module);函数定义所在模块(文件)的名字空间 B-Builtin(Python);Python内置模块的名字空间 当Python访问变量值时,默认LEGB查找原则,如果都找不到,则会抛出NameError 变量修改 但是,作为对变量值进行修改,则会有两种情况: 不可变变量 仅访问 a=10 def b(): print(a) #10 b() print(a) #10 可以正常访问,根据LEGB原则找到全局变量 仅修改 a=10 def b(): a = 20 print( 继续阅读 >>


李余通 18/04/08 14:39:42
这篇博文比较简单,就不分那么多的层次。 实现了__call__方法的对象,相当于重载了(),可以实现调用功能。 eg class A(): def __call__(self,name): print("%s is running!" % name) >>> a = A() >>> a("people") people is running! 首先,我们创建了A类的实例,赋值给a,由于A类实现了__call__方法,所以它可以调用,调用它实现了打印一句话,当然,这很无聊,实现非波纳契数列的类。 # coding=utf-8 """用类实现斐波那契数列""" class Fib(): def __call__(self, *args, **kwargs): ret = [1,1] num = int(args[0]) if num == 1: r 继续阅读 >>


李余通 18/04/01 21:52:52