python杂七杂八小问题

时间:2023-03-08 21:15:24

1、win7系统下,安装完GTK+后,从命令行界面无法启动ipython,提示“failed to create process”。运行easy_install也遇到了这个问题。

原因是安装GTK+时,在c盘创建了名为Program的文件。ipython可能误把这个文件当做Program Files目录,所以导致了错误。将这个文件删去问题即可解决。

2、字典dict、列表list可以放任何东西,比如函数。
def a():
print 'yes'
s=[]
t={}
s.append(a)
t['a']=a

3、dict中的元素没有顺序,一般会按照key的首字母排列。

4、执行raw_input时,如果直接回车,输入的将是‘’(空字符串)。not ‘’为True。
5、类继承
若子类需要init,但又要保留超类的init,那么:
class cat(object):
def __init__(self,name):
self.legs_num = 4
def walk(self):
pass class mimi(cat):
def __init__(self):
cat.__init__(self,name)
self.hair = 'white'
def smile(self):
pass

5、getattr

getattr(object,name)和object.name相似。例如

import os
getattr(os,'getcwd')() #和os.getcwd()作用相同

在类中有如下形式

class Game(object):
#······
def play(self):
next = self.start while True:
print "\n--------"
room = getattr(self, next)
next = room()
#······

6、__dict__

究竟函数的__dict__是干什么用的呢?
其实它提供给函数增加属性的功能
看一个简单的例子:

In [4]: def add(x,y):
...: return x+y
...:

显是一下这个函数的属性:

In [13]: print dir(add)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

那么我们现在来给这个函数增加一个属性:

In [14]: def mul(x,y):
....: return x*y
....: In [15]: add.__dict__['mul']=mul

我们再来看一下add的属性列表

In [16]: print dir(add)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name', 'mul']

发现已经多了一个属性mul,而且和我们定义的函数一样是可以调用的

In [17]: add.mul(10,20)
Out[17]: 200

7、如何控制浮点数据?
比如小数点后保留两位,可写成‘%.2f’%··
8、python输出中文需要用gbk

9、判断文本文件读取结束
文本的最后一行的下一行是空白,可以用

line=f.readline()
if not line:
····

10、正则表达式上的问题

想着对一个中文txt文件进行文字替换。在进行正则表达式匹配时遇到了编码问题、多行替换问题、贪婪问题。

编码问题:对于中文,读取的文本必须和正则表达式使用相同的编码,才能顺利匹配。
多行替换问题:当compile不带DOTALL参数时,‘.’不匹配换行符。
贪婪问题:匹配非贪婪的任意字符,应写成‘.*?’,不是‘(.*)?’。