Python

snow leopard install mysqldb-python

versions: 
mysql adapter for python: 1.2.3c1 
mysql: 5.1.41 32-bit version 
default python for snow leopard: 2.6.1 
 
1.install mysql package: http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg 
 
2. grab mysql adapter for python: http://sourceforge.net/projects/mysql-python/files/ 
 
3.in directory for mysql for python: 
Edit the setup_posix.py and change the following 
 
mysql_config.path = “mysql_config” 
 
to 
 
mysql_config.path = “/usr/local/mysql/bin/mysql_config” 
 
4. sudo ARCHFLAGS=’-arch i386′ CC=/usr/bin/gcc-4.0 python setup.py build 
 
5. sudo ARCHFLAGS=’-arch i386′ CC=/usr/bin/gcc-4.0 python setup.py install 
 
6. force python to be 32-bit 
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes 
 
7. python 
Greg-Elliotts-Mac-Pro:~ greg$ python 
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type “help”, “copyright”, “credits” or “license” for more information. 
>>> import MySQLdb 
>>>

安装python 2.6

tar -zxvf Python-2.6.4.tgz 
cd Python-2.6.4 && ./configure &&make &&make install  
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg 
sh setuptools-0.6c11-py2.6.egg 
easy_install readline 
easy_install ipython

yield 的简单解释

yield就相当于往一个list中塞东西而已(初步这么感觉),只不过写法很奇怪罢了。呵呵 
 
>>> def kk(x): 
...     yield x 
...     yield x+7 
...     yield x*2 
... 
>>> b = kk(14) 
>>> b.next() 
14 
>>> b.next() 
21 
>>> b.next() 
28 
>>> b.next() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in ? 
StopIteration 
 
每个yield都往返回的叠代器中添加一个项,值是yield后面的内容。虽然函数没有明确写返回值,但是就返回了这个隐秘的叠带器。 
 
>>> for i in kk(11): 
...     print i 
... 
11 
18 
22 
 
果然。 
另外yield后面是可以随便跟什么东西的。比如列表: 
 
>>> def kk(x,y): 
...     yield [x,y] 
...     yield [x+1,y+1] 
... 
>>> for i in kk(12,33): 
...     print i 
... 
[12, 33] 
[13, 34]

Python函数参数中的*,**

问题: 
     Python的函数定义中有两种特殊的情况,即出现***的形式。 
     如:def myfun1(username, *keys)def myfun2(username, **keys)等。 
 
解释: 
  * 用来传递任意个无名字参数,这些参数会一个Tuple的形式访问。 
 
   **用来处理传递任意个有名字的参数,这些参数用dict来访问。* 
 
应用: 
######################### 
 
# “*” 的应用 
 
######################### 
>>> def fun1(*keys): 
...     print "keys type=%s" % type(keys) 
...     print "keys=%s" % str(keys) 
...     for i in range(0, len(keys)): 
...             print "keys[" + str(i) + "]=%s" % str(keys[i]) 
... 
>>> fun1(2,3,4,5) 
 
输出以下结果: 
keys type=<type 'tuple'> 
keys=(2, 3, 4, 5) 
keys[0]=2 
keys[1]=3 
keys[2]=4 
keys[3]=5 
 
 
 
######################### 
 
# “**” 的应用 
 
######################### 
 
>>> def fun2(**keys): 
...     print "keys type=%s" % type(keys) 
...     print "keys=%s" % str(keys) 
...     print "name=%s" % str(keys['name']) 
... 
>>> 
>>> fun2(name="vp", age=19) 
 
输出以下结果: 
keys type=<type 'dict'> 
keys={'age': 19, 'name': 'vp'} 
name=vp

Mac下选择python版本

 
#python_select python26 

Python easy_install

 
#wget http://peak.telecommunity.com/dist/ez_setup.py 
#python ez_setup.py 
#easy_install hashlib 

笔记

 
for i in range(20): 
    print ("*"*i) 
 
 >>>li 
['a', 'b', 'mpilgrim', 'z', 'example'] 
 
>>>li[-3] 
mpilgrim 
 
#如果负数索引使您感到糊涂,可以这样理解:li[-n] == li[len(li) - n]。 
#所以在这个 list 里,li[-3] == li[5 - 3] == li[2]。 
 
>>>li.pop() 
example 
 
#pop(),删除list中最后一个元素并返回该元素的值

Python数组解决

 

说明:本文并不详细介绍Python中的列表,可以参看Python文档。 

Python中没有数组的数据结构,但列表很像数组,如:a=[0,1,2] 

这时a[0]=0, a[1]=1, a[2]=2,但引出一个问题,即如果数组a想定义为0到999怎么办,这时可能通过a = range(0, 1000)实现。 

或省略为a = range(1000).如果想定义1000长度的a,初始值全为0,则 a = [0 for x in range(0, 1000)]下面是二维数组的定义: 

直接定义 a=[[1,1],[1,1]],这里定义了一个2*2的,且初始为0的二维数组。 

间接定义 a=[[0 for x in range(10)] for y in range(10)],这里定义了10*10初始为0的二维数组。 


后来,我在网上找到了更简单的字义二维数组的方法: 

b = [[0]*10]*10,定义10*10初始为0的二维数组。 

与a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。 

但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别: 

a[0][0]=1时,只有a[0][0]为1,其他全为0。 

b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。 

故b = [[0]*10]*10并不符合我们常规意义上的二维数组。 

同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,而没有上面相同引用的问题, 
估计数组c的定义时是值类型相乘,而前面b的用类型的相乘,因为一维数组是一个引用(借用C#中的值类型和引用类型,不知是否合适)。 

logger模块

import logging 
logger = logging.getLogger('myapp') 
hdlr = logging.FileHandler('var/myapp.log') 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO) 
 
####And then to use it: 
 
logger.info('a log message')
/home/yepnnet/public_html/wiki/data/pages/python.txt · 最后更改: 2010/03/03 02:03 由 admin
到顶部
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0