python 学习笔记

来源:互联网 发布:alias软件 汉化版 编辑:程序博客网 时间:2024/05/17 08:53

1. "_" 表示最后一个表达式的值并输出;

2. ">>" 表示输出对象重定向,例:

logfile = open('/tmp/mylog.txt', 'a')

print >> logfile, 'Fatal error: invalid input!'

logfile.close()

3. int ()可以将字符串转变为整形,例:

Int("66")

4. 从键盘接收输入字符:

>>> num = raw_input('Now enter a number: ')

Now enter a number: 1024

5. Python有两种除法符号:

“/”: 整除;

“//”: 浮点除法;

6. “**”表示乘方运算符;

7. 只有and和or 没有&& 和||;

8. 不支持m++,++m,m--,--m;

9. 字符串索引:(数组也有array[2:3]类似用法)

Str = 'abcdef'

Str[2:3]   输出 'c'

Str[:2]    输出 'ab'

Str[2:]    输出 'cdef'

Str[-1]    输出 'f'

Str * Str  输出 ‘abcdefabcdef’

Print 'a' * 5    输出 aaaaa

下面'''用法:

>>> pystr = '''python

... is cool'''

>>> pystr

'python\nis cool'

>>> print pystr

python

is cool

>>>

10. 没有switch语句;

11. Python只有增强型for循环,所以但是遍历取索引也可以用下面方法:

>>> foo = 'abc'

>>> for i in range(len(foo)):

... print foo[i], '(%d)' % i

...

a (0)

b (1)

c (2)(注: range()能起到计数作用)

一般for循环的是元素,以上for循环的是索引,2.3版本加入enumerate()同时循环元素和索引,如下:

>>> for i, ch in enumerate(foo):

... print ch, '(%d)' % i

...

a (0)

b (1)

c (2)

12. 异常处理(异常自己抛出可以用raise):

try:

 //....

except IOError, e:

print 'File open error:',e

13. 函数定义:

def addMe2Me(x):

'apply + operation to argument' # 这句相当于函数的功能描述

return (x + x)

函数可以定义默认参数:

>>> def foo(debug=True):

... 'determine if in debug mode with default argument'

... if debug:

... print 'in debug mode'

... print 'done'

...

14. 定义一个类:

实例化一个类并调用类的方法:

15. 

>>> y = (x = x + 1) # Python不支持此种语法

>>> y = x = x + 1 # 但是支持链式赋值:

16. “多元”赋值

>>> (x, y, z )= (1, 2, 'a string')

以上x赋值为1,y赋值为2,z赋值为‘a string’

(注:小括号虽然可加可不加,但是加上阅读性更好)

17. 下划线开头的变量意义:

_xxx 不用'from module import *'导入

__xxx__系统定义名字

__xxx 类中的私有变量名

18. Python 中比较运算符有is 和is not, 没有!True类似用法;

19. Python 内建函数:

注:(1)  obj == eval(repr(obj))

    (2)  x**y pow(x,y)是等同的;

20. 对象比较方式:

方法一:用isinstance()

方法二:用各种实例的type和其type比较

方法三:

21. Python 没有chatbyte,存储字符只能用字符串;没有指针;整形只有一个int,如果数值过大会自动返回一个长整形而不会报错;浮点型只支持双精度的,即:float实际就是C语言里的double

22. Python 有五个.算内建函数用于数值运算: abs(), coerce(), divmod(), pow(), pow()和 round()。

divmod()内建函数把除法和取余运算。对整数来说, 它的返回值就是地板除和取余操作的结果。对浮点数来说, 返回的商部分是math.floor(num1/num2),对复数来说, 商部分是ath.floor((num1/num2).real)。

>>> divmod(10,2.5)

(4.0, 0.0)

>>> divmod(2.5,10)

(0.0, 2.5)

23. 进制转化函数和ASCII转化函数:

oct()和 hex() #分别为转八进制和十进制

ord() #字符转ASCII码

chr() #ASCII码转字符

24. Randrange() range()一样, choice(),random()uniform()一样;

25.  Python 实.上有3 类字符串.通常意义的字符串(str)和Unicode 字符串(unicode)实.上都是抽象类asestring 的子类。这个basestring 是不能实例化的。

26.  连接字符串中间有空格隔开的最优方法:

>>> s = ' '.join(('Spanish', 'Inquisition', 'Made Easy'))

>>> s

'Spanish Inquisition Made Easy'

27. Unicode字符串格式:

u'hello world'   #前面有个u

28. 字符串模板: 更简.的替代品:

29. 原始字符串操作符( r/R ):

R'abcde'   #普通字符串

Ur'Hello\n World'

30. 表达式似乎不懂:

我们可以借用这个函数的核心操作, 使用 filter() 和 lambda 挑选出序列中的奇数:

>>> seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12]

>>> filter(lambda x: x % 2, seq)

[11, 9, 9, 9, 23, 9, 7, 11]

31. 重构分析:

第一种算最大行:(读一行比较一下)

f = open('/etc/motd', 'r')

longest = 0

while True:

linelen = len(f.readline().strip())

if not linelen:

break

if linelen > longest:

longest = linelen

f.close()

return longest

第二种算最大行:(读出所有行,然后在for循环里比较)

f = open('/etc/motd', 'r')

longest = 0

allLines = f.readlines()

f.close()

for line in allLines:

linelen = len(line.strip())

if linelen > longest:

longest = linelen

return longest

第三种算最大行:(读出所有行,然后在for循环里比较,只是读的时候加了去掉左右空格的判断)

f = open('/etc/motd', 'r')

longest = 0

allLines = [x.strip() for x in f.readlines()]

f.close()

for line in allLines:

linelen = len(line)

if linelen > longest:

longest = linelen

return longest

第四种算最大行:(读出所有行的长度,然后用内建函数取得最大值)

f = open('/etc/motd', 'r')

allLineLens = [len(x.strip()) for x in f]

f.close()

return max(allLineLens)

第五种算最大行:(精简变量)

f = open('/etc/motd', 'r')

longest = max(len(x.strip()) for x in f)

f.close()

return longest

第六种算最大行:(精简变量)

return max(len(x.strip()) for x in open('/etc/motd'))

注:

striptrim掉字符串两边的空格。
lstrip, trim掉左边的空格
rstrip, trim掉右边的空格

32. Python 异常类型:(所有内建异常也就是从 BaseException派生的异常)

BaseExceptiona 所有异常的基类

SystemExitb python 解释器请求退出

KeyboardInterruptc 用户中断执行(通常是输入^C)

Exceptiond 常规错误的基类

StopIteratione 迭代器没有更多的值

GeneratorExita 生成器(generator)发生异常来通知退出

SystemExith Python 解释器请求退出

StandardErrorg 所有的内建标准异常的基类

ArithmeticErrord 所有数值计算错误的基类

FloatingPointErrord 浮点计算错误

OverflowError 数值运算超出最大限制

ZeroDivisionError 除(或取模)零 (所有数据类型)

AssertionErrord 断言语句失败

AttributeError 对象没有这个属性

EOFError 没有内建输入,到达EOF 标记

EnvironmentErrord 操作系统错误的基类

IOError 输入/输出操作失败

OSErrord 操作系统错误

WindowsErrorh Windows 系统调用失败

ImportError 导入模块/对象失败

KeyboardInterruptf 用户中断执行(通常是输入^C)

LookupErrord 无效数据查询的基类

IndexError 序列中没有没有此索引(index)

KeyError 映射中没有这个键

MemoryError 内存溢出错误(对于Python 解释器不是致命的)

NameError 未声明/初始化对象 (没有属性)

UnboundLocalErrorh 访问未初始化的本地变量

ReferenceErrore 弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError 一般的运行时错误

NotImplementedErrord 尚未实现的方法

SyntaxError Python 语法错误

IndentationErrorg 缩进错误

TabErrorg Tab 和空格混用

SystemError 一般的解释器系统错误

TypeError 对类型无效的操作

ValueError 传入无效的参数

UnicodeErrorh Unicode 相关的错误

UnicodeDecodeErrori Unicode 解码时的错误

UnicodeEncodeErrori Unicode 编码时错误

Edit By Vheavens

Edit By Vheavens

UnicodeTranslateErrorf Unicode 转换时错误

Warningj 警告的基类

DeprecationWarningj 关于被弃用的特征的警告

FutureWarningi 关于构造将来语义会有改变的警告

OverflowWarningk 旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarningi 关于特性将会被废弃的警告

RuntimeWarningj 可疑的运行时行为(runtime behavior)的警告

SyntaxWarningj 可疑的语法的警告

UserWarningj 用户代码生成的警告

33. Python允许except 一次性带多个exception:

def safe_float(obj):

try:

retval = float(obj)

except (ValueError, TypeError):

retval = 'argument must be a number or numeric string'

return retval

34. 我们综合了这一章目前我们所见过的所有不同的可以处理异常的语法样式:

try:

try_suite

except Exception1:

suite_for_Exception1

except (Exception2, Exception3, Exception4):

suite_for_Exceptions_2_3_and_4

except Exception5, Argument5:

suite_for_Exception5_plus_argument

except (Exception6, Exception7), Argument67:

suite_for_Exceptions6_and_7_plus_argument

except:

suite_for_all_other_exceptions

else:

no_exceptions_detected_suite

finally:

always_execute_suite

35. 异常和sys 模块:

>>> try:

... float('abc123')

... except:

... import sys

... exc_tuple = sys.exc_info()

...

>>> print exc_tuple

(<class exceptions.ValueError at f9838>, <exceptions. ValueError instance at 122fa8>,

<traceback object at 10de18>)

>>>

36. Python函数调用方式:

net_conn('kappa', 8080);

net_conn(port=8080, host='chino');

以上两种用法一样;

37. 给方法加方法功能注解的两种方式:

方法一:

def foo():

'foo() -- properly created doc string'

方法二:

先只管定义一个方法体,不管里面的注释:

def bar():

Pass

在方法定义外面定义方法功能注解:

foo.__doc__ = 'Oops, forgot the doc str above'

38. 传递和调用(内建)函数

一个.函数作为参数传递,并在函数体:

39. 可变长度的参数:

40. Lambda表达式:

def mySum(x,y): return x+y

lambda x,y: x+y

Lambda可以用来创建匿名方法,上面两行作用一样;

41. 自定义操作符:

>>> baseTwo = partial(int, base=2)

>>> baseTwo.__doc__ = 'Convert base 2 string to an int.'

>>> baseTwo('10010')

42. 在方法内部如果赋值给一个方法外面定义的全局变量,得在方法内部申明那个变量为全局变量,否则会当成方法内部变量处理:

43. 待续......

原创粉丝点击