python 学习笔记1



1:python 的优缺点
    Python 的哲学就是简单优雅。尽量写简单的代码
    python 适合开发 网站 后台服务  以及日常用到的小工具 系统管理员需要用到的脚本等等
python 运行的速度相对于别的语言来说较慢  并且Python的代码不能够加密
2:Python的安装
    在官网上下载Python2.7版本 然后安装 将安装后的python.exe的路径配置到环境变量中。在cmd中运行Python 查看是否配置成功。
3:Python的不同解释器
    由于Python语言从规范到解释器都是开源的,所以也就存在很多的解释器。
    CPython 官方解释器 提示符是<<<  最广泛
    IPython 基于CPython的一个交互式解释器 提示符 In[序号]:
    PyPy 采用jlt技术 对PYTHON 代码进行动态编译 提高速度 与CPython 存在一些区别 可能导致python 代码的运行结果不相同
    Jpython java 平台上的解释器,可以直接把python 编译成java的字节码
    IronPython  .NET上的Python解释器。

4.Python的交互式环境的应用。
     1:Python的交互式环境下的数字计算
    >>>100+200
    300
    >>>

    2:Python打印输出
    >>>print "Hello World!"
    >>>Hello World


    在Python的交互式环境下 可以直接输入代码然后得到结果。当然这样是没有办法保存代码的,只能一次使用 ,书写Python的时候绝对不要使用windows自带的记事本 因为其会增加多余的字符 导致解释出现错误

5:Python的I/O
    print 加上字符串  多个字符串之间用 , 连接  Python遇到‘,' 逗号  会输出空格
        print 'hello world'
        print 'I','love','you'


    print 打印整数  
        >>>print 300
        300
        >>>print '100+200 =',100+200
        100+200 = 300


    raw_input() 让用户输入字符串 并将其保存在变量中
        >>>name = raw_input()
        Michael
        >>>name
        'Michael'




二: python 基础
        1:Python语言采用缩进方式 缩进最好使用4个空格来进行  大小写敏感
        2:Python的注释  #  
        3:当语句以 : 结束时 缩进的语句视为代码块。
        5:数据类型和变量:
              整数,浮点数,字符串(r''  两个引号之间的内容不发生转义  '''...''' 表示多行内容) ,布尔值(and or not ),空值None
              在Python中同一个变量可以反复的赋值 而且可以使不同类型的变量
               a=123#a是整数
               print a
               a='ABC'
               print a#a是字符串 
              这种变量本身的类型不固定的语言叫做动态语言, 
        a='ABC' Python解释器干了两件事:  1:在内存中创建一个'ABC'的字符串 2:在内存中创建一个名为a的变量 并把它指向'ABC'
        因此:
                a='ABC'
                b=a
                a='XYZ'
                print b
                打印的结果是'ABC'
        6:常量
            Python中通常使用全部大写的变量名表示常量
        7:字符串和编码
           1: ord() 和chr()函数 可以将对应的数字和字母转换 ,Python最早的版本只支持ASCII编码
       
     <span style="white-space:pre">	</span>>>>ord('A')
        65
        >>>chr(65)
        'A'

            2:python 后来增加了对Unicode的支持 以Unicode表示的字符串用u'.....'表示
            >>>print u'中文'
            中文
            >>>u'中'
            u'\u4e2d'


            3:想要输出中文 必须使用Unicode 编码 或者UTF-8编码
            >>>u'ABC'.encode('utf-8')
            'ABC'
            >>>u'中文'.encode('utf-8')
            '\xe4\xb8\xad\xe6\x96\x87'  中文转换后将变为3个字符


            4:len() 函数得到字符串的长度
           5: decode('utf-8') 将utf-8编码的字符串转换成Unicode编码
            6:在保存源文件的时候通常这样写:
                #!/usr/bin/env python   告诉Linux系统这是一个Python可执行程序 
                # -*- coding:utf-8 -*-        告诉Python编译器 按照utf-8编码读取源代码


            7:Python字符串的格式化(在Python中格式化方法与C语言中是一致的用%实现)
                >>>'Hello,%s' % 'World'
                'Hello,World'
                >>>'hi,%s,you have $%d' %('zhuyu',10000)
                'hi,zhuyu,you have $10000'
                %d 整数 %s字符串 %f 浮点数  %x十六进制整数


        8:使用list和tuple
                1:list 是Python内置的数据类型 列表  list是一种有序的集合 可以随时添加和删除其中的元素
                        >>>classmates=['xxb','xxw','lyd']
                        >>>classmates
                        ['xxb','xxw','lyd']


                len()函数可以获取list集合元素的个数
                        >>>len(classmate)
                        3


                python 中使用下标 或者索引来访问list中的元素 相当于使用数组 需要保证下标不要越界
                        >>>classmates[1]
                        'xxw'


                python 中访问list元素不仅仅可以正向下标访问 而且还可以逆向下标访问 第一个元素的下标为-1
                        >>>classmates[-2]
                        'xxw


                list 是一个可变的有序的列表 所以可以往list中追加元素到末尾 使用 append()函数
                        >>>classmates.append('lc')
                        >>>classmates
                        ['xxb','xxw','lyd','lc']


                同时list还可以把一个元素插入到指定的位置 比如索引号为1的位置:使用insert(n,x) 方法
                        >>>classmates.insert(1,xx)
                        >>>classmates
                        ['xxb','xx','xxw','lyd','lc']


                删除list 末尾的元素 可以使用pop()
                        >>>classmates.pop()
                        'lc'
                        >>>classmates
                        ['xxb','xx','xxw','lyd']


                删除指定位置的元素 使用 pop(i)  i 为元素位置的索引
                        >>>classmates.pop[1]
                        'xx'
                        >>>classmates
                        ['xxb','xxw','lyd']


                元素替换  直接赋值 覆盖掉就可以 classmates[1]='lc'
                        >>>classmates[1]='lc'
                        >>>classmates
                        ['xxb','lc','lyd']


                注意哦:list 中的元素可以有重复的值  并且list元素中的数据类型可以不相同
                        >>>classmates.append(12)
                        >>>classmates
                        ['xxb','lc','lyd',12]


                 list 中的元素也可以是一个list的类型
                        >>>s=['python','java',['asp','php'],'scheme']
                        >>>len(s)
                        4
                        >>>p=['asp','php']
                        >>>s=['python','java',p,'scheme']
                获取到 'asp' 可以是 s[2][1]

                        >>>s=['python','java',['asp','php'],'scheme']
                        >>>len(s)
                        4
                        >>>p=['asp','php']
                        >>>s=['python','java',p,'scheme']
                获取到 'asp' 可以是 s[2][1]


                2:python 的 tuple  有序列表   元组  tuple 和list 相似 但是 tuple 一旦初始化后就不可以修改了
                        >>>classmates=('xxb','xxw','lc')
 >>>classmates=('xxb','xxw','lc')

                classmates 是一个tuple 类型 其不可以在进行修改 没有append() insertI() 等方法  其他方法和list 一样 但是不可以赋值
                不可变的tuple使代码更加 的安全  因此 可以使用tuple的尽量使用tuple
                tuple 陷阱:当你定义的时候 tuple 的元素就必须被确定下来  比如
                        >>>t=(1,2)
                        >>>t
                        (1,2)



                     
                如果要定义一个空的tuple 则
</pre><div style="font-family: 微软雅黑; font-size: 14px; line-height: 21px;"><pre name="code" class="html">  			 >>>t=()
                        >>>t
                        ()



                但是 要定义一个只有一个元素的tuple ,如果你这么定义
                        >>>t=(1)
                        >>>t
                        1


                定义的不是tuple 而是1 这个数  这是因为()既可以表示tuple 也可以表示算术运算中的小括号 产生了歧义  所以定义一个的时候必须加上一个  ,
                        >>>t=(1,)
                        >>>t
                        (1,)


                一个可变的tuple:
                        >>>t=('a','b',['A','B'])
                        >>>t[2][0]='X'
                        >>>t[2][1]='Y'
                        >>>t
                        ('a','b',['X','Y'])


               3:list 和tuple都是Python中的有序集合  一个可以变  一个元素不可以变 ,可以使用tuple的时候尽量使用tuple  因为元素不可变相对来说 安全
          9:条件判断和循环
                1:条件判断  if elif else  不要忘记:  和缩进规则(4个空格)
                        if  条件判断1 :
                            执行1
                        elif 条件判断2:
                            执行2
                        elif 条件判断3:
                            执行3
                        else:
                            执行4
                      
                        age=20
                        if age>=6:
                            print 'teenager'
                        elif age>=18:
                            print 'adult'
                        else
                            print 'kid'


                2:循环 
                    python 有两种循环 一种是    for...in   循环  依次把 list或者tuple 中的每一个元素迭代出来
                        names=['lc','xxw','xxb']
                        for name in names:
                            print name
                    结果
                        lc
                        xxw
                        xxb


                    python 内置 range()  函数 可以生成一个整数序列  比如  range(5) 生成的序列是从0开始 小于5的整数
                    
                   第二种循环是 while 循环 只要条件满足就不断的进行循环  比如计算100以内的所有奇数之和
                        sum=0
                        n=99
                        while n>0:
                            sum=sum+n
                            n=n-2
                        print sum


                3:在议 raw_input 函数
                        raw_input()读取的内容永远是字符串的形式返回的  因此想要读入的是一个整数 需要进行int() 强制转换
            10:dict 和set
                 1:dict Python内置的字典  相当于其他语言中的map 使用键值对的方式存储 具有极快的查找速度
                        >>>d={'xxb':99,'lc':89,'xxw':78,'lyd':67}
                        >>>d['xxb']
                        99


                  可以通过key 讲一个键值对放入到dict 中
                        >>>d['sjm']=78
                        >>>d['sjm']
                        78


                   可以通过 in 判断 key 是否存在
                        >>>'ddd' in d
                        false


                   也可以通过 dict  的get方法返回值判断  如果不存在则放回None (None 在交互式中不显示) get('ddd',-1)如果不存在返回-1
 
                       >>>d.get('ddd')
                        >>>d.get('ddd',-1)
                        -1

                    删除一个键值对可以通过 pop(key)来实现 对应的value也将会从dict 中删除
                        >>>d.pop('sjm')
                        78
                        >>>d
                        {'xxb':99,'lc':89,'xxw':78,'lyd':67}


                    注意:dict 的key 必须是不可以变化的对象  例如整数 字符串都是不可以变的 但是不可以用list做key 因为list 是可以变的  dict是无序的 并且dict的key值不可能相同
                2:set
                    set 与dict类似 也是一组key  的集合 但是不存储value 由于key 不重复  所以set 也是不重复的  并且set也是无序的    
                    要创建一个set 需要提供一个list 作为输入集合
                        >>>s=set([1,2,3])
                        >>>s
                        set([1,2,3])


                    set 中重复的值将会被过滤掉
                        >>>s=set([1,2,3,3,3])
                        >>>s
                        set([1,2,3])


                    通过add(key) 方法可以添加元素到set中 可以重复添加 但是会被覆盖
 
                       >>>s.add(4)
                        >>>s
                        set([1,2,3,4])

                    通过remove(key)可以删除元素
                        >>>s.remove(1)
                        >>>s
                        set([2,3,4])


                    set 可以做数学意义上的交集并集等操作
                        >>>s1=set([1,2,3])
                        >>>s2=set([2,3,4])
                        >>>s1&s2
                        set([2,3])
                        >>>s1|s2
                        set([1,2,3,4])


        三:函数
                abs() 去绝对值
                1:定义函数
 
                   def my_abs(x):
                        if x>=0:
                            return x
                        else:
                            return -x

                2:空函数
 
                   def nop():
                        pass

                pass 语句什么也不做 pass 可以用来做占位符 比如现在还没有想好怎么写函数的代码 就可以先放一个pass让程序先跑起来
                3:参数检查
                    调用函数的时候 如果参数个数不对 Python解释器会自动检查出来 并抛出一个typeError:  但是如果参数类型不对 Python解释器就无法帮我们检查
                 
   def my_abs(x):
                        if not isinstance(x,(int,float)):
                            raise TypeError('bad operand type')
                        if x>=0:
                            return x
                        else
                            return -x

                4: 返回多个值  在Python语言中可以放回多个值
                    import math
                    
                    def move(x,y,step,angle=0):
                        nx=x+step*math.cos(angle)
                        ny=y-step*math.sin(angle)
                        return nx,ny


                    这样就可以同时返回多个返回值
                    >>>x,y=move(100,100,60,math.pi/6)
                    >>>print x,y
                    151.961524227 70.0


                    其实python 返回的仍然是一个值 只是Python将其 封装到了tuple 中 然后在拆分。
                    >>>r=move(100,100,60,math.pi/6)
                    >>>print r
                    (151.961524227,70.0)


                5:函数的参数
                    1:默认参数  (必选参数在前  默认参数在后 否则Python的解释器会报错  默认参数必须指向不变对象)
                    2:可变参数(函数的参数个数是可变的)
                        仅仅需要在参数前边加上一个 * 就可以  在list tuple前面加上一个* 可以吧list或者tuple中的元素当做可变的参数传入到函数中
                        def calc(*numbers):
                            sum=0
                            for n in numbers:
                                sum=sum+n*n
                            return sum
                        >>>calc(1,2)                        
                        5
                        >>>calc()
                        0
                        >>>nums=[1,2,3]
                        >>>calc(*nums)
                        14


                    3:关键字参数
                        可变参数允许传入一个或任意个参数,这些可变参数在函数调用时后自动封装为一个tuple 而关键字参数允许你传入0个或任意个含参数名的参数 这些关键字参数在函数内部自动封装成一个dict
                        def person(name,age,**kw):
                            print 'name:',name,'age:',age,'other:',kw
                        >>>person('lc',21)
                        name: lc age: 21 other: {}
                        >>>person('xxw',21,city='zhejiang')
                        name:xxw age:21 other:{'city':'zhejiang'}


                    4:参数组合  
                        顺序必须是 必选参数 默认参数 可变参数 关键字参数
                        def func(a,b,c=0,*args,**kw):
                            print 'a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw
                        >>>func(1,2)
                        a=1 b=2 c=0 args=() kw={}
                        >>>func(1,2,c=3)
                        a=1 b=2 c=3 args=() kw={}
                        >>>func(1,2,3,'a','b')
                        a=1 b=2 c=3 args=('a','b') kw={}
                        >>>func(1,2,3,'a','b',x=1)
                        a=1 b=2 c=3 args=('a','b') kw={'x':1}
                        >>>args=(1,2,3,4)
                        >>>kw={'x':1}
                        >>>func(*args,**kw)
                        a=1 b=2 c=3 args=(4,) kw={'x':1}


                
                  5:小结:
                        默认参数一定是不可变参数  否则运行的时候会发生逻辑错误
                        *args 是可变参数 args接受的是一个tuple(有序集合 初始化后就不可以变化)
                        **kw 是关键字参数 kw 接受的是一个dict (相当与map)
                        可变参数可以直接传入 func(1,2,3) 又可以先封装成list 或者tuple 在通过*args传入
                        关键字参数可以直接传入 func(x=1,u=2)又可以先封装成dict在通过**kw 传入
                   6:递归函数


          四:高级特性
                1:切片(取一个list或者tuple的部分元素)
                        >>>l=['lc','xxw','xxb','lyd','sjm']


                    去前三个元素
                        >>>l[0:3]
                        ['lc','xxw','xxb']


                    l[0:3]表示从索引0开始取 知道索引3为止 但不包括索引3 也就是 0 1 2   也可以简写成 l[:3]
                        >>>l[1:3]
                        ['xxw','xxb']
                        >>>[-2:]
                        ['lyd','sjm']


                    字符串也是也可以看成是一种list
 
                       >>>'abcdefg'[:3]
                        'abc'
                        >>>'abcdefg'[::2]
                        'aceg'

                    第三个参数表示步长 也就是每隔几个取一个
                    
                2:迭代(给定一个list或者tuple 我们通过for循环来遍历这个list或者tuple 这种遍历我们称之为迭代)
                    Python中迭代通过 for...in 来完成
                    dict 默认迭代的是key 如果要迭代value 可以用 for value in d.itervalues() 如果迭代key 和value 则可以通过 for key,value in d.iteritems()
        
                3:列表生成器(Python中非常简单并且强大的可以用来创建list  的生成式)
                    >>>range(1,11)
                    [1,2,3,4,5,6,7,8,9,10]
                    生成[1*1,2*2,3*3,4*4,...,10*10]
                    >>>[x*x for x in range(1,11)]
                    [1,4,9,16,25,36,49,64,81,100]


                    for 循环后面还可以加上if 判断   筛选出只有偶数的平方
                    >>>[x*x for x in range(1,11) if x %2==0]
                    [4,16,36,64,100]


                    可以使用多层循环 可以生成全排列
                    >>>[m+n for m in 'abc' for n in 'xyz']
                    ['ax','ay','az','bx','by','bz','cx','cy','cz']


                    比如列出当前目录下的所有文件和目录名 
                    >>>import os #导入os模块
                    >>>[d for d in os.listdir('.')]# os.listdir 可以列出文件和目录
                    [...]
                    


                    isinstance(x,str)  判断一个变量是不是字符串   isinstance()方法判断一个变量是不是指定的类型
                
                4:生成器(列表很大的时候可能占用很大的内存 也可能造成浪费  如果列表中的元素可以通过某种算法计算出来 则可以不用创建完整的list 而是一边循环一边计算  这种机制叫做生成器)
                    创建generator 第一种方法是将 列表生成式的[] 变为()
                    >>>L=[x*x for x in range(10)]
                    >>>L
                    [0,1,4,9,16,25,36,49,64,81]
                    >>>g=(x*x for  in range(10))
                    >>>g
                    <generator object <genexpr> at 0x10293a0d>


                    使用next() 方法打印generator的每一个元素
                    >>>g.next()
                    0
                    >>>g.next()
                    1


                
                    例如斐波拉契数列
                    def fib(max):
                        n,a,b=0,0,1
                        while n<max:
                            yield b
                            a,b=b,a+b
                            n=n+1


                    这是定义generator的另一种方法 如果函数定义中包含yield 关键字 那么这个函数就不在是一个普通的函数 而是一个generator
                   >>>fib(6)
                   <generator object fib at 0x90a0d0c09>


                    generator 和函数的执行流程不一样 函数是顺序执行 遇到return语句或者最后一行函数语句就返回 而generator的函数 在每次调用next()的时候执行 遇到yield的时候返回再次执行的时候从上次返回的yield语句开始执行
                    








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值