飞机场场长

本博客主要摘录python相关的知识,欢迎参阅。

导航

学习笔记(1-?)

1.显示类型(2012-07-09)

1 test=(1,2,3,4)
2 print str(type(test))

 2.Python的文件类型分为3种,即源代码、字节代码和优化代码。这些都可以直接运行,不需要进行编译或连接。

源代码以.py为扩展名,由python来负责解释;源文件经过编译后生成扩展名为.pyc的文件,即编译过的字节文件。这种文件不能使用文本编辑器修改。pyc文件是和平台无关的,可以在大部分操作系统上运行。经过优化的源文件会以.pyo为后缀,即优化代码。它也不能直接用文本编辑器修改.

3.python中的变量不需要声明,变量的赋值操作就是变量声明和定义的过程。

4.在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。全局变量建议在文件的开头定义,也可以把全局变量放到一个专门的文件中,然后通过import来引用.

5.python内部没有普通类型,任何类型都是对象。

6.python不支持自增运算符和自减运算符。例如i++/i–是错误的,但i+=1是可以的。

7.python程序由包(package)、模块(module)和函数组成。包是由一系列模块组成的集合。模块是处理某一类问题的函数和类的集合。包就是一个完成特定任务的工具箱。包必须含有一个__init__.py文件,它用于标识当前文件夹是一个包。模块把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块。模块由代码、函数和类组成。导入模块使用import语句。

8.python用class保留字来定义一个类,类名的首字符要大写。当程序员需要创建的类型不能用简单类型来表示时,就需要定义类,然后利用定义的类创建对象。

9.类的方法也分为公有方法和私有方法。私有函数不能被该类之外的函数调用,私有的方法也不能被外部的类或函数调用。

10.python使用函数”staticmethod()“或”@ staticmethod“指令的方法把普通的函数转换为静态方法。静态方法相当于全局函数。

11.类和对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

12.ascii

print ord('a')

13.显示目标的编码方式

import urllib
rawdata = urllib.urlopen('http://www.google.cn/').read()
import chardet
print chardet.detect(rawdata)

14.
在python中,方法定义在类中,但只能被实例所调用。调用一个方法的最终途径是:(1)定义类(2)创建一个类(3)用这个实例调用方法。

 

15.

在一个函数中对参数名赋值不影响调用者。

>>> a=1
>>> def test(a):
...     a=a+1
...     print a
...
>>> test(a)
2
>>> a
1             # a值不变

在一个函数中改变一个可变的对象参数会影响调用者。

>>> a=1
>>> b=[1,2]
>>> def test(a,b):
...     a=5
...     b[0]=4
...     print a,b
...
>>> test(a,b)
5 [4, 2]
>>> a
1
>>> b
[4, 2]    # b值已被更改

16.>>> int(12.0)  12 

int()函数可以将一个数转化为整数

>>> int('12',16)  18

这里有两个地方要注意:1)12要以字符串的形式进行输入,如果是带参数base的话

这里并不是将12转换为16进制的数,而是说12就是一个16进制的数,int()函数将其用十进制数表示


17.在程序运行中设置延迟,是程序运行变慢

import time

time.sleep(2)

暂停2秒再运行。

18.首先判断是否已存在这样的记录:

 1 select count * from Table where 条件
 2     
 3     if(count >0)
 4     {
 5          数据相加;
 6          //数据库语句来实现
 7     }
 8     else
 9     {
10         修改;
11     }

19.

1 a = 'ab'
2 b = ('a', 'c')
3 print [x for x in a if x not in b]

 20.正则匹配,忽略大小写,两种写法

1 a = 'aA'
2 p = re.compile('a', re.IGNORECASE)
3 print p.findall(a)
4 print re.findall(r'a', a, re.IGNORECASE)

 21.编写的另一种格式。(捕捉异常)

1 test = 'a'
2 if not isinstance(test, int): raise TypeError, "Not type of int"

22.条件判断,选择赋值

a if b else c ; 如果b为真,则返回a,否则返回c

1 b = 'b'
2 a = 0 if b == 'a' else 1
3 print a

 23.repr()函数

str()一般是将数值转成字符串。
repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。

24.字符串的title方法,将字符串转换为标题,也就是所有单词的首字母大写,而其他字母小写。string = "that's all folks.";string.title()=="That'S All Folks."

25.strip方法返回去除两侧(不包括内部)空格的字符串。

26.Python的字典的items(), keys(), values()都返回一个list

1     >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' }  
2     >>> dict.values()  
3     ['b', 2, 'world']  
4     >>> dict.keys()  
5     ['a', 1, 'hello']  
6     >>> dict.items()  
7     [('a', 'b'), (1, 2), ('hello', 'world')]  
8     >>>   

27.使用dict的小Demo:

 1 people = {
 2     'Alice':{
 3         'phone':1234,
 4         'address':'beijing'
 5            },
 6     'Peter':{
 7         'phone':4567,
 8         'address':'shanghai'
 9             },
10     'Micheal':{
11         'phone':9012,
12         'address':'hangzhou'  
13              }
14           }
15 name = raw_input("please input the name : \n")
16 if(people.has_key(name)==False):
17     print "Not exist"
18 else:
19     profile = people[name]
20     print profile
21     #use dict to format the string
22     print "Phone is : %(phone)s \nAddress is : %(address)s" % profile 

结果:
please input the name :
Alice
{'phone': 1234, 'address': 'beijing'}
Phone is : 1234
Address is : beijing

28.模块的导入:

1    import somemodule
2    from somemodule import somefunction
3    from somemodule import somefunction, anthorfunction, yetanthorfunction
4    from somemodule import *
5    使用别名,避免冲突:import math as foobar

 

29.遍历字典

 1 d = {'x':1,'y':2,'z':3}
 2 #Method1
 3 for key in d:
 4     print key ,'----->',d[key]
 5 #Method2
 6 for key in d.keys():
 7     print key ,'----->',d[key]
 8 #Method3
 9 for (key , value) in d.items() :
10     print key , '----->' , value 
>>>y -----> 2
  x -----> 1
  z -----> 3

30.zip(), dict()

zip函数可以用来进行并行迭代,可以将多个序列"压缩"在一起,然后返回一个元组的列表

 1 names = ['Peter','Rich','Tom']
 2 ages = [20,23,22]
 3 d = dict(zip(names,ages))
 4 print zip(names,ages)
 5 print dict(zip(names,ages))
 6 for (name,age) in zip(names,ages):
 7     print name ,'----', age
 8 print d['Peter'] 
 9 
10 >>>[('Peter', 20), ('Rich', 23), ('Tom', 22)]
11 >>>{'Peter': 20, 'Rich': 23, 'Tom': 22}
12 >>>Peter ---- 20
13 >>>Rich ---- 23
14 >>>Tom ---- 22
15 >>>20

31.del用于list列表操作,删除一个或者连续几个元素。示例程序如下:

 1 >>> a = [-1, 3, 'aa', 85] # 定义一个list
 2 >>> a
 3 [-1, 3, 'aa', 85]
 4 >>> del a[0] # 删除第0个元素
 5 >>> a
 6 [3, 'aa', 85]
 7 >>> del a[2:4] # 删除从第2个元素开始,到第4个为止的元素。包括头不包括尾
 8 >>> a
 9 [3, 'aa']
10 >>> del a # 删除整个list
11 >>> a
12 Traceback (most recent call last):
13   File "<stdin>", line 1, in <module>
14 NameError: name 'a' is not defined
15 >>>

32.使用del时候,删除的只是名称,而不是列表本身值,事实上,在python中是没有办法删除值的,系统会自动进行垃圾回收。

33.求斐波那契数列

1 def fibs(num):
2     'a function document'
3     result = [1,1]
4     for i in range(num-2):
5         result.append(result[-2]+result[-1])
6     return result 

34.抽象函数(参数可以缺省,可以通过*p传递任意数量的参数,传递的是元组;通过**p传递任意数量的参数,传递的是字典)

 1 def a(*p):
 2     print p
 3 def b(**p):
 4     print p
 5 a(1,2,3)
 6 b(a='1',b='2',c='3')
 7 """
 8 result:
 9 (1, 2, 3)
10 {'a': '1', 'c': '3', 'b': '2'}
11 """ 

 35.string模块的join方法是split方法的逆方法。EG:seq = ['1','2','3','4','5'];sep = ',';s = sep.join(seq)

 36.抛出异常

1 if not imethod in ("POST", "GET", "ALL"):
2     raise ValueError, "METHOD_NOT_SUPPORT [met='%s']" % method

37.捕捉异常,显示错误日志

1 except Exception, ex:
2      logger.error("GET_NEWS_HEALTH_FAIL [exp='%s']", str(ex))
3 >>>ex : WriteException: Cannot write in JSON: datetime.datetime(2012, 1, 5, 15, 53)

 38.共享引用和相等(python学习手册第四版P163)

 1 >>>L = [1, 2, 3]
 2 >>>M = L                                   #M and L reference the same object
 3 >>>L == M                                 #Same value
 4 True
 5 >>>L is M                                   #Same object
 6 True
 7 
 8 >>>M = [1, 2, 3]
 9 >>>L == M                                 #Same values
10 True
11 >>>L is M                                   #Different objects
12 False

 39.函数缩写全称

ord()--->order

chr()--->char

repr()--->representation

pprint()--->pretty printer

 40.s.startswith()

做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束。Python为此提供了两个函数:
S.startswith(prefix[, start[, end]]) -> bool
如果字符串S以prefix开始,返回True,否则返回False。start和end是两个可以缺省的参数。分别是开始比较的位置和结束比较的位置。这个函数也可以写成S[start:end].startswith(prefix)。
S.endswith(suffix[, start[, end]]) -> bool
如果字符串S以suffix结束,返回True,否者返回False。与startswith类似,这个函数也可以写成S[start:end].endswith(suffix)。start和end仍然是从左数起。
做个实例:

1 >>> “fish”.startswith(”fi”)
2 True
3 >>> “fish”.startswith(”fi”,1)
4 False
5 >>> “fish”.endswith(”sh”)
6 True
7 >>> “fish”.endswith(”sh”,3)
8 False

  Python的这两个函数有个特别的地方——它的prefix和suffix参数不仅可以是字符串,还都可以是一个元组。只要其中一个成立,就返回True,也就是一种“或”的关系。比如:

1 if filename.endswith((’.gif’, ‘.jpg’, ‘.tiff’)):
2   print “%s是一个图片文件”%filename

上面两行代码根据文件扩展名是否是“gif”、“jpg”或“tiff”之一来决定文件是不是图片文件。

 41.eval

eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果。

 42.什么是原语,原语操作与原子操作

内核或微核提供核外调用的过程或函数称为原语(primitive)。
原语是一段用机器指令编写的完成特定功能的程序,在执行过程中不允许中断。
在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作,文件的原子操作是指操作文件时的不能被打断的操作。
原子还有一层意思,当该次操作不能完成的时候,必须回到操作之前的状态,原子操作不可拆分。
所有原子操作是同步的,而且不可被外部中断(内中断可以,不过一般是致命错误处理)。
也就是说,原子操作是中断安全的

 

 

 

 

posted on 2012-07-09 14:18  飞机场场长  阅读(291)  评论(0)    收藏  举报