赋值

1、Python的赋值语句不会返回值,Python不支持自增自减运算,Python多元赋值方式可以实现无需中间变量交换两个变量的值。

2、Python是“所见即所得”语言,通过缩进而非大括号来表示代码段,因此不应在同一段Python代码中混合使用制表符和空格。

3、可以让一个语句的范围横跨多行,只需要用一对括号把语句括起来就可以了。

4、变量命名规则:以下划线或字母开头,后面接数字,字母或下划线,区分大小写,禁止使用关键字。以单一下划线开头的变量名不会被from module import *导入,前后都有两个下划线的变量是系统定义的变量名,对解释其有特殊意义。以两下划线开头,但结尾没有两个下划线的变量名是类的本地变量。在交互模式下,只有单个下划线的变量名会保存最后表达式的结果。

5、print 重定向输出流:1、print >> file , x,y (file为文件对象)2、重新赋值sys.stdout(可以是文件对象或含有write方法的类)

6、and,or在Python中返回真或假的对象,而不是值True或False:eg:2 or 3 返回 2。还要注意短路计算。就or而言,Python从左往由求算,然后返回第一个为真的操作对象。Python会在其找到的第一个真值操作数的地方停止。就and而言,会停在第一个为假的对象上。

7、Python不允许赋值这类语句出现在应该是表达式出现的场合。也就是说像"while ((x=next()!=NULL){...}"这种在Python中行不通。




判断

1、注意else对应的if:所见即所得

2、条件表达式:x if c else y

3、只有if无case




循环

1、for语法:

for iter_var in iterable:
    suite_to_repeat        #iter_var被设置为可迭代对象的当前元素

2、迭代器并不代表循环条目的集合。迭代器对象有一个next()方法,调用后返回下一个条目。所有条目迭代完后,引发一个StopIteration异常告诉程序循环结束。for语句在内部调用next()并捕获异常

3、循环中的else子句值在循环完成后执行,也就是说发生break会跳过else块。

4、迭代器为类序列对象提供了一个类序列的接口。Python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。迭代器就是有一个next()方法的对象,而不是通过索引来技术。

for i in seq:
    do_something_to(i)
    #实际上是这样工作的:
fetch=iter(seq)
while True:
    try:
        i=fetch.next()
    except  StopIteration:
        break
    do_something_to(i)

5、字典的迭代器会遍历它的键。文件对象生成的迭代器会自动调用readline()方法。在我看来,拥有__iter__属性的对象就是可迭代的。一个实现了__iter__()和next()方法的类可以作为迭代器使用。

6、在迭代可变对象时不能修改它们。一个序列的迭代器只是记录你当前到达第几个元素,如果在迭代时改变了元素,更新会立即反映到所迭代的条目上。

7、文件对象就是自己的迭代器,即iter(file) is file 为True。而列表以及很多其他内置对象,不是自身的迭代器,因此它们支持多次打开迭代器,即可以赋不同的迭代器,这些迭代器记住各自的位置,互不影响。

8、迭代协议是非序列对象参与迭代循环以及列表解析的方式。

9、生成器是特定的函数,允许返回一个值,然后“暂停”代码的执行,稍后恢复。列表解析的一个不足是必须生成所有的数据,用以创建整个列表,这对于大量数据可能有影响。生成器表达式通过结合列表解析和生成器解决了这个问题。它并不真正创建列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”出来。列表解析:

[expr for iter_var in terable if cond_expr]

生成器表达式:

(expr for iter_var in terable if cond_expr)

10、生成器函数:编写为常规的def语句,但是使用yield语句一次返回一个结果,在每个结果之间挂起和继续它们的状态。yield语句挂起该函数并向调用者返回一个值,但是,保留足够的状态以使得函数能从它离开的地方继续。

11、生成器函数和生成器表达式自身都是迭代器,因此只支持一次迭代。