您的位置:首页 > 编程语言 > Python开发

python学习笔记[0]

2014-01-08 16:20 225 查看
(刚过了元旦,开启14年新篇章。。。今天看到一句话:一个程序员除了熟练掌握一门静态语言外至少需掌握一门脚本语言,还好我看到的不算迟,一直想学python,就从现在开始吧~)

首先,罗列一下python的解释

【1】Python是一个面向对象开发语言,大部分情况下被用来作脚本的开发,所以也有一大部分的人说他是脚本语言
【2】Python的优点:

       高质量
       高效率————不用像C C++静态语言一样,进行编译连接,直接可以运行

       可移植————适用于各种平台linux windows Mac Unix android等,可直接将这个平台的程序拷贝到另一个平台运行

       很多可用的组件

【3】Python的缺点:因为他不会编译生成二进制文件,也就是计算机底层文件,所以运行速度较之C C++稍逊色
【4】Python可以用来干什么?

              可以说Python无所不能,涉及领域有网页、游戏、图像、人工智能等

好了,正式拉开学习帷幕:

【备注:我是用《Python学习手册》第四版学习的,同时参考http://blog.csdn.net/ithomer/article/details/8907268#python文章进行学习的,下面的页码是书中页码,为了方便我下次看时能找得到地方;EX:/ex:表示举例;Tips:表示一个标记】

1.P95 用input()来使程序暂停

2.P124 类型:

       1)数字:

       Python支持类型扩展  例如计算2的100次方时,在C++中没有一个类型可以容下这个结果1267650600228229401496703205376,而python会自动提供较大的精度,以适用于较大数值

       可以引入math模块,import math,就像包含了一个数学库一样,你可以使用模块中的常量方法等   例如 PI  sqrt(9)

       2)字符串:'spam’

       所支持的方法:len();

                                   []索引           //可以正向也可以反向索引         ex:s = 'spam',s[0]——'s',s[-1]——s[len(s)-1]等于'm'

                                   分片操作(抽离操作):slice  s[1:3] 从字符串偏移量为1的位置开始到但不包括偏移量为3的位置的字符提取出来组成一个新字符串并返回,即返回‘pa’ex2:s[1]  'pam'  s[-1] 'spa'

                                  +合并:s+'aaa'   'spamaaa'

                                  *n      :重复n遍   s*3  'spamspamspam'

              ___________________________________

以上方法均为序列式类型变量通用方法,下面几个是字符串特定方法,注意所有对字符串进行的操作都不会改变原字符串,而是返回一个新字符串
              len()

              find()

              replace('pa','XYZ')

              split(',')   将一个字符串以','分割开来 ex: line = 'aaa,bbb,ccc';line.split(',');返回一个数组['aaa','bbb','ccc']

              upper(s)     将字符串s变大写

              ......还有多如牛毛的方法来操作字符串,具体请看帮助 dir(line) 可以看到字符串所支持的方法,help(line.upper) 可看到字符串upper方法的帮助  注:line为字符串类型变量P129

             Tips: python支持将三个引号(单引号 双引号都可以)内的多行字符合并在一起,并为每一行末添加一个'\n' 

                ex: s = """aaaaa

                  '''bbb"bb

                  "ccc"""

                  printf(s) 输出'\naaaaa\n\'\'\'bbb\"bb\n\"ccc'

        3)序列:类似于数组,但区别是不限类型(即一个序列中可存放一种以上不同类型元素),且大小像vector一样可动态变化

         除了上面字符串支持的基本序列操作,它还支持其他操作:

         L = ['aaa',123,1.2]

         L.append('www')     ['aaa',123,1.2,'www']  增加元素

         L.pop(2)            ['aaa',123,'www']      删除元素    TIPS :不同于字符串,这些操作都会改变原对象,

         L = [4,3,0,9]

         L.sort()            [0,3,4,9]

         L.reverse()

         利用序列可以描述矩阵 :array = [[1,2,3],[4,5,6],[7,8,9]]

         Tips1:array   输出整个矩阵     array[0]  输出0行  array[0][1]输出元素2

         Tips2:>>> col2 = [row[1] for row in array]

                    >>> print(col2)

                    [2, 5, 8]

                    >>> col2 = [row[1]+1 for row in array]   //对所取出的第一列元素值都+1

                    >>> print(col2)

                   [3, 6, 9]

                   >>> print(array)

                   [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  //发现并没有改变原矩阵
   Tips3:  >>> X = [array[i][i] for i in [0,1,2]]

                >>> print(X)

                [1, 5, 9]

               //利用循环变量

                EX:>>> X = [c*2 for c in 'spam']

                        >>> print(X)

                         ['ss', 'pp', 'aa', 'mm']

  Tips:range(n)可以生成n个元素的序列,这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)

             EX:>>> M=range(5)

             >>> M

             [0, 1, 2, 3, 4]

 4)字典:类似于map,不拘泥于类型   {键:值}
                >>> M ={'name':'wyy','year':21,'sex':'Female'}

                >>> print(M)

               {'sex': 'Female', 'name': 'wyy', 'year': 21}

              ※字典中的元素是无序的,你不能通过下标来获取元素,而只能通过key

>>> M['name']
'wyy'
EX:  按键值排序  字典不支持sort函数,我们得这样用for循环输出某序元素
>>> M = {'a':1,'b':3,'c':4}//一个字典
>>> print(M)
{'a': 1, 'c': 4, 'b': 3}//打印出的结果并不是按照我们输入的顺序而来,键是无序的
>>> l = list(M)//取出字典的键成为一个序列
>>> l
['a', 'c', 'b']
>>> l.sort()//対键进行排序
>>> print(l)
['a', 'b', 'c']
>>> for key in l:
print(key,'=>',M[key])//按序列l的顺序循环输出字典

('a', '=>', 1)
('b', '=>', 3)
('c', '=>', 4)

   ※字典支持用新key进行扩展,但不允许对没有的值进行访问

     EX: >>> M = {'a':1,'b':2,'c':3}

   >>> M

   {'a': 1, 'c': 3, 'b': 2}

   >>> M['e'] = 4

   >>> M

   {'a': 1, 'c': 3, 'b': 2, 'e': 4}

 ※Tips循环遍历字典  for key in M:

      print M[key]

 ※字典支持的其他方法

  M.keys()    返回所有键

  M.values()  返回所有值

  M.items()   返回所有的元素

  M.clear()   清空字典 

  len(M)       多少对    

 5)元组————元组中的内容不可变是const

--------------------------------------------------------------------------------------------

【备注:以下内容是学习http://blog.csdn.net/ithomer/article/details/8907268#python所写下的笔记】

1.函数的定义:

   def function_name(a,b,c):

    statement

    return something  # return不是必须的

   

    EX:

>>> a = 1

>>> b= 2

>>> def func(a,b):

 return a+b

>>>

>>> print(func(3,4))

7

  基本数据类型的参数:值传递

  表作为参数:指针传递

  return 可以返回多个值   EX: >>> def func(a,b):

                                                        c = a+b

                                                        return a,b,c

                                                       >>> print func(2,3)

                                                      (2, 3, 5)

2.Python中类的定义:

   EX:

class Bird(object):
have_feather = True
way_to_birth = 'agg'
//定义方法
>>> class Bird(object):
def move(self,dx,dy):                                       //这里的self相当于this指针,在函数定义时要写出,但是在调用时不用写出
pos = [0,0]
pos[0] = pos[0]+dx
pos[1] = pos[1] + dy
return pos

//定义对象
mBird = Bird()
// 引用属性:

print mBird.have_feather
//引用方法
>>> mBird.move(3,4)
[3, 4]
//继承:

class Chicken(Bird):
can_fly = False
>>> mChicken = Chicken()
>>> print(mChicken.can_fly)


 

3.入门教程9

  最好不要通过类方法修改类属性,因为如果一修改,所有对象的这个属性都会被修改,这个属性就相当于C++中static属性 所有对象只有一份,但不包括mutable类型的变量,EX:数字,字符串,因为这些类型会为每个对象复制一份,就像你写了一个函数,对这个外部变量进行修改,实质上是没有修改原变量只是修改其副本

  EX:

>>> class Base(object):
Age = 0
List= ["yellow","Red"]

>>> a1 = Base()
>>> a2 = Base()
>>> a1.Age = 3//修改类属性Age
>>> a1.Age
3             //a1的Age属性变化
>>> a2.Age
0             //a2没变化     因为数字类型是mutable的,每一个对象会复制出一份
//修改不可变类型变量
>>> a1.List[0] = "Blue"
>>> a1.List
['Blue', 'Red']//改变
>>> a2.List
['Blue', 'Red']//改变
4.入门教程9 类的构造函数
__init__(self,parameter):
EX:>>> class Base(object):
Age = 0
List= ["yellow","Red"]
def __init__(self,keys):
print("my key :",keys)

>>> a = Base(4)
('my key :', 4)//__init__方法在创建对象时自动被调用


5.入门教程9             对象的私有属性,属于对象本身,每个对象式独立的  self.attribution

 

EX:>>> class Base(object):
def __init__(self,keys):
self.key = keys
def func(self):
for i in range(len(self.key))://Tips:注意这里list的遍历
self.key[i] = self.key[i]+1//改变每个对象的key,

>>> a = Base([1,2,3,4])
>>> a.func()
>>> a.key
[2, 3, 4, 5]
>>> b = Base([7,8,9,0])
>>> b.func()
>>> b.key
[8, 9, 10, 1]  //各对象不一样

 

 再次强调对象属性与类属性的区别

6.进阶02      文件的输入与输出
 ※创建文件对象   f.open(文件名,模式)  模式简单包含“r”只读 “W”写入 a追加至末尾???至今仍有疑问,python同时读写怎么有异常,没弄懂(说是跟一个+号就支持读写同步)

 ※文件读取 

 str = f.read(N)  读取N字节

 str = f.readline() 读取一行

 str = f.readlines()读取所有   将读取结果存入一个序列

 EX: f = open("D:\\TTT.txt","r")

  >>> content = f.readlines()

  >>> content

  ['54321\n', '67890\n', '09876']

7.进阶3 模块module  
 引入模块 import script1  (script1是另一个python文件script.py) 相当于C++中引入另一个库文件#include  <*.h>  完了可以使用库中的方法变量

 不同的是Python中使用模块中的属性时要写成script.attribution 

 EX: //script1.py

  def laugh():

      print("hahahaha")

          //script2.py

           import script1

  for i in range(2):

      script1.laugh()//引用模块script1的属性laugh()

     搜索模块路径:

     当前文件夹 -> 操作系统环境变量PYTHONPATH设置路径 ——> 标准库的安装路径

     

     Tips:如果好几个模块都是一个作用可以将它们放在同一个文件夹下(如:D:\\Test),通过

     import D:\\Test.script1引入

           注意:在此文件夹下必须有一个__init__.py文件,以提醒python这个文件夹是一个模块包,(该文件是一个空文件而已)

8.进阶4 函数参数传递

 1)位置传递      与函数定义时参数的位置一一对应传入参数

 2)关键字传递  调用函数时在参数列表对参数进行赋值  

   EX:>>> def func(a,b,c):

    print a

    print b

    print c

 

             >>> func(a = 0,c =9,b = 8)

    0

    8

    9

 3)参数默认值

 4)包裹位置与包裹关键字     适用于某个功能的函数,你无法确定他具体传入几个参数,有时只传一个,有时传两个以上

     包裹位置:传参数时只传入具体值   用序列接收

      EX:>>> def func(*list):  //※为了标识list是一个序列,收集了很多参数,给list前加*

    for i in range(len(list)):

    print (list[i])

  

       >>> func(1,2,3,4,5,6)

    1

    2

    3

    4

    5

    6

  包裹关键字:传参数时传入对参数列表的赋值  用字典接收

    EX:>>> def func(**map):  //※为了标识map是字典,用**进行标识

    print type(map)

    print map

 

       >>> func(a=1,b=0,c="hello")

    <type 'dict'>

    {'a': 1, 'c': 'hello', 'b': 0}

 5)解包裹     用于传递参数,就是将要传递的参数封装在了list或字典中,用解包裹的形式传递给函数进行函数调用

   EX:>>> def func(a,b,c):

    print a,b,c

    >>> m=[1,2,3]

    >>> func(*m)//解包裹

    1 2 3

   Tips:如果m的元素数大于参数列表的个数  就会报错

   同理,也有下面样子:

   >>> dict={'a':1,'b':2,'c':3}

   >>> func(**dict) //解包裹

   1 2 3

 

未完,待续........

 

                                                                                   【热爱工作,热爱生活】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 基础学习