python学习手记,,1) list和tu


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学习手记

评论关闭