Python语言学习笔记(一)

Python中的变量是一个符号,改变的是符号的引用,要与C/Java语言的区别开

例如

再看如下特性

 Python的数据类型

数字、字符串、列表、元祖、字典

注意切片功能,怎么反向切?

一图看懂Python

python自定义函数和调用

 1 class TreeNode:
 2     def __init__(self,value):
 3         self.children = []
 4         self.value = value
 5  
 6     def add_child(self,*child):
 7         self.children+=child
 8  
 9     def show(self,layer):
10         print  "  "*layer+self.value
11         map(lambda child:child.show(layer+1),self.children)
12  
13  
14 def main():
15     a1 = TreeNode("A-1")
16     b1 = TreeNode("B-1")
17     b2 = TreeNode("B-2")
18     c1 = TreeNode("C-1")
19     d1 = TreeNode("D-1")
20     a1.add_child(b1,b2)
21     b1.add_child(c1,TreeNode("C-2"))
22     b2.add_child(TreeNode("C-3"),TreeNode("C-4"))
23     c1.add_child(d1)
24     d1.add_child(TreeNode("E-1"),TreeNode("E-2"))
25     a1.show(0)
26 if __name__=="__main__":main()
27 
28 
29 #快速自定义函数
30 
31 def quicksort(array):
32     less = []; greater = []
33     if len(array) <= 1:
34         return array
35     pivot = array.pop()
36     for x in array:
37         if x<= pivot: less.append(x)
38         else: greater.append(x)
39     return quicksort(less) + [pivot] + quicksort(greater)
40 
41 x = [2, 3, 1, 2, 10, 293, 2]
42 quicksort(x)
43 print x
44 print quicksort(x)

 python中的序列(切片和索引)

列表、元祖、字符串

操作:cmp, +, max, min, len, *, in

#元祖的值不可修改

#元祖可以存放多种类型

 

列表:定义与方法

列表的内容可以重新赋值,赋值后的地址不变

 列表的方法

字典:类似于Java中的hashMap,有keys和values

dict {}, 列表[], 元祖()

 

条件语句和循环, break, continue

##

 

 

##python得到系统时间

import time
print time.strftime("%Y-%m-%d %H:%M:%S")

strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

 

可参考R的时间系统格式

 Python字典按照值或键排序


嵌套列表推导表达式:

 加强版的Python交互shell:IPython,%reset 清除interactive命名空间;%xdel 从Ipython系统中移除特定对象的一切引用

"""
没错。这个地方的定义,是这样的:
一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__";
如果它是被别的程序导入的(作为一个模块),比如:
import re 那么,他的__name__就不是"__main__"了。
所以,在.py文件中使用这个条件语句,可以使这个条件语句
块中的命令只在它独立运行时才执行

"""
def main():
    x = 3
    y = 4
    return x + y
    
if __name__ == '__main__':
   print "main() = %s" % main()

 matplotlib之绘图

points = np.arange(-5, 5, 0.01)
xs , ys = np.meshgrid(points, points)
import matplotlib.pyplot as plt
z = np.sqrt(xs**2 + ys ** 2)
plt.imshow(z, cmap = plt.cm.gray)
plt.colorbar()
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")

思考下标题的 "Image plot of $\sqrt{x^2 + y^2}$ for a grid of values"?

 

简单的数据分析过程:

import time
from pandas import Series, DataFrame
import pandas as pd
import numpy as np
start = time.time()
name = ['movie_id', 'title', 'genres']
movies = pd.read_table('D:\Python_WorkSpace\ml-1m\movies.dat', sep = "::", header = None, names = name)
genre_iter = (set(x.split('|')) for x in movies.genres)
geners = sorted(set.union(*genre_iter))
dummies = DataFrame(np.zeros((len(movies), len(movies.genres))), columns = movies.genres)
for i, gen in enumerate(movies.genres):
    dummies.ix[i, gen.split('1')] = 1
movies_Widdic = movies.join(dummies.add_prefix('Genre_'))
movies_Widdic.ix[0]
end = time.time()
print 'time = %.4f '%(end - start)

 

数据聚合与分组运算

关系型数据库和SQL能够如此流行的原因之一就是能够方便的对数据进行连接、过滤、转换和聚合。

Hadely Wickham创造了一个用于分组运算的术语"split-apply-combine"(拆分-应用-合并)。

Python图形化工具的生态系统

  • Chacos
  • mayavi

图形工具的未来,基于WEB(比如JavaScript)的图形化是必然的发展趋势。

非WEB式的图形化开发工作在近几年中减慢了许多。

Python和其他数据分析和统计计算环境(如R)都是如此。

 

Python类与继承

#继承list的方法,超类的初始化方法,另外增加了一个计数特性

class
CounterList(list): def __init__(self, *args): super(CounterList, self).__init__(*args) self.counter = 0 def __getitem__(self, index): self.counter += 1 return super(CounterList, self).__getitem__(index)


 

#静态方法和类方法在Python中向来都不是很重要

class
MyClass: @staticmethod #静态方法 def smeth(): print 'this is a static method' @classmethod #类方法 def cmeth(cls): print 'this is a class method', cls

 

  • easy_install和pip的区别

 

作为Python爱好者,如果不知道easy_install或者pip中的任何一个的话,那么......
 
easy_insall的作用和perl中的cpan,ruby中的gem类似,都提供了 在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版,提供更好的提示信息,删除package等功能。老版本的python中 只有easy_install,没有pip。

easy_install的用法:

1) 安装一个包
 $ easy_install <package_name>
 $ easy_install "<package_name>==<version>"

2) 升级一个包
 $ easy_install -U "<package_name>>=<version>"

pip的用法

1) 安装一个包
 $ pip install <package_name>
 $ pip install <package_name>==<version>

2) 升级一个包 (如果不提供version号,升级到最新版本)
 $ pip install --upgrade <package_name>>=<version>

3)删除一个包
 $ pip uninstall <package_name> 
 
#Python 自动访问某个网址的代码,提取网站的文本信息,自动化访问网站
 
#自动访某个网址

from selenium import webdriver
import time
M = 100000 
i = 0
URL = 'http://www.yyxxww.com/html/2015/edu_0318/3386.html'
browser = webdriver.Firefox() #浏览器名字,以本机安装为准
while i < M:
    browser.get(URL)
    time.sleep(1)
    i += 1
browser.quit()
print '本次python总共打开了', i, ''  


#提取一级标题

import urllib2
from sgmllib import SGMLParser
URL = 'http://www.yyxxww.com/html/2015/edu_0318/3386.html' 
class ListName(SGMLParser):
    def __init__(self):
        SGMLParser.__init__(self)
        self.is_h4 = ""
        self.name = []
    def start_h4(self, attrs):
        self.is_h4 = 1
    def end_h4(self):
        self.is_h4 = ""
    def handle_data(self, text):
        if self.is_h4 == 1:
            self.name.append(text)
 
content = urllib2.urlopen(URL).read()
listname = ListName()
listname.feed(content)
for item in listname.name:
    print item.decode('gbk').encode('utf8')    


#访问百度,并填写表单,中文暂时不好解决,英文没问题

# coding = utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from selenium import webdriver


browser = webdriver.Firefox()

browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("你好").decode('gbk').encode('gb2312')
browser.find_element_by_id("su").click()
time.sleep(30)  # 休眠3秒
browser.quit()



 

 python 计算分位数

import numpy as np
a=np.array(([1,2,3,4]))
np.median(a)#中位数
np.percentile(a,95)#95%分位数

 

 

posted @ 2014-10-20 19:03  kongmeng  阅读(228)  评论(0编辑  收藏  举报