切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
《python参考手册》之一[复制链接]
发表于 2014-6-20 14:35:26 | 显示全部楼层 |!read_mode!
本帖最后由 c4rt1y 于 2014-6-20 14:51 编辑

写了很久很久,没想到第一章内容要写这么多,我感觉又不怎么具体,所以,有点拖拖拉拉的,今天终于写完了。发出来给大伙瞧瞧撒,可能中间有些写错的,勿喷,可以提出来,非常感谢
#序 环境搭建一块救飘过了,下载软件,一直继续救ok

#1.1运行python

#这个比较简单,输出hello world
print 'hello world'
#注意 在python3中,print作为了一个函数
print('hello world')

#python的交互模式提供了一功能 _代表保存上次执行的结果
<<<1+2+3   #6
<<<_+9     #15
#上述请在python交互式中测试


#1.2变量和算术运算符
a=1.1
b=3
print a*b #乘 3.3000000000000003

#可以写成一行
a=1.1;b=30;a*b
#但是一般情况,我们希望可以换行

#打印的方法
a=1000;b=0.5;c='12345'
print a,b,c                        #1000 0.5 12345

print '%d %f %s'%(a,b,c) #1000 0.500000 12345 #这种必须后面是元组,下面不再重复
print '%d %0.2f %s'%(a,b,c) #1000 0.50 12345
#%0.2代表宽度  %10代表10个宽度,自测

#format() 字符串格式化
print format(a),format(b),format(c)        #1000 0.50 12345
print format(a,'3d'),format(b,'0.2f'),format(c,'s') #1000 0.50 12345
print "{0:3d} {1:0.2f} {2:s}".format(a,b,c)        #1000 0.50 12345


#1.3条件语句
a=1;b=2
#案例一:
if a>b:
    print 'a大于b'
else:
    print 'a小于b'

#案列二
if a>b:print 'a大于b'
else:print 'a小于b'
#在python中:后面可以接只有一行的代码,如果内部有多行就不可以这样写,一般建议用案例一,漂亮整洁

#案列三:
if a>b:
    pass                        #代表Do nohing
else:
    print 'a小于b'

使用or,and和not关键字建立布尔模型
if a>1 and a<1 \
and b!=3:pass                #python中\ 可以代表换行继续写上面的内容
else:print 'my god'

a=(1,2,3,4)
1 in a #True        in判断是否在里面,类似于其他语言的switch


#1.4文件输入和输出

#获取输入内容
方法一
import sys
sys.stdout.write('Enter your name?')        #输入内容
name=sys.stdin.readline()                                #获取输入内容
#方法二
name=raw_input('Enter your name?')        #简化 接收字符串
name=input('Enter your name?')        #简化 接收整形
#备注:在python3.0之后,raw_input和input和在一起使用input了

#文件读取
方法一:
f=open('1.txt')        #这是打开相对路径的1.txt;返回一个文件对象,默认读取
line=f.readline().strip()        #读取一行,去掉左右空格
while line:                        #如果为真
    print line                #打印,会自动换行
    line=f.readline().strip()
f.close()
方法一:
f=open('1.txt')        #这是打开相对路径的1.txt;返回一个文件对象,默认读取
line=f.readline()        #读取一行,去掉左右空格
while line:                        #如果为真
    print line,                #打印,使用','不换行
    line=f.readline() 
f.close()
#这种执行效率没有上面的高

#文本写入
f=open('2.txt','w')        #这是打开相对路径的2.txt;返回一个文件对象,写入
print >>f,'1111'    #输入内容这是python2.0的下面
print >>f,'%d'%(111)#输入内容这是python2.0的下面
#print(f,'1111',file=f)    #输入内容这是python3.0的下面
#print(f,'%d'%(111),file=f)#输入内容这是python3.0的下面
f.write('aaaa')                        #写入内容  我一般用这种
f.close()                                #只有关闭了才能发现写入内容


#1.5字符串
字符串可以使用三种形式单引号(''),双引号(""),三个引号(“”“"""或者'''''')
a='hello world'
b="python test"
c='''i coming from alone'''
#必须左右对其
#单引号和双引号不可以隔行,而三引号可以换行
'''
1234
fuck
'''
#引号的作用,如果不做赋值,那么他可以作为一行注释,而python注释还有个#

#字符串索引从0开始
#切片  [起始:终点:步长]  默认起始位0,终点为末尾,步长为1
a='hello world'
print a[4]                #o
print  a[:5]        #world
print [3:8]           #lo wo
a[3:10:2]                #l ol

#range(起始:终点:步长)   默认起始位0,终点为末尾,步长为1
range(10)                #[0,1,2,3,4,5,6,7,8,9]
range(1,10)                #[1,2,3,4,5,6,7,8,9]
range(1,10,2)        #[1, 3, 5, 7, 9]

#还存在一个xrange,不过他返回的是xrange对象,而不是列表
xrange(10)                #xrange(10)

#这也算切片的高级吧,在切片中执行for语句
[i for i in range(10)]                #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[i for i in xrange(10)]                #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#这样子看,xrange和range没区别,但是执行的效果一样,那么执行效率上range要先把他解析成列表,二xrange不需要
#再换个看看
[i for i in xrange(10) if i%2]        #[1, 3, 5, 7, 9]
[i for i in range(10) if i%2]        #[1, 3, 5, 7, 9]

#拼接(+)
print '33'+'44' #3344   字符串相加
print 33+44     #77         整形相加
#我不建议在大项目中使用这种,因为会占用大量空间

str()、repr、format都可以把整形转为字符串
x=3.1
str(x)                #'3.1'
repr(x)                #'3.1',据说是精度比str精确,但是我在2.7下不曾发现
format(x,'0.1f') #'3.1' 


#1.6列表
#使用[]
name=["社长","菊花","你们有没有邪恶"]

#提取
a,b,c=name        #a="社长" b="菊花" c="你们有没有邪恶"

#如何访问
name[0]                #社长
name[0]="小二"        #替换
name.append("c4rt1y")  #追加,放在最后面
name.insert(2,"pp")        #定索引添加,可以试下name[2]为几何
#还有很多的方法,自己dir(name)

#关于切片吗,我在上面1.5讲过了

#使用+来连接
a=[1,2,3]+[4,5]        #[1,2,3,4,5]
#我不建议使用此方法,小程序还可以,大程序会占用空间
[1,2,3].extend([4,5])   #[1,2,3,4,5]推荐此方法

#空列表
name=[]
name=list()

#列表中可以包含任意的python对象类型
a=[1,2,3,'3',[1,3],(1,2,3)]
#这个就类似于数组了
a[4][2]    #如果不存在,而你写出来会报错,我们看第四个索引的第二个位3

#列表实例
import sys                                #加载sys模块
if len(sys.argv)!=2:        #判断是否加载两个参数
    print "Please supply a filename!"
    raise SystemExit()
f=open(sys.argv[1])                #假如代码保存在1.py,那sys.argv[0]值为1.py,而sys.argv[1]则是文件名
lines=f.readlines()                #读取全部,不过这个造成的是每个后面都有换行符
f.close()                                
fvalues=[float(line) for line in lines]        #把所有的数值从字符串转为浮点数,不过不能有字符
#打印最小值和最大值
print "The minimun value is ",min(fvalues);
print "The maximun value is ",max(fvalues);


#1.7元组
a=(1,2,3,4)        #元组在python使用的是()
b=1,2,3,4         #这样子也可以是元组
c=1,                #加上逗号也是元组

#看下列操作
a,b=3,2         #有点感觉没,其他的和列表差不多

#空元组
a=()
b=tuple()

#列表和元祖的差别
#你们dir(list)和dir(tuple),你们会发现方法基本一样,但是元组方法少多了,然后呢。元组的值一定义就无法修改
#大概可以猜出来元组有啥好处呢,第一,值无法改变,二查询速度比列表快,其他操作都一样


#1.8集合
#集合使用
t=set("hello")        #set(['h','e','l','o'])        #集合是什么,就是不允许重复的内容存在

#空集合
a=set()        

#集合
a=set([1])
a={1}

#集合的并集、交集、差集和对称差集
a={1,2,3}
b={2,3,4}
a|b                #并集        set([1,2,3,4,5])
a&b                #交集        set([2,3])
a-b                #差集   set([1])
a^b                #对称差集        set([1,4])

#追加
a.add(4)        #set([1,2,3,4])
a.update([3,4,7])        #set([1,2,3,4,7])

#删除
a.remove(7)  #set([1,2,3,4])y


#1.9字典
#{}这就是字典的规格,如果存在数据,必须要有键和键值
a={"社长":"菊花"}        #这是可以的
b={"社长"}                        #这个会被认为是集合,切记

#字典的索引不在是从0开始了,而是通过键
a={"aa":'c4','bb':'eval'}
a['aa']                #c4  a是键,bc4是键值

#字典和列表一样可以修改里面的值

#建立空字典
a={}                #再次提醒和集合的区别
a=dict()

#转化为列表
a={"aa":'c4','bb':'eval'}
list(a)                #['aa','bb'] 这里得注意是把他们的键作为内容

#删除键
del a['aa']


#1.10迭代和循环
#案例一:
for n in [1,2,3,4]:
    print n

#案例二:
for n in range(10):
    print n

#案列三
a="hello world"
for c in a:
    print c


#案列四
a={"aa":'c4','bb':'eval'}
for c,b in a:
    print c,b

#案列五:
a=open('1.txt')        #读取每行
for i in f:
    print i

#之前讲了一点,未来再讲详细讲解


1.11函数
#def 是函数的定义

#案例一
def pp():                #pp是函数名,这是一个无参无返回的函数
    print 'this is first'
pp()        #this is first    就这么调用

#案列二
def pp(a):                #pp是函数名,这是一个有参无返回的函数
    print 'this is second '+a
pp(2)        #this is second 2    就这么调用

#案列三
def pp():                #pp是函数名,这是一个无参有返回的函数
    a=1
    return a
print pp()        #1   就这么调用

#案列四
def pp(a):                #pp是函数名,这是一个有参有返回的函数
    return a
pp(1)        #1   就这么调用


1.12生成器
#yield的使用,必须在函数里面使用
#案列一
def countdown(n):
    print "counting down!"
    while n>0:
        yield n                 #生成一个值
        n-=1

c=countdown(5)
c.next                #counting down  5         在python3中next改为__next__()
c.next                #4
c.next                #3

for i in countdown(8):        #读取的方法
    print i,                 
#输出1 2 3 4 5 6 7 8

#书上的例子不生动,我来扯扯yield的基本用法吧

#案列二
def addlist(alist):
    for i in alist:
        yield i + 1
#这个例子我只是想说同行可以添加简单的数学运算,也可以在这行的上面输出

for i in addlist([1,2,3]):        #读取的方法
    print i,                 
#输出2,3,4

#案列三
#yield有几个参数比较重要,next,send,close,throw.next我们介绍过了next
def h():
    print 'Wen Chuan',
    m = yield 5  # Fighting!
    print m
    d = yield 12
    print 'We are together!'

c = h()
m = c.next()  #m 获取了yield 5 的参数值 5
d = c.send('Fighting!')  #d 获取了yield 12 的参数值12

#close就代表这关闭,throw代表如果程序出错,抛出的异常

#案列四
def test(t1,t2):
    for i in t1:
        if t2 in i:
            yield i

a=[1,2,3,'aa','dadas','mygod']
for i in test(t1,'god'):
    print i 
#这段代码什么意思,我不介绍了,你们test下呗


#1.13生成器
#其实就是yield.send的用法简介,飘过


#1.14对象与类
#我们之前学过列表
items=[32,42]        #定义列表
items.append(12)        #追加
#然后我们使用dir下他有什么方法
dir(items)
#发现很多以__开始,__结尾的,这些就是它的内置对象
items.__add__([50,20])        #类似于append功能

#类对象
#这里内容蛮多的,我也不知道怎么说
class Stack(object):
   def __init__(self):                        #这话一段是必备,厨师化
       self.stack=[]
   def push(self,object):
       self.stack.append(object)
   def pop(self):
       return self.stack.pop()
   def length(self):
       return len(self.stack)
#object是python所有类的父类,也可以忽略,也可以写进去
#不过在def push中出现代表的他是一个参数
#如何调用呢
s=Stack()                #创建对象
s.push('dave')        #添加进去
s.push(42)
s.push([1,2,3])
x=s.pop()                #这是列表的属性,冲列表里删除最后一个
y=s.pop()
def s                         #删除s

#上面是简单的对象,下面讲下继承
#刚才我们讲的是创建一个列表,那我们直接继承他,也一样拥有他的所有属性
class Stack(list):
    #为Stack添加push方法,不需要添加pop,因为已经存在
    def push(self,object):
        self.append(object)
#代码是不是瞬间优化了

#静态方法(我也不清楚书上为啥将这么快)
class EventHanlder(object):
    @staticmethod
    def dispatcherThread():
        while(1):                
                #请求等待

#静态方法的调用是使用类型.函数名
EventHanlder.dispatcherThread()
#至于它的用法,就这么样,作用是减少内存消耗


#1.15异常
#我觉得我讲了这么多,你们在敲代码的时候应该也出现报错了吧,那就是异常
#这里就是告诉你如果出现异常,怎么解决

#比如我们打开一个文件,文件不存在,则可以这么写
try:
    f=open('xss.txt')        
except IOError as e:
    print e                 #爆出错误信息


#1.16模块
#之前我们也调用过模块,就是import函数
#这里我们就扯下怎么书写自己的模块
#第一种方法
#建立文件夹a,在文件夹中写入a.py,然后建立setup.py
from distutils.core import setup
setup(
        name = '1',                                #文件名
        version = '1.0.0',                        #文件版本
        py_modules = ['a'],                        #函数名
        author = 'coco',                        #作者
        author_email = '183752170@qq.com',        #作者邮箱
        url = 'http://coco.itsec.pw/',                #作者主页
        description = 'A simple demo',                #描述
)
#然后cmd,进入a页面,然后输入 python setup.py sdist,这就做成了我的包
#然后,如果想使用这个包的话,在cmd下,进入这个包里面 输入python setup.py install


#另一种,在当前目录下直接调用(这种可以直接import 文件名)  

#模块导入顺序,先查当前目录,再去找Lib下找包,在里面建立__init__.py(空文件也行)访问方式, 目录.文件名.函数名
#import,import as ,form import 
#import 目录.文件名.函数名
#import 目录.文件名.函数名 as 自定义名称
#form 目录.文件名 import 函数名 

#python的lib目录或者在当前目录创建test文件夹,必须放入__init__.py文件,内容为空,test文件夹里面有内容
#         __init__.py
#    a.py
#然后 调用方式为以下几种
#Import test.a
#From test import a
#From test import a as pic
#如果存在多个文件a.py ,b.py,c.py,那么我们可以在__init__.py文件夹内直接定义
#__all__=[‘a’,’b’,’c’],然后直接调用包名就行。



#1.17获得帮助
#这个内容比较简单,主要就是获取如何使用模块(属性方法)的方法
#我们以os模块为例
help(os)
dir(os)
os.__doc__


搞了一个blog,欢迎一起玩耍http://c4rt1y.blog.51cto.com
已有 1 人评分金币 收起 理由
店小二01 + 50 很给力!

总评分: 金币 + 50   查看全部评分

发表于 2014-6-20 19:34:52 | 显示全部楼层
很好,很精辟,如果有时间可以多比较下2.x和3.x的区别,听说区别很大,不知道具体怎么大?
发表于 2014-7-26 13:26:12 | 显示全部楼层
不错,

代码区

GMT+8, 2019-11-17 19:02

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部