实用python技巧

http://blog.sina.com.cn/s/blog_7170209501019ee7.html

1.Python函数定义时不需要指定返回值数据类型。如果有return语句,则返回指定的值;否则返回空值None
2.Java,C等是静态类型语言,在编译期间就确定数据类型;Python是动态类型语言,在运行期间再确定数据类型,即一个变量类型的确定是在第一次对其进行赋值的时候
3.Python的搜索路径是sys.path.其中path是一个list.可以通过sys.path.append方法进行添加,但这种方法有生命周期
4.所有Python模块都有一个__name__属性,但其值会改变。当import一个模块的时候,其__name__属性是模块的文件名,不带路径或文件扩展名;当运行一个模块的时候__name__的值则变为__main__
5.Dictionary的key大小写敏感,两个常用删除方法:clear,del
6.List的负数索引:list[-n]=list[length(List)-n]。list[:]是原list的一个拷贝.list.pop方法删除最后一个元素,然后返回该元素本身。list可以直接使用“+”连接。
7.字符串格式化时待插入的变量必须放入一个tuple中,如果只有一个变量,则tuple中该唯一变量后边必须添加逗号。如:print "Users connected: %d" % (userCount, )
8.dictionary的keys和values方法分别返回key,value的list,items方法返回形如(key,value)的tuple的list。
9.join智能用于元素师字符串的list.
10.type函数返回任意对象的数据类型.str函数将数据强制转换为字符串.dir函数返回任意对象的属性和方法列表,注意返回的是字符串形式的方法列表,而不是方法本身.callable函数接受任意对象作为参数,如果参数对象可调用,返回True,否则返回False.内置函数都位于__builtin__模块中,可以认为Python在启动时自动执行了from __builtin__ import *语句
11.getattr可以获得对象引用,如getattr({},"clear"),也可以作用于模块,功能非常强大,常被用作分发者
12.不带参数的split函数按照空白进行分割
13.Python中可以使用==None或者is None比较,但is None更快
14.String的ljust函数用空格填充字符串以符合指定的长度,如果指定长度小于字符串本身,则不做任何变化
15.__init__通常是一个类的第一个方法,该方法在类的实例被创建后立即执行,类似于Java中类的构造函数,但与构造函数不同,因为在调用该方法的时候类的实例实际上已经构造出来了
16.每个类方法的第一个参数,包括__init__,都是指向类的当前实例的引用,这个参数被称为self,如:def __init__(self,argments..).当定义自己的方法时,必须明确的将self作为每个方法的第一个参数列出。当从你的类中调用一个父类方法时,也必须包括self.
17.创建实例时,我们所传递的参数被正确的发送给__init__方法
18.Python中,创建类的实例只要调用一个类,仿佛它是一个函数就行了,不像Java需要一个new
19.Python的数据属性,类似于Java中的实例变量,在__init__方法中给出.下例中,data即为一个数据属性.外部引用直接instance.data,内部引用为self.data.
   class UserDict: 
      def __init__(self, dict=None): 
      self.data = {} 
      if dict is not None: self.update(dict) 
而Python中类属性,则类似于Java中静态变量,紧跟在class后面,如下所示,tagDataMap即为类属性.
class MP3FileInfo(FileInfo):
    "store ID3v1.0 MP3 tags"
    tagDataMap = {"title" : ( 3, 33, stripnulls), 
    "artist" : ( 33, 63, stripnulls),
    "album" : ( 63, 93, stripnulls),
    "year" : ( 93, 97, stripnulls),
    "comment" : ( 97, 126, stripnulls),
    "genre" : (127, 128, ord)}
类属性既可以通过直接对类的引用,也可以通过对类的任意实例的引用来使用.
20.Python没有任何形式的函数重载,即方法名相同,但参数类型或者个数不同.每个类只有一个同名的方法,例如__init__方法,如果一个子类拥有__init__方法,它总是覆盖父类的__init__方法,甚至子类使用不同的参数列表。后一个同名函数总是覆盖前一个同名函数。
21.最好总是在__init__方法中为一个实例的所有数据属性赋予一个初始值,(相当于定义了成员变量)
22.Python具有专有类方法,如dictionary里的__getitem__和__setitem__方法,用户不需要显式调用这些方法.
23.__repr__在调用repr(instance)时被调用,repr是内置函数,它返回一个对象的字符串表示,实际在IDE窗口中输入变量名并按ENTER键,IDE则调用了repr函数来显示变量名
24.__cmp__在比较类实例时被调用。通常可以通过调用==来比较任意两个Python对象,不只是类实例。对于类实例,我们可以自己编写比较逻辑,自己定义__cmp__方法,然后可以使用==来比较我们的类,Python会替我们调用__cmp__专用方法
25.__len__在调用len(instance)时被调用
26.Java中使用str1==str2来确定两个字符串是否指向同一物理内存,这叫对象同一性,在Python中写为str1 is str2.而Java中比较字符串相等使用str1.equals(str2),Python中使用 str1==str2.
27.专用方法意味着任何类可以像字典一样保存键值对,只要定义__setitem__方法。任何类可以表现得像一个序列,只要定义__getitem__方法。任何定义了__cmp__方法的类可以用方法可以用==进行比较。并且如果你的类表现为拥有似长度东西,不要定义 GetLength 方法,而定义 __len__ 方法,并使用 len(instance)。
28.如果一个Python函数,类方法,或属性的名字以两个下划线__开头(但不结尾),它是私有的
29.f=open(arg)返回文件对象f,其常用的属性有mode和name等.常用方法有tell,seek,read,write等
30.os.environ是你在系统上定义的环境变量的dictionary.sys.modules是所导入的模块的dicionary,sys.modules['a']返回对模块a本身的一个引用
31.__module__是Python类的内置属性,是这个类的模块名字(即字符串表示)
32.os.path有几个操作文件和目录的函数。os.path.join函数把一个或多个路径名连接成一个路径名,expanduser("~")函数对使用~来表示用户根目录的路径进行扩展。split函数对全路径名进行分割,返回路径和文件名的tuple.splitext对文件名进行分割,返回文件名和扩展名的tuple。os.listdir(path)函数接受路径名,返回该路径下内容的list,包括文件和文件夹。os.path的isfile函数接受路径名,如果该路径表示文件返回1,否则返回0。os.path相应也具有isdir函数。
33.glob模块,接受一个通配符并返回与之匹配的文件或目录的完整路径。如:glob.glob('c:\\music\\_singles\\s*.mp3'),glob.glob('c:\\music\\*\\*.mp3')
34.处理HTML,Python的sgmllib.py模块中包含一个SGMLParser类。使用它进行HTML解析需要对其进行子类化。
    parser=urllister.URLister()
    parser.feed(urllib.open("http://google.com").read())
    parser.close()
上例中parser需要close,其原因是feed方法不保证对传给它的所有HTML进行处理,它可能会对其进行缓冲处理,等待接受更多的内容。只要没有更多内容,就应该调用close来刷新缓冲区,并且强制所有内容被强制处理
35.内置函数locals和globals,分别提供基于dictionary的访问局部和全局变量的方式。locals()是只读的,globals()不是
36.字符串格式化有两种:值列入一个tuple中,按照顺序插入到字符串中每个格式化标记的地方;另一个是使用基于dictionary的字符串格式化。
    params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
    "%(pwd)s is not a good password for %(uid)s" % params 
使用内置的locals函数是是最普通的基于dictionary的字符串格式化应用,即可以在字符串中使用局部变量的名字,且每个变量都会被它的值所替换.
    def handle_comment(self, text):
       self.pieces.append("" % locals())
37.字符串的capitalize方法将第一个字母变为大写,将其他字母变成小写
38.Python的包其实就是含有__init__.py的目录,这个文件定义了包的属性和方法。当你将一个包作为模块导入,实际上导入了它的__init__.py文件
39.使用minidom解析XML文件。形如:
   
     

0


     

1


   
其中ref节点具有5个子节点:2个Element元素,和3个Text元素。这三个Text元素是由于

之前和之后的硬回车造成的
40.使用minidom,Text节点的.data属性提供文本节点真正代表的字符串。上例中pNode为‘

0

’节点,则pNode.firstChild.data的值为:u'0'
41.s=u'0'中u的含义为unicode.以另一种编码方式打印s:print s.encode('latin-1')
42.搜索xml元素一个有用的方法:getElementsByTagName.
43.每个Element对象都有一个attributes属性,它是一个NamedNodeMap对象,行为类似Dictionary.因此可以使用attributes.keys()和attributes.values()获得属性和值的列表。其中属性的值是Attr类型的对象,Attr继承自Node.
44.minidom有一个parseString方法,接受字符串形式的XML文档进行解析,解析字符串形式XML的另一个方法是把字符串留转换为类文件源,可以使用StringIO.StringIO(string)实现
45.print函数实际做的事情:在你打印的字符串的后面加一个硬回车,然后调用sys.stdout.write函数
46.>>> print >> sys.stderr, 'enteringfunction' print语句的快捷法可以用于写入任何打开文件(或者是类文件对象)。在这里,你可以将单个print语句重定向到stderr而且不用影响后面的print语句。
47.random.choice函数接受一个任意数量条目的列表并随机返回其中的一个条目
48.使用urllib2获取HTTP资源包含三个步骤:创建Request对象,创建URL开启器Opener,使用Request对象告诉Opener打开相应的URL
    >>> import urllib2
    >>> request = urllib2.Request('http://diveintomark.org/xml/atom.xml') 
    >>> opener = urllib2.build_opener() 
    >>> feeddata = opener.open(request).read() 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值