青水蛙鸣吧 关注:6贴子:149

python 学习笔记

只看楼主收藏回复

Book:python学习笔记:
date:2016-08-05
第二章: python 程序运行
.pyc 是就编译成字节码的 .py文件.
.py是源代码,我们编写的代码文件,经过机器翻译成字节码然
然后发送到 ‘虚拟机'中执行


IP属地:上海1楼2016-08-05 20:44回复
    虚拟机:PVM,Python Virtual Machine
    不是一个独立的程序,就是迭代运行字节码指令的一
    个大循环。
    Python的实现,即编译器.主要有
    cpython,jython,ironpython.分另对应
    c,java,.net


    IP属地:上海2楼2016-08-05 20:53
    回复
      jit 即时编译器,Pysco,增强虚拟机,一般提高2--100倍的速度
      被 pypy融合
      shedskin c 是一个引擎系统。将python代码转成c++,然后运行
      冻结成二进制文件--封装?
      py2exe, pyinstaller,freeze,


      IP属地:上海3楼2016-08-05 21:02
      回复
        /usr/local/bin/python
        /usr/bin/python
        顶层程序文件,也叫脚本,也可以叫模块


        IP属地:上海4楼2016-08-05 21:31
        回复
          在unix 系统上,避免硬编码Python解释器的路径,在第一行可以这样写
          #!/usr/bin/env python
          ...script goes here....


          IP属地:上海5楼2016-08-05 22:28
          回复
            myfile.py文件
            title = 'the meaning of life'
            from myfile import title
            print title || print myfile.title
            title是文件名,即模块myfile的属性、


            IP属地:上海6楼2016-08-05 22:31
            回复
              math ,数学工具包(sqrt,pow,sin\cos)
              random,随机数字的生成器和选择器,如
              random.random() # 随机生成一个0-1之间的小数
              random.choice([1,2,3,4]) #随机选择一个数


              IP属地:上海7楼2016-08-06 08:26
              回复
                切片
                slice
                s='Snape'
                s[1:3] # na
                s[-1] # e,等效于 s[len(s)-1]
                int has not attribute ‘__getitem__' # int 没有__getitem__属性或方法,所以不能切片
                str[ i :j] ,可以理解为:取出str中从偏移量为i,直到但不包括偏移量为j的内容,
                偏移量:首字符偏移量为0,首字符右边的字符偏移量依次+1
                s[1:] # :后省略,等 效于 [1:len(s)]
                s[:3] # :前省略,等 效于0:3
                s[:] # :前后省略,等效于 [0:len(s)]


                IP属地:上海8楼2016-08-06 09:29
                回复
                  字符串可以用+,* 号
                  str+str = strstr
                  str*3 = strstrstr
                  操作符的意义取决义被操作的对像,【多态的特性】
                  操作后是生成新的字符串,原字符串没有改变。
                  字符串在python中具有不可变性--在创建后不能就在改变,
                  s='snape'
                  s[0]='z' ---error
                  s='z'+s[1:] -
                  print s
                  'znape'


                  IP属地:上海9楼2016-08-06 09:36
                  回复
                    在核心类型中,数字(含整型、浮点),字符,元组(tuple) 是不可变的
                    列表--list ,字典 ---dict 是可变的
                    str.find() ,返回传入子字符串的偏移量,没有找到返回-1
                    str.replace() ,对全局进行搜索和替换
                    str.split(),按括号内的符号对str进行分解
                    str.upper,将str全部换成大写字母
                    str.isalpha,判断str是否只由字母构成
                    str.rstrip,删除字符串末尾的指定字符,默认是空格。
                    注意不可变性
                    s='snape'
                    s.find('ap')
                    --->2
                    s.replace('ap','XY')
                    --->'snXYe’
                    print s
                    --->'snape'
                    字符串可式化,与c++差不多
                    ‘%s,eggs,and%s' % ('spam','SPAM!')
                    OR
                    '{0},zero,{1},one' . format(0,1)


                    IP属地:上海10楼2016-08-06 09:50
                    回复
                      dir(变量名) 查看变量的属性
                      __xx__ 类的实现方法
                      XX 变量能调用的方法
                      help(str.方法名) 可以取得帮助
                      import re
                      # 字符串模式匹配


                      IP属地:上海11楼2016-08-06 10:02
                      回复
                        () 创建元组 tuple
                        [] 创建列表 list
                        {} 创建字典 dict ,key--value,and keys are unique
                        字典不是序列,而是一种映射 (mapping),可以 】就地改变值 【
                        通过键而不是相对位置(索引)来存储,所以没有任何可靠的从左右的顺序
                        结构
                        键:值
                        D={'food':'spam','quantity':4,'color':'pink'} 创建字典在并赋值
                        D['food'] 醒找键 food对应的value
                        D['quantity'] += 1 对键 quantity的value+1
                        d={}
                        d['name']='bob' 创建一个name键,对应的vlaue为bob
                        print d['name']
                        字典嵌套
                        rec={'name':{'frist':'bob', 'last':'smith'},'job':['dev','mgr'],'age':40.5}
                        嵌套一个字作为name.vlaue,嵌套一个list作为job.value
                        rec['name']['last'] --> smith
                        rec['job'][-1] -->'mgr'
                        rec['job'].append(’janitor')
                        job列表是字典rec所包含的一部分独立内存,所以可以自由地增加或减少
                        ** 在 python中,当最后一次引用对象后(例如:将这个变量用其他的值进行赋值,即
                        变量指向的内存地址改变,)这个对象所占用的内存空间将会自动清理掉(变量原来指向的内存地址释放掉)
                        ,而在底层语言中(如c),要小心地去释放提所有的对象空间


                        IP属地:上海13楼2016-08-06 11:17
                        收起回复
                          for 循环和列表解析一样是一个序列操作。
                          甚到可以用在一些不是序列的对象中,比如
                          for c in "spam":
                          print c.upper()
                          for循环是真正的通用迭代工具,都能工作于遵守迭代协议的任何对象(这是python中无处不在的一个概念,
                          表示在内存中物理存储的序列,或一个在迭代操作情况下每次产生一个元素的对象)???
                          从左到右扫描一个对象的每个Python工具都使用迭代协议。
                          不存在的键调用时产生 keyerror
                          if 'f' in d:
                          d['f']=1 修改f键的值
                          value = d['f'] if 'f' in d else 0


                          IP属地:上海14楼2016-08-06 12:23
                          回复
                            元组 tuple
                            t=(1,2,3)
                            t+(4,5) can not t.append(4,5)
                            t[0] not t(0)
                            t.index(4) -->第4个,=4
                            t.count(4) -->看元素4出现几次,=1
                            支持混嵌套,但是不能增长或缩短
                            t=('s',3,[11,2,3])
                            t[2][1] -->2
                            t.append(4) -->attribut eerror
                            元组虽然没有列表那么多功能,但是他提供了一种完整性约束 (不可变)
                            传递对象时更为安全


                            IP属地:上海15楼2016-08-06 12:31
                            回复
                              文件:file
                              f=open('name','r|w')
                              f.write
                              f.colse
                              or || with open() as f:
                              文件提供了一个迭代器 (iterator),在for循环或其他环境中自动地一行一行地读取
                              ’‘’3版本中的文件在文本、二进制数据之间划了一道界限,
                              文本文件把内容显示为字符串,并且自动执行unicode编码、解码
                              二进制文件把内容显示为一个特定的字节字符串类型,并且允许你不修改地访问文件内容
                              ‘’‘
                              其他
                              集合:它不是映射也不是序列,是唯一的不可变的对象的无序集合。通过内置的set函数创建
                              十进制数(固定精度浮点数) decimal库。
                              分数 (Fraction库)
                              布尔值 及特殊的占位符对象 None(它通常用来初始化名字和对象)
                              序列可以执行 并集(),交集() 补集操作
                              ‘’‘注意type
                              2.X type(list) --> type 'list'
                              3.X type(list) --> class 'list'
                              --> type(type(list)) -->type 'type' in 3.x --> class 'type'
                              检查所处理对象的类型,有三种办法
                              type(L) == type([]) or type(L) == list or isinstance(l,list)
                              ---->True
                              但是这样做的行为是错误的,因为破坏了代码的灵活性,即限制它只能使用一种类型工作,没有这样的检测
                              代码也许能够使用整个范围的类型工作。
                              在Python中,我们编写对象接口而不是类型。
                              多态也是使用python的一个关键思想。


                              IP属地:上海16楼2016-08-06 12:52
                              回复