hello world

   两种方式使用python

   解释器方式

   程序文件方式

   组织头的作用

       #!/use/bin/python    vs  #!/usr/bin/env python

   文件编码设定

       #coding:utf8    

       #coding:cp936

   python hello.py 和 ./hello.py的区别

数据类型:

   数值型:十进制   十六进制   八进制  二进制  

       整数,浮点数

       基本运算:

           +

           -

           *

           /

           %

           //

   字符串型:

       三种形式

       +运算

变量:

   变量的作用

   变量是引用

   python是强还是弱类型??

赋值语句的作用

   赋值语句有返回值吗?

input  vs raw_input, print使用

猜数游戏

   import 的作用

   random模块

   random.randint()作用

   while语句的语法,执行逻辑

   语句块的概念--缩进

   布尔型数据

   布尔数据的运行

       and

       or

       not

    if 语句的使用

   猜数游戏的逻辑,对应代码的实现

成绩分类判断

   if的嵌套使用

   if嵌套逻辑注意--不要重复判断

   不要在处理中混杂不应有的输出

数7游戏

龙之国度游戏

   sleep()使用

   掌握流程控制的使用

函数

   语法形式

   变量的作用域

       局部变量

       全局变量

   参数

   函数练习

       1+ ... +n

       1*  ... *n

       斐波那契数列

       求质数

list数据类型

   list基本操作

文件操作

成绩管理

   实现:成绩的录入,显示,最大值,最小值,平均值

   交换界面(选择菜单方式)

list

删除数据。。。

tuple -- 元组

   形式:

       (a1, a2, ...)

       元组中的分隔符 “,”

       空元组()

       单数据项  (3,)

       省略()

   list几乎一样 --- 不可变

   函数的返回值,参数,解包赋值

       x, y, z = 1,2,3

       快速交换变量: x,y = y,x

   元组:

       a = (12, 23)

       a = 34, 56

       ??元组的不可变

       a = ([1,2], [3,4])

       a[0].append(123)

       ??元组的不可变

序列 : list, tuple, str

序列共有的方法:

   len

   索引, 遍历

   切片(分片)

       [start:stop:step]

   +

   *

dict

通讯录

name, tel, addr, birthday

[['alne', 67],['tom',78]]

key, value

形式:

   {}

   {key1:value1,key2:value2,..... }

关于初生日前:

   import datetime

   生成datetime数据

   datetime.date.today()

   datetime.datetime.now()

   datetime.date(y, m, d)

   datetime.date.today()

   year

   month

   day

   hour

   mi..

   sec...

保存:

   暴力手段---str --- file --- read -- eval  

   json:

       python数据--json对象--file --read --python数据

   import json

       json.dumps    ---   json.loads

字符串的格式化输出

dict无序的

   dict.keys -- list --- sort

   dict.items  ------- list [(key, value)]

list 复合型 -- sort, 不同的key--- key=回调函数

回调函数:

   自定义def

   lambda -- 匿名函数

   lambda  参数 : 表达式

sorted

filter

map

   dict.formkes(S, [v])

zip

key取值, 不存在 。。。

key in  D

get

False

   None

   False

   zero of any numeric type, for example, 0, 0L, 0.0, 0j.

   any empty sequence, for example, '', (), [].

   any empty mapping, for example, {}.

通讯录:

   查询  输入key  --- keyerror

异常处理

try:

   执行代码

except:

   异常处理代码

如何去掉重复的记录 --- set

通讯录:

   输入:

       记录是否重复--检查点

       中文

       birthday --- str  --- datetime  -- age

   显示:

       格式化输出  --- 元组  ---> dict  -->Template

       根据姓名排序

       根据出生日期排序输出

   查询:

       姓名

   保存:

       json  -------------->  json??? 规则

   可能出现的异常,处理

解析列表

[item1, item2 , .....]

编码:

ascii

cp936---gbk--ansi

utf8

str应用: 保存, 显示

unicdoe:处理,建议使用unicode,

file--readin --->str  -----> unicode--保存(显示)--->str

str ----------> unicode

    decode(str类型)

import codecs

codecs.open(filename, 'r', 'utf8')

unicode --------------> str

    encode(str类型)

DB

  关系型-- mysql, mssql , oracle,db2, postgres

  非关系:redis, mangodb

mysql

install

   mysql

   mysql-server

   mysql-devel

service mysqld start

mysql root口令丢失--

使用:

   1 连接

   mysql -u root -pXXXX -h host

   2 database操作

       创建db

       create database dbname default charset utf8;

       查看:

       show databases;

       删除db

       drop database dbname;

       使用(进入)db

       use dbname

   3 table

       创建表

       范式(1, 2, 3)

       txl(id, name, sex, tel, birthday)

           id int

           sex bitint

           tel char

           birthday datetime

           primary key

       创建表:

       create table txl (id int auto_increment primary key, name char(10), sex bit(1), tel char(16), birthday date);

       添加字段:

       alter table txl add name char(10) after id;

       查看表结构:

       desc tablename;

       show create table tbname

       删除表:

       drop table txl;

   4 记录的操作:

       增:

       insert into tbname (列1,列2,...) values(值1,值2,....)

       insert inot tbname values(列.....)

       e.g:

       insert into txl (name, sex, tel, birthday) values('alen', 1, '88888888', '1990-10-24');

       查:

           简单查: select * form txl;

           select * from txl where name = '张三'

           select select distinct 查询字段

           order by asc | desc

           from ......

           limit 起点, 数量

           group by --- select 中字段要求: 分组字段 聚集函数(count, max, min,avery)

               having condition

       修改:

           update tbname set 列=值 where 条件

       删除:

           delete from tbname where condition;

       索引:

           create index indexname on table (列)

python db

   1 MySQLdb

   2 连接

       conn = MySQLdb.connect(host, user, passwd , db, charset, port)

   3 cursor = conn.cursor()

   4 cursor.execute(sql)

     cursor.execute(sql, param) --- 简单, 安全

     事务处理的:conn.commit()

   5

       cursor.close()

       conn.close()

完成通讯录

   数据保存在db中

包,模块:

   模块: py文件

   from 模块 import

   包:

       目录

       __init__.py

           1 表示对应的目录是python的包  from a.b.c.  import

           2 导入对应包,自动执行。

sys.path

sysl.path.append('..')

form ..

环境变量export PYTHONPATH

__name__ :

   模块直接执行  __main__

   调用执行:  模块名

pop--proc....

OOP

面向过程: 算法 + 数据

面向对象: 数据 + 算法

   数据  对数据的操作

人:

   属性:***号, 姓名,性别, 出生日期,。。。

   方法:说话, 玩, 。。

描述:--- 类 --- 数据类型   int--- 实例化--->对象  1000

类定义:

   class 类名(object):

       类体

类体:成员

   属性:类属性, 成员属性

   方法:类方法, 成员方法, 静态方法

成员方法:

   成员---实例化对象

   def 方法名(自身对象, *args, **kwargs):

   位置参数第一个表示对象自身,必须有

成员属性:

   成员方法: self.成员属性

   可以通过对象去访问:

       对象的两种形式:

       实例化出来的对象:  zhsan.name  -- 类外

       self :类内        

   建议:通过成员方法去修改,访问成员属性

类属性:

   直接在类体中定义的属性

   类属性使用:

       类对象(类)可以访问,修改

类方法:

   def 类方法名(类对象,。。。。)

   类方法的使用:

       类对象调用类方法

       实例对象“可以”调用类方法

       类对象  --- 调用成员方法 ????  --- 不能

成员方法:

   自定义的成员方法:

   系统内置的成员方法:名称确定, 执行在一定的环境下,自动调用执行:

       __init__(self, ...)

           对象的初始化方法:当对象创建后,执行的第一个方法

           初始化对象时,参数传递

       __del__(self, ...)

           del 操作--删除变量 ,不会删除对象实体。

       __str__(self, ...)

       self, cls

成员方法内 访问类成员

   self.类成员 ---->> 类对象.类成员

静态方法:

普通函数,放在类中,访问时,通过类对象去访问

@staticmethod

def f():

面向对象--封装

继承

   父类的一切 ---

   子类中添加新成员

       添加__init__,如何调用父类成员;

           父类方法

           方法一: 父类对象调用父类中的方法--参数需要提供self

           方法二: super(基类, self).父类方法(  )        

               --->不需要提供self,cls提供

               --->基类 --- 当前子类

单例模式:

   类实例化--多次实例化

   Db --- connnect

   方法一: 代码避免

   方式二:

       __new__()

   思路:

       创建对象前,先判定对象是否存在,有,使用, 没有,创建

       类属性 ---

__init__ :

   子类的__init__中,第一条命令,调用父类的__init__

override: 重新实现父类的方法-- 覆盖  

overload:  重载,方法的参数不同时,执行的效果不同

   def f(*args, **kwargs)

万能参数:

继承:

   直接继承使用

   添加新的属性, 方法

   调用父类的方法

权限:

   私有:下线 _  双下线__

通讯录:

pop:

oop实现:

Address_book:

   属性

   方法

数据:记录

操作:增 删 改 查

数据保存 -- db

class Address_Book(object):

   ##txl_list =

   def __init__(self):

       #db 的连接

   def __del__():

       #释放

   def add_txl(self, name, tel):

       cussor.execute(sql,param)

   def get_by_name():

   def get_by_addr

   def get_all()

   def delete():

address_book = Address_book()

re正则表达式 Regular expression operations  --- String Services

import re

re.findall

模板  组成:

   普通字符

   正则字符

正则字符:

   \d: 单个数字

   \w: 单个字符

   \W:

   \s:

   \S

   . : 任意一个字符

   {m,n}

   * : 零或多次

   ? :零或一次

   + :一次或多次

   分组:

   () :分组

       -- 先匹配--获取分组数据

       向后引用

   [asdfsadf]:选择其中任意一个

   [^asdfsadf]:不选择其中任意一个

   ^:开头

   $:结尾

   re.match()  从头匹配

   效率:

   re.compile

小爬

urllib.urlopen()

系统:

os

   os.abspath

   os.path.dirname

   os.path.join

   fork()

sys

   sys.path

os.system

subprocess

   call

   Popen

OOP--- 通讯录

re

   分析页面:

       标题

       文章

执行os命令,下载