【知识碎片】python 篇

 

 

 

领域:运维 网站 游戏 搜索 嵌入式 C/S软件

Openstack二次开发

绿色版:Portable Python

面向对象、解释型动态语言

env python 切换版也好使,自己寻找系统中python安装路径

#!/usr/bin/env python
print 'Hello world!'

 修改为可执行文件

chmod +x test.py     # 脚本文件添加可执行权限
#执行
python name.py
chmod 755 name.py
#执行
./name.py 

 编程风格

1、缩进统一

Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量

运算符 + - * /    平方 2的8次方 2**8

注释

python中单行注释采用 # 开头。

python 中多行注释使用三个单引号(''')或三个双引号(""")。

导入 import

#全部导入  导入OS整个模块
import os
#导入部分 导入sys模块中mokuainame
form sys import mokuainame
#别名
import os as biemingname

 注意tab window 和Linux不一致

下一节 流程控制

百度贴吧获取图片爬虫

#!/usr/bin/python
#-*- coding: UTF-8 -*-
import urllib
import re

def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html


def getImg(html):
    reg = r'src="(.+?\.jpg)" pic_ext'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    x = 0
    for imgurl in imglist:
        urllib.urlretrieve(imgurl,'%s.jpg' % x)
        x+=1
        
html = getHtml("http://tieba.baidu.com/p/2460150866")

print getImg(html)
View Code

 构造函数

__init__   析构函数: __del__

 

 

 

 

 

面向对象

可以多继承

__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs

CGI

httpd路径 /etc/httpd/conf/httpd.conf  添加CGI脚本格式修改路径都在这里 ps html 头部下面一定要有空格

#!/usr/bin/python
# -*- coding: UTF-8 -*-

print "Content-type:text/html"
print                               # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello Word - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>'
print '</body>'
print '</html>'
View Code

 

 

2、加#-*- coding: UTF-8 -*-还是乱码

#解决加-*- coding: UTF-8 -*-还是乱码
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

 

1、Python 标识符

在python里,标识符有字母、数字、下划线组成。

在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

python中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;

以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。/2多行语句

Python语句中一般以新行作为为语句的结束符。

但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:

total = item_one + \
        item_two + \
        item_three

 

语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:

days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']

if...if else...else... 

pass 过去吧 这段代码不执行

if 1=1
      print '1'
else:
     pass #写pass 不执行了

 去空格函数raw_input('input:').strip() #去掉前后空格

for 循环 continue break

while...else...

range 函数

 

python 文件处理
列表
元组
字典
函数
f=file("test.txt","r") #以Read(w(write))的方式打开文件
f.write("Tody is a good day\n")
f.write("You are right\n")
f.close() #保持关闭

字典是无序的
tab键不全 需要自己去网站弄 python本身没有

readlines() xreadlines() 区别

2.3以后不推荐使用xreadlines

 http://www.oschina.net/question/252490_132790?sort=time

with open('foo.txt', 'r') as f:
    for line in f:
        # do_something(line)

 

with 理解http://blog.csdn.net/suwei19870312/article/details/23258495

 更好的处理读取文件的时候报异常

set(a)

把a列表转换成集合并且去重

 http://www。pythontab。com/html/2013/pythonjichu_0227/260.html

 a.difference(b) 求a里面有 b里面没有的

 http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868193482529754158abf734c00bba97c87f89a263b000

 zip()  map()

http://c.biancheng.net/cpp/html/1824.html

yield (返回迭代器) 和return 冲突,函数中只能使用其中一个

map()

a=rangge(100)

b=map(lambda x:x**2,a) #把a集合中的所有元素都求平方然后返回给b集合

 

lambda: http://www.cnblogs.com/wanpython/archive/2010/11/01/1865919.html

 import Scipy #数学运算的包  开放平方什么的

python 内置函数

http://www.cnblogs.com/hongfei/p/3858256.html

Pickle 序列化 python语言之间内存之间,可以实现内存漂移,a机器挂掉了,把a的状态转移到b机器

json 序列化  跨平台 各种传输

Python2.6开始加入了JSON模块,无需另外下载,Python的Json模块序列化与反序列化的过程分别是 encoding(dumps)和 decoding(loads)

包管理工具PIP python 安装easy_install和pip

装饰器:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819879946007bbf6ad052463ab18034f0254bf355000

python也有垃圾回收机制

__fangfaname(self)  前面两个下划线私有函数  外部不能调用

如果想调用

p=Person("name",39)
p._Person__fangfaname()

把方法内的局部变量变类变量

class Dog:
    
    def say(self):
        self.leibianliang=fangfaneibianliang #这样另外一个方法就可以调用了

 面向对象继承

class SchoolMember:
    school_name = 'Oldboy Linux edu.'
    def __init__(self, name, gender,nationality='CN'):
        self.name = name 
        self.gender = gender
        self.nation = nationality
    
    def tell(self):
        print 'Hi, my name is %s , I am from %s' %(self.name, self.nation)      

class Student(SchoolMember):
    
    def __init__(self,Name, Gender, Class , Score,Nation='US' ):
        SchoolMember.__init__(self,Name, Gender,Nation)
        self.Class = Class
        self.Score = Score
        #self.Name = name 
        
    def payTuition(self,amount):
        if amount < 6499:
            print 'Get the fuck off...'
        else:
            print 'Welcome onboard!'
class Teacher(SchoolMember):
    def __init__(self,Name, Gender, Course , Salary,Nation='FR'):
        SchoolMember.__init__(self,Name, Gender,Nation)
        self.Course = Course
        self.Salary = Salary 
        
        
    def teaching(self):
        print 'I am teaching %s, i am making %s per month !' %(self.Course, self.Salary)
        
        
S1 = Student('WangFanHao', 'Male', 'Python','C+','JP')
S1.tell()
S1.payTuition(4999)

S2 = Student('ShitTshirt', 'Male', 'Linux','B')
S2.tell()
S2.payTuition(6500)  

        
T1 = Teacher('Alex','Male', 'C++', 5000)
T1.tell()
T1.teaching()

#SchoolMember
            
        
View Code

 

posted @ 2016-05-04 20:52  xiaoshi657  阅读(300)  评论(0编辑  收藏  举报