python学习笔记


1. python file”和“python <file”是有区别的。

对于后一种情况,程序中类似于调用 input() 和raw_input()这 样的输入请求,来自于确定的文件。因为在解析器开始执行之前,文件已经完全读入,所以程序指向文件尾。 在前一种情况(这通常是你需要的)它们从来自于任何联接到Python解释器的标准输入,无论它们是文件还是 其它设备。

2.调用解释器时,脚本名和附加参数之传入一个名为sys.argv的字符串列表。没有脚本和参数时,它至少也有一个 元素:sys.argv[0]此时为空字符串。脚本名指定为‘ - ’(表示标准输入)时,sys.argv[0]被设置为‘ - ’,使用-c 指令时,sys.argv[0]被设定为‘ -c ’。 -c 命令之后的参数不会被 Python 解释器的选项处理机制所截 获,而是留在sys.argv 中,供脚本命令操作。

3.从tty读取命令时,我们称解释器工作于交互模式。这种模式下它根据主提示符来执行,主提示符通常标识为三 个大于号(“>>> ”);继续的部分被称为从属提示符,由三个点标识(“... ”)。

4.有错误发生时,解释器打印一个错误信息和栈跟踪(监视)器?。交互模式下,它返回主提示符,如果从文件 输入执行,它在打印栈跟踪器后以非零状态退出。(异常可以由try语句中的except子句来控制,这样就不会出 现上文中的错误信息) 有一些非常致命的错误会导致非零状态下退出,这由通常由内部矛盾和内存溢出造成。 所有的错误信息都写入标准错误流;命令中执行的普通输出写入标准输出。

在主提示符或附属提示符输入中断符(通常是Control-C or DEL)就会取消当前输入,回到主命令行。2.1执行 命令时输入一个中断符会抛出一个 KeyboardInterrupt 异常,它可以被try句截获。

5.BSD系统中,Python脚本可以像Shell脚本那样直接执行,只要在脚本文件开头写一行命令,指定文件和模式:

#! /usr/bin/env python

(将用户路径通知解释器) “#!”必须是文件的前两个字符,在某些平台上,第一行必须以Unix风格的行结束符 (“\n”)结束,不能用Mac(“\r”)或Windows(“\r\n”)的结束符。注意,“#”是Python中是行注释的 起始符。

脚本可以通过 chmod 命令指定执行模式和许可权。 $ chmod +x myscript.py

 6.

使用Python解释器的时候,我们可能需要在每次解释器启动时执行一些命令。你可以在一个文件中包含你想要 执行的命令,设定一个名为PYTHONSTARTUP 的环境变量来指定这个文件。这类似于Unix shell的.profile文 件。

这个文件在交互会话期是只读的,当Python从脚本中解读文件或以终端做为外部命令源时则不会如此(尽管它 们的行为很像是处在交互会话期。)它与解释器执行的命令处在同一个命名空间,所以由它定义或引用的一切 可以在解释器中不受限制的使用。你也可以在这个文件中改变sys.ps1和sys.ps2指令。

如果你想要在当前目录中执行附加的启动文件,你可以在全局启动文件中加入类似以下的代码:“if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')”。 如果你想要在某个脚本中使用启动文件,必须要在脚本中 写入这样的语句:

import os
filename = os.environ.get('PYTHONSTARTUP') if filename and os.path.isfile(filename):

         execfile(filename)

7. 字符串可以用一对三重引号”””或'''来标识。三重引号中的字符串在行尾不需要换行标记,所有的格 式都会包括在字符串中。

8. word = 'Help' 'A' 种方式只对字符串值有效,任 何字符串表达式都不适用这种方法。

9. 字符串的第一个字符下标是0

10.python 已经有了几个复合数据类型,用于组织其它的值。最通用的是链表,它写为中括之间用逗号分隔的一列值(子项),链表的子项不一定是同一类型的值。

11. 内置函数len()也同样可以用于链表

12.print语句打印给定表达式的值。它与你仅仅输入你需要的表达式(就像前面的计算器示例)不同,它可 以同时输出多个表达式。字符串输出时没有引号,各项之间用一个空格分开,你可以很容易区分它们

13. print语句末尾的逗号避免了输出中的换行

14. 如果你需要一个数值序列,内置函数range()可能会很有用,它生成一个等差级数链表。

range(10)生成了一个包含10个值的链表,它准确的用链表的索引值填充了这个长度为10的列表,所生成的链表 中不包括范围中的结束值。也可以让range操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负 数,有时这也被称为“步长”)

15. pass 语句什么也不做。它用于那些语法上必须要有什么语句,但程序上什么也不要做的场合。

16.函数体的第一行可以是一个字符串值,这个字符串是该函数的 文档字符串,也可称 作docstring。

17.调用函数时会为局部变量引入一个新的符号表。所有的局部变量都存储在这个局部符号表中。引用参数时,会 先从局部符号表中查找,然后是全局符号表,然后是内置命名表。因此,全局参数虽然可以被引用,但它们不 能在函数中直接赋值(除非它们用global语句命名)

函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是传值调用(这里的值总是一个对象引用, 而不是该对象的值)。4.1 一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建

18. 函数定义在当前符号表中引入函数名。作为用户定义函数,函数名有一个为解释器认可的类型值。这个值可以 赋给其它命名,使其能句做为一个函数来使用。这就像一个重命名机制:

>>> fib
<function object at 10042ed0> >>> f = fib
>>> f(100)

函数定义在当前符号表中引入函数名。作为用户定义函数,函数名有一个为解释器认可的类型值。这个值可以
赋给其它命名,使其能句做为一个函数来使用。这就像一个重命名机制:

>>> fib
<function object at 10042ed0> >>> f = fib
>>> f(100)

你可能认为fib不是一个函数(function),而是一个过程(procedure)。Python和C一样,过程只是一个没有返 回值的函数。实际上,从技术上讲,过程也有一个返回值,虽然是一个不讨人喜欢的。这个值被称为 None (这是一个内置命名)。

19. 最有用的形式是给一个或多个参数指定默认值。这样创建的函数可以在调用时使用更少的参数。

20.

默认值在函数定义段被解析,如下所示:

i=5

def f(arg=i): print arg

i=6 f()

will print 5. 重要警告:默认值只会解析一次。当默认值是一个可变对象,诸如链表、字典或大部分类实例时,会产生一些

差异。例如,以下函数在后继的调用中会积累它的参数值:
def f(a, L=[]): L.append(a) return Lprint f(1) print f(2) print f(3)
21
.函数可以通过参数关键字的形式来调用,形如“keyword = value” parrot(voltage=5.0, 'dead') # non-keyword argument following keyword(在关键字后面有非关键字参数)
通常,参数列表中的每一个关键字都必须来自于形式参数,每个参数都有对应的关键字。形式参数有没有默认 值并不重要。实际参数不能一次赋多个值--形式参数不能在同一次调用中同时使用位置和关键字绑定值
posted @ 2012-11-16 00:49  Jet J.J.Cheng  阅读(297)  评论(0编辑  收藏  举报