基础性质

概念

1)历史

发展久,与java同期

 

2)版本

3.X   2.7lib  常用

        

3)脚本语言,不需要编译

 

4)解释性语言,读一行解释一行

 

5) 运行性能较差,没有ruby 哈哈哈哈

 

6) lib(库文件)多,声音视频,数据挖掘,支持的东西多

 

7)可读性高

 

特点

1GIL:全局解释锁  Global Interpreter Lock

不能利用多块cpu,所以使用多进程机制(并行)解决GIL,消耗资源。

javago 可以支持多cpu

 

2)面向对象

3) java static 块写程序,就和写脚本一样

 

编程环境:

1vim

vim 中设置缩进为4个空格

touch /.vim/vimrc

 68set encoding=utf-8

 69set number                

 70set hlsearch      高亮显示

 71set tabstop=4   一个tab四个空格

 72set shiftwidth=4

 73set expandtab

 

2python       

         退出         exit() | Crtl+d

         帮助         help(str)   查看字符串帮助文档

 

3pycharm

 

基础知识

基本运算

wKiom1hvrRDhF5vEAAAqYSCM40o505.png

变量类型变量的类型不指定,直接定义

基本类型和强制类型转换

wKiom1hvrRHBVqm1AACBhM1A9Vc216.png

 

如果不强制类型转换,两种不同的类型运算就会报错,这就是强类型的编程语言的特点

 

wKioL1hvrRjjTDwdAAA7nC8ehmk680.png

 

 

布尔类型和逻辑运算

True

False               0 None '' [] {}

 

1)      []

 

a=[]   // a=[1,2,3]

if a:

   print 'a:',a

else:

   print 'empty'

 

2)      None

 

a=None

if a == None

   print 'None'

 

if a is None:

   print 'None'    常用

 

 

3)and or not in

 

wKiom1hvrRmDOI01AAAs_oLMh6c889.png

 

if 'a' in[1,2,4]

print ...

 

注意    尽量不用浮点数

 

list 列表

没有长度限制,可以有元素也可无,支持不同类型的存储

c={1,2,3,4}

c.append(5)

c.append(XX)

print c

 

tuple 元组

(1,2)

tuple 元组:长度不可变

str ,string,长度不可变

 

dict字典   键值对,key-value

 

d={

 

   "a":"abc",

   'b':123,

   'c':[1,2,3],

   'd':{'a':111}

}

print d['a']    abc

print d['b']    123

 

wKioL1hvrRrzY4cPAAB1V1CwiT8932.png

 

两种引用

wKioL1hvrRviTtm1AAAoFRm9Ooo874.png

 

 

""" 可以换行,通常用作方法的注释

 

wKiom1hvrRvRCJArAAA2a-dui6Y347.png

 

 

文件操作


读取文件

with open('lalala.txt','r')as f:

   test=f.read()

print test

 

写文件(覆盖写入)

 

out=miaomiao

with open('lalala.txt','w')as f:

   f.write(out)

 

wKiom1hvrR3BixIuAADIT7M8Wmc303.png

 

 

 

语句

 

1)pass    空操作。

if xxx='a'

   pass

else:

    do...      程序主体

 

2)break      跳出当前循环。

3)continue 本次循环continue 以下的语句不执行。

4while True永真循环用break跳出

   do...

   if xxx=='aaa'

       break

 

5)for 

1)一重循环和缩进

 

for item in [1,2,3,4,5]:    

         printitem         在循环语句中

print a                         不在循环语句中

 

python   靠缩进区分语句是否在循环中

 

2)两重循环

 

for item in [1,2,3,4,5]:

         printitem

                   foriteml in ['a','b','c']:

                            printiteml

wKioL1hvrR6C5pIAAABdZuMMqN8615.png

                        

wKioL1hvrSCxjHF0AAASqRJZrqk721.png

 

 

小练习:输出菱形。

 

注意:循环逆序输出用 for x in range(4)[::-1]:

 

wKiom1hvrSKQG1v3AAC_86JII2I775.png

 

 

 

输入

input      输入数字

raw_input  输入字符串

 

 

a=input("input a number ")

print type(a),a     显示输入的类型


wKioL1hvrSPyw7z7AACCC53DTbM683.png

 

一般情况下,用input不能输入字符串

 

wKiom1hvrSbSnLYzAACsAsM6-uo053.png

 

通常用raw_input输入字符串

 

wKioL1hvrSazmyR_AAB8QpRsLO8503.png

 

注意:但是以     字符串  方式,input也能输入字符串~~


wKiom1hvrSmBPMItAAB02OJs7fM296.png

 

小练习:猜数字,三次机会,猜对就退出,大:提示大,小:提示小。

 

wKiom1hvrSrzz-dzAADhPSEl1DU225.png

 

wKioL1hvrSvD8_aUAAAz9D5mirE702.png

 

 

方法

 

定义类(驼峰命名法)

CreateStudentInfo

 

定义方法(小写和下划线)

 

def print_param(p1,p2,p200):

   print param

return 'a' //要是没有return 默认return None

 

print_param('ss')   调用方法(只看方法名,没有方法的重载)

 


常用方法

 

  1. len()         string list dict长度的方法

print lenc

 

  1. del()          删除的方法,可以删除字典,列表list????

dd={'a':123,'b':456}

del dd['a']

wKiom1hvrS2RCuCzAACGrjGYQPs600.png

 

  1. type ()

  2. a)        []       :        list    列表

 

wKioL1hvrS6hWYpXAAB3Q43RzcI977.png

 

b)        ()       :        tuple         元组

 

wKiom1hvrS6QxY14AAB4rBA8V_s528.png

 

c)        ‘’       :        str    字符串


wKioL1hvrTDTgfseAAB53QNcfHQ615.png

 

d)        {}       :        dict  字典(键值对)

 

wKiom1hvrTLjetTZAAB3wEbNwq4257.png

 

e)        None         :        NoneType

 

wKioL1hvrTLS4KIzAAB_m5qKsDk115.png

 

f)         True          :        bool

 

wKioL1hvrTWBpbfFAACAmhtu9Uc438.png

 

 

小练习

判断输入的年份,是否为闰年。(能被4整除但不能被100整除)

 

wKiom1hvrTbB6MlcAACoNCifkl8367.png

 

常识

yield  生成器

globle 全局变量

 

wKiom1hvrTjBAyaTAACenI-fdjc018.png

 

 

解释器

cpython    :traditional

pypy:use py explain py

jython       :java

大多支持2.7

 

异常处理

raise Execption('xxxx error')

try/except/finally

 

导入包

import

from xxxx import

 

断言

assert a=='bsss','error info ...'

 

赋值

a=1

a=[]

a={}

 

交换变量

a=1

b=2

a,b=b,a

 

wKioL1hvrTqS1rDGAAB7F3nCJzw390.png

 

 

 

set 集合(去重)

应用:list去重

 


a=set('aba')    //只有字符串才用这种

print a

a=set (['a','a','b'])

print a

 

print 'b' in a 某个元素是否在集合内部

True   

False  不在

 

b=set('abc')

 

print a-b  减没了

print b-a  

print a&b   交集

print a|b  并集

print b>a   比较集合的数量 True

 

wKioL1hvrTuwi703AADqh5c2n_I119.png

 

 

给集合添加元素:   添加位置为第一个元素后面,即成为第二个元素

a.add('d')

print a

 

把集合转换list

print list(a)

 

wKiom1hvrT6C86NxAACJPlmQ0OM575.png

 

 

小练习

求出两个集合中的相同元素和不同元素。

 

wKioL1hvrT-BbJ15AACg-u-JQzU135.png

 

 

 

模块和包

模块:     一个py文件就是一个模块(module

包:         是一个包含一个_init_.py文件的文件夹

 

导入(引用)

importfrom import 区别

 

import (变量等from .模块

import   模块中的(变量等

自己写

不同包中变量名会相同外部的包,变量等会冲突


 用什么导什么


 import 一般不能计算,计算写在方法里

        

       

    

循环导包会产生错误

 a import b, b 不能import a,不能产生自循环

敲黑板:所以应该局部导入,减少类似错误!!!!!

 

wKiom1hvrUPjt1CFAADtYvXzYwY732.png

 

wKioL1hvr73zpkBaAADtYvXzYwY087.png

 

 

工具

 

pip install tornado

 

pip list   列出当前列表

pip install -r requirements.txt  依赖

 

requirements:

 

Django == 1.5.4             ==版本   什么都不写,最新的

MYSQL-python==1.2.4

 

 

pip uninstall <package_name>

pip uninstall -r requirements.txt   卸载所有

 

pip install -U <package_name>   升级

 

pip show -f <package_name> 显示包所在的目录

 

pip search <key>

 

pip list -o 查询所有可以升级的包

 

下载一个pip的包

pip install <package> -d <path>

 

mkdir myproject

wKiom1hvr77RnKIRAAAqhoOxXp4190.png

resources  存放证书等...

src :python shell SQL

test

 

src/python/launcher.py  入口文件

src/python/test_str

src/python/test_str/__init__.pyc  运行python后生成的编译文件

src/python/test_str/__init__.py     通常一个可导入的包中,有这个文件

 

vim __init__.py

if __name__=='__main__'     可以自己用,不能被别人导入??????

   print 'test str'

 

 

编写入口文件。

 

vim launcher.py

#encoding=utf8

import test_str

import time

 

while True:

         print'working...'

         time.sleep(1)

 

 

wKioL1hvr77Q7M2tAAAw2D5BFu4650.png

 

wKiom1hvr8CANvLZAAB_TzyadQg815.png

 

 

注意

 

1.launcher.py 可以importtest_str(别的包或模块)

2.launcher 不能被别人import

3.#encoding=utf8    文本中如果想要有汉字就加这句。

 

 

 

 

字符串
基础

wKioL1hvr8DSiloPAAA77hngmv4045.png

 

wKiom1hvr8GTGCXmAAAXWjJn1bM595.png

 

字符串的拼接         "aaa" +"bbb"

字符串的乘法         a=a*3      "aaabbbaaabbbaaabbb"

 

a1=a[1]

print type(a1),a1      一个字母拿出来是字符串,不是字符,python中没有字符概念

 

字符串中常用方法

# encoding=utf8

 

a='today is a  %s day %s'%('good','la')

print a

 

print a.find('d')              找到a中第一次出现d的位置(从0开始哦)

 

print a.endswith('la')         a是否以la结束(truefalse

 

print a.replace(' ','_')            a中空格替换成下划线

 

print 语句中不能。。。。

 

print a.split('_')  以下划线为分隔符,切分成list 

 

 

wKioL1hvr8HQww4XAAAvLgaW3js117.png

 

 

 

索引切片         [start:end:step(步长)]

 

字符串的切片

 

# encoding=utf8

a='today is a %s day %s'%('good','lia')

print '',a

print '0                     -10'

 

print '0:5 ',a[0:5]

print '1:5 ',a[1:5]

print '1:-1 ',a[1:-1]

print '-2:-1',a[-2:-1]                    ???

print '-1:-2',a[-1:-2]      切片是从左到右,所以从右到左没有值

 

print a[-2:-3:-1]                           ???

print a[::-1]               #每个单词反转

 

wKiom1hvr8LgRCsbAAAfy0QyFi8921.png

 

练习

 

#encoding=utf8

a='abcdefghijklmnopqrstuvwxyz'

print a.find('i')

print a[-3:-1]

print a[23:26:]

print a[7:10]

print a[15:19:]

for i in range(26):

   if (i%2):

        a=a[:i]+','+a[i+1:]#   字符串本身不能直接赋值,利用切片的方法改变字符串的值

print a

a='abcdefghijklmnopqrstuvwxyz'

print a[::-1]

l=len(a)

print l

import sys

for i in range(l):

   if (i%4==0):

       print a[i:i+4],

       if(i+4>l):

            sys.stdout.write('*'*(4-l%4))       

 

#       sys.stdout.write输出无空格而且不换行

#       '*'*n          *输出n

 

 

wKiom1hvr8OzGXTMAAAIXXmC9BE139.png


 

列表的切片

#encoding=utf8

l=[]

l=[1,2,3,4]

l=list('abcd')

print l

 

print l[1]

print l[1:3]                  数空空    0a1b2c3d

print len(l)

 

ll=[1,2]+[3,4]             列表的拼接

print ll

 

wKioL1hvr8LjRSfwAAAihodEifM995.png

 

print '---------------------'

l2=[]

l2.append('haha')#  追加

print l2

 

 

for i in range(100):

   l2.append(i)

print l2

 

 

l4=[[0],[],[2]]

print l4[1:]

 

l3=[1,2,3,4]

l3.insert(3,0)              insert(位置,值)

print l3

 

 

l4=['a','b','c','a','c']

print l4.count('c')     统计字符出现的次数

l4.sort()

 

print l4

l4.reverse()      反转

print l4

 

del l4[2]             删除

print l4

 

wKioL1hvr8TRWBagAAAZaVH8L1M857.png

 

 

append()返回值为None

 

wKiom1hvr8XSrVrhAAAZtgodUzw923.png

         

wKioL1hvr8WSGm5JAAAESjCN-7k571.png

 

 

常用方法

pop()                                弹出最后一个值,list中就没有这个值了

extend()                              把两个列表加在一起

append()                             往列表里,添加元素

reverse()                              反转

del l4[2]                                删除

insert(位置,值)        插入

count('c')                             统计字符(c)出现的次数

 

isinstance

#encoding=utf8

L=[1,2,5,6,2,6,4,3,2,'waa']

import types

print [_ for _ in L if isinstance(_,types.IntType)]#   如果是int类型,才输出

print [_ * 10 for _ in L if isinstance(_,types.IntType)]#  给每个值*10输出

 

wKiom1hvr8aRG4UdAAAp3fcNjSQ628.png

 

#去重

L1=[1,2,5,6,2,6,4,3,2]

rs = []

[rs.append(_) for _ in L1 if _ not in rs]

print rs

 

L1=[1,2,5,6,2,6,4,3,2]

print [_ for _ in L1 if (L1.index(_)+1) %2==0]

 

 

print "------------"

m=[1,3,4,2,5,6,2,7,3,2,7,10]

n=[2,5,8,2,4,3]

same = []

diff = []

 

 

[same.append(_) for _ in n if _  in m if _ not in same]

[diff.append(_) for _ in n if _ not in m]

[diff.append(_) for _ in m if _ not in n if_ not in diff]

print same

print diff