基础性质
概念
1)历史
发展久,与java同期
2)版本
3.X 2.7lib多 常用
3)脚本语言,不需要编译
4)解释性语言,读一行解释一行
5) 运行性能较差,没有ruby差 哈哈哈哈
6) lib(库文件)多,声音视频,数据挖掘,支持的东西多
7)可读性高
特点
1)GIL:全局解释锁 Global Interpreter Lock
不能利用多块cpu,所以使用多进程机制(并行)解决GIL,消耗资源。
java,go 可以支持多cpu
2)面向对象
3) 在java static 块写程序,就和写脚本一样
编程环境:
1)vim
在vim 中设置缩进为4个空格
touch /.vim/vimrc
68set encoding=utf-8
69set number
70set hlsearch 高亮显示
71set tabstop=4 一个tab四个空格
72set shiftwidth=4
73set expandtab
2)python
退出 exit() | Crtl+d
帮助 help(str) 查看字符串帮助文档
3)pycharm
基础知识
基本运算
变量类型:变量的类型不指定,直接定义
基本类型和强制类型转换
如果不强制类型转换,两种不同的类型运算就会报错,这就是强类型的编程语言的特点
布尔类型和逻辑运算
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
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
两种引用
""" 可以换行,通常用作方法的注释
文件操作
读取文件
with open('lalala.txt','r')as f:
test=f.read()
print test
写文件(覆盖写入)
out=miaomiao
with open('lalala.txt','w')as f:
f.write(out)
语句
1)pass 空操作。
if xxx='a'
pass
else:
do... 程序主体
2)break 跳出当前循环。
3)continue 本次循环continue 以下的语句不执行。
4)while 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
小练习:输出菱形。
注意:循环逆序输出用 for x in range(4)[::-1]:
输入
input 输入数字
raw_input 输入字符串
a=input("input a number ")
print type(a),a 显示输入的类型
一般情况下,用input不能输入字符串
通常用raw_input输入字符串
注意:但是以 ’字符串’ 方式,input也能输入字符串~~
小练习:猜数字,三次机会,猜对就退出,大:提示大,小:提示小。
方法
定义类(驼峰命名法)
CreateStudentInfo
定义方法(小写和下划线)
def print_param(p1,p2,p200):
print param
return 'a' //要是没有return 默认return None
print_param('ss') 调用方法(只看方法名,没有方法的重载)
常用方法
len() 求string list dict长度的方法
print len(c)
del() 删除的方法,可以删除字典,列表list????
dd={'a':123,'b':456}
del dd['a']
type ()
a) [] : list 列表
b) () : tuple 元组
c) ‘’ : str 字符串
d) {} : dict 字典(键值对)
e) None : NoneType
f) True : bool
小练习
判断输入的年份,是否为闰年。(能被4整除但不能被100整除)
常识
yield 生成器
globle 全局变量
解释器
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
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
给集合添加元素: 添加位置为第一个元素后面,即成为第二个元素
a.add('d')
print a
把集合转换list
print list(a)
小练习
求出两个集合中的相同元素和不同元素。
模块和包
模块: 一个py文件就是一个模块(module)
包: 是一个包含一个_init_.py文件的文件夹
导入(引用)
import和from import 区别
import (变量等…)from 包.模块 | import 模块中的(变量等…) |
自己写 | 不同包中变量名会相同外部的包,变量等会冲突 |
用什么导什么 | |
import 一般不能计算,计算写在方法里 |
循环导包会产生错误
a import b, b 不能import a,不能产生自循环
敲黑板:所以应该局部导入,减少类似错误!!!!!
工具
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
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)
注意:
1.在launcher.py 可以importtest_str(别的包或模块)
2.launcher 不能被别人import
3.#encoding=utf8 文本中如果想要有汉字就加这句。
字符串
基础
字符串的拼接 "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结束(true,false)
print a.replace(' ','_') 将a中空格替换成下划线
print 语句中不能。。。。
print a.split('_') 以下划线为分隔符,切分成list
索引切片 [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] #每个单词反转
练习
#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次
列表的切片
#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
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
append()返回值为None
常用方法
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输出
#去重
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
转载于:https://blog.51cto.com/12059878/1889894