首页 > 代码库 > 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学习手记