Python

Python selenium3

Submitted by Lizhe on Mon, 05/22/2017 - 18:51

 

C:\DEV\Python\Python36\Scripts>pip install selenium
Requirement already satisfied: selenium in c:\dev\python\python36\lib\site-packages

from selenium import webdriver
browser = webdriver.Chrome("C:\\DEV\\drivers\\chromedriver.exe");
browser.get('http://lizhe.name');

 Directory of c:\DEV\Python\Python36\Lib\site-packages

Python 正则表达式

Submitted by Lizhe on Fri, 05/19/2017 - 15:45

正则表达式语法在这里就不提及了,主要是熟悉一下python的api

import re;
 
abcRegex = re.compile("abc");
mo = abcRegex.search("abc123");
print(mo.group());

这个例子太简单了, group方法会返回abc, 语法上也和javascript的正则差不多

分组的写法是

The Tower of HANOI

Submitted by Lizhe on Wed, 05/10/2017 - 15:59

汉诺塔问题经常被用于递归的教学,当然还有一个印度传说

在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

这里纯粹是无聊重新研究一下

先考虑一下"小"问题

先假设如果有1块disk,当然只需要1步就可以结束整个过程,我们用T1来表示总共需要的步数 T1 = 1

如果有2块disk, 很容易想到是 T2 = 3 (自己脑补一下过程)

3块的时候一共需要7步, T3 = 7 (还是自己脑补)

然后考虑"大"一点

按照前面的经验,

首先需要把除了最大的一个disk之外的所有disk都移动到中间  Tn-1

然后移动最大的一块, T1 ( 也就是1 )

Python 多进程 多线程

Submitted by Lizhe on Wed, 05/10/2017 - 13:31

实际上Python比java提供了更激进的并发模式 (当然java也可以做到,不过没人愿意启动那么多虚拟机吧)

它使用多进程的方式来处理并发需求

下面是一个简单例子,看起来跟多线程都差不多

from multiprocessing import Process
import os

# 子进程要执行的代码
def run_proc(name):
    print ('Run child process %s (%s)...' % (name, os.getpid()));

Java Python 多线程区别 GIL 以及线程安全 内核级线程

Submitted by Lizhe on Tue, 05/09/2017 - 15:45

threading包比thread提供的功能更全面,所以这里使用threading为例

不过本文不想过多讨论基础操作, 我比较好奇的是Python的GIL和线程安全问题(Java写多了)

import threading

def say(name):
    for i in range(5):
        print("from thread "+str(name));

t1 = threading.Thread(target=say,args=("1"));
t2 = threading.Thread(target=say,args=("2"));

t1.start();
t2.start();

上面这个例子会交替打印 message1 和message2 

我们稍微做一下改变,让这两个线程一直循环下去好观察cpu的占用率

Python 文件操作

Submitted by Lizhe on Tue, 05/09/2017 - 15:10

大多数情况下file()和open()可以互换

要一次性读取全部内容可以使用,如果不使用rsstrip()的话会发现每行输出之间会有一个空行,这是因为line本身带有空行+print()函数产生的空行

file = open("data.txt");
alllines = file.readlines();
for line in alllines:
    print(line.rstrip());
file.close();

虽然理论上只要内存够大,python可以直出文件的所有内容,不过还是推荐使用迭代器

Python 模块和类

Submitted by Lizhe on Thu, 05/04/2017 - 16:57

python中的模块是扩展名为.py的文件

mymodule.py

def myfunction():
    print("this is a function");

 

exe.py

import com.module.mymodule

com.module.mymodule.myfunction();

上面的exe.py也可以写成

Python 列表排序

Submitted by Lizhe on Wed, 05/03/2017 - 16:43

from audioop import reverse
books = ['b1','b2','b3','b1'];
books.reverse() #永久颠倒顺序

sortedBooks = sorted(books,reverse=True); #返回一个倒序排序
print(books);
print(sortedBooks);

books.sort(reverse=True); #永久倒序排序
print(books);