首页 > 代码库 > python学习手记

python学习手记

1) list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。

   .) list是一种有序的集合,可以随时添加和删除其中的元素

      list:  classmates = [‘Michael‘, ‘Bob‘, ‘Tracy‘]

      具体操作:

        .)可以往list中追加元素到末尾:  classmates.append(‘Adam‘)

        .)把元素插入到指定的位置,比如索引号为1的位置:  classmates.insert(1, ‘Jack‘)

        .)要删除list末尾的元素,用pop()方法:classmates.pop()

        .)要删除指定位置的元素,用pop(i)方法

        .)要把某个元素替换成别的元素,可以直接赋值给对应的索引位置

 

       tuple: classmates = (‘Michael‘, ‘Bob‘, ‘Tracy‘)

       .)tuple和list非常类似,但是tuple一旦初始化就不能修改

       .)只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:t = (1,)

    

2)dict和set

  Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储

   .)d = {‘Michael‘: 95, ‘Bob‘: 75, ‘Tracy‘: 85}

        .) 要删除一个key,用pop(key)方法,对应的value也会从dict中删除

        .)添加一个key-value,直接赋值即可,classnates["aaa"]=34

        .) 如果直接取一个不存在的键会有异常的,要避免key不存在的错误,有两种办法,一是通过

           in判断key是否存在‘Thomas‘ in d

  .)  s = set([1, 2, 3])

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重

    复的key。要创建一个set,需要提供一个list作为输入集合:

      add(key)

      remove(key)


------循环:

 。)  for x in ...

 。)  Python提供一个range()函数,可以生成一个整数序列,比如range(5)生成的序列是从0开始小于

       5的整数

 .  )while循环,只要条件满足,就不断循环


3) python中如何导入模块

#导入modules,import与from...import的不同之处在于,简单说:

# 如果你想在程序中用argv代表sys.argv,

# 则可使用:from sys import argv

# 一般说来,应该避免使用from..import而使用import语句,

# 因为这样可以使你的程序更加易读,也可以避免名称的冲突


4) 装饰器: 

    现在,假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,

    这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)


5)  Python的函数定义中有两种特殊的情况,即出现*,**的形式。

      如:def myfun1(username, *keys)或def myfun2(username, **keys)等

     解释:

        * 用来传递任意个无名字参数,这些参数会一个Tuple的形式访问。

        **用来处理传递任意个有名字的参数,这些参数用dict来访问。

     举例:

        def fun1(*keys):

print type(keys)

print "keys="+str(keys)

for i in range(0,len(keys)):

   print i,keys[i]

         fun1(2,3,4,5)

6) Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去       

 

7) class访问限制

    .)在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这

      样,就隐藏了内部的复杂逻辑.

    .)如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的

      变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

    .)如果外部又要操作内部私有变量,可以声明对应的方法get_,set_方法;

    .) 需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线

       结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,

       所以,不能用__name__、__score__这样的变量名。

    .) 有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以

       访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访

       问,但是,请把我视为私有变量,不要随意访问”

    .) 双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因

        为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过

        _Student__name来访问__name变量.(备注:Student是对应的l类名).

       但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。

       总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉


8) 如何判断一个变量的类型,如何获取一个对象的所有方法和属性:

     .)基本类型都可以用type()判断:如: type(123),

     .) 对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用

         isinstance()函数.isinstance(h, Dog),如判断h是不是Dog的实例

      .) 能用type()判断的基本类型也可以用isinstance()判断,如:isinstance(‘a‘, str)

      。) 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的

           list;

      。)仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直

          接操作一个对象的状态


9) 如何引用自己写的python模块中的类;

   分两种情况:

    。)如果对应的py文件在同一个目录下,直接import引入就可以使用了,如下:

           from A import Animal

           a = Animal()

           a.run()

          这样就引入A.py(也叫A模块)中的Animal类了

     。)如果导入的模块A.py与你要调用的py文件不在同一个目录下,直接运行上面的代码会报错的;

          需要在python的安装目录下的Lib/site-packages目录下创建文件MyModule.,pth

          文件内容是你的A.py文件所在的目录,比如:

           A.py文件在D:\,那就在此文件中写D:\,

           这样python编译器在执行代码时,就会将D:\目录下的文件也加载到内存进行编译;

   。参考资料:http://blog.csdn.net/hyholine/article/details/8581740#t3

 自己写的模块如何通过package进行管理:

   。)包(Package)可以看成模块的集合,只要一个文件夹下面有个__init__.py文件,那么这个文件

       夹就可以看做是一个包。

      包下面的文件夹还可以成为包(子包) ;更进一步,多个较小的包可以聚合成一个较大的包,通

      过包这种结构,方便了类的管理和维护,也方便了用户的使用


10) python中pyc和pyo的作用

      .)pyc文件,是python编译后的字节码(bytecode)文件。只要你运行了py文件,python编译器就          会自动生成一个对应的pyc字节码文件。这个pyc字节码文件,经过python解释器,会生成机器          码运行(这也是为什么pyc文件可以跨平台部署,类似于java的跨平台,java中JVM运行的字节

         码文件)。下次调用直接调用pyc,而不调用py文件。直到你这个py文件有改变。python解释

         器会检查pyc文件中的生成时间,对比py文件的修改时间,如果py更新,那么就生成新的pyc。

       .) pyo文件,是python编译优化后的字节码文件


    





本文出自 “小李广之博客” 博客,谢绝转载!

python学习手记