1. 基础知识
1.1 语言语义
Python语言的特点是重视可读性、简洁性以及明确性。
1.1.1 缩进,而不是大括号
Python通过空白符(制表符或空格)组织代码,一般默认4个空格缩进量。示例如下,冒号表示一段缩进代码块的开始,其后的所哟与代码都缩进相同的量。
for x in array:
if x < pivot:
less.append(x)
else:
greater.append(x)
1.1.2 万物皆对象
1.1.3 注释
#前缀
1.1.4 函数调用和对象方法调用
函数调用用圆括号。
result = f (x, y, z )
result = f ( a, b, c, d=5, e='fo' )
几乎所有的Python对象都有一些附属函数(即方法),可以用来访问该对象的内部数据。方法调用如下:
obj. some_method (x, y, z)
1.1.5 变量和按引用传递
示例:
a = [ 1, 2, 3 ]
b =a #b和a指向同一个对象
a.append (4)
b #输出[1, 2, 3, 4]
1.1.6 动态引用,强类型
Python中,所有对象都会有一个特定的类型(或类),隐式转换只在很明显的情况下才会发生,如整形(int)和浮点型(float)进行运算时(4.5/2),否则就会报错。
可以通过isinstance了解对象的类型,检查一个对象是否是某个特定类型的实例。isinstance可接受由类型组成的元组,检查某个对象的类型是否属于元组中所指定的那些。
a = 5
isinstance ( a, int ) #返回True
a = 5 ; b = 4.5
isinstance ( a, ( int, float )) #返回True
isinstance ( b, ( int, float )) #返回True
1.1.7 属性和方法
Python中的对象通常都既有属性(attribute,即存储在该对象”内部“的其它Python对象),又有方法(method,与该对象有关的能够访问其内部数据的函数)。他们都能通过obj.attribute_name这样的语句访问。
属性和方法还可以利用getattr函数通过名称进行访问:getattr ( a, 'attribute' ) 。
1.1.8 ”鸭子“类型
此处的”鸭子“类型是一个哲学和逻辑学概念,即”对于一只鸟类动物,不用管它到底是不是鸭子,只要看它像不像鸭子就可以了“。
如,只要一个对象实现了迭代器协议(iterator protocol),你就可以确认它是可迭代的,比如尝试使用iter函数。对于字符串以及大部分Python集合类型,下面函数均会返回True。
def isiterable(obj):
try:
iter(obj)
return True
except TypeError: # not iterable
return False
if not isinstance(x, list) and isiterable(x):
x = list(x) #先检查对象是不是list,若不是就将其转换成list
1.1.9 引入(import)
import some_module
result = some_module.f(5)
pi = some_module.PI
from some_module import f, g, PI
result = g(5, PI)
import some_module as sm
from some_module import PI as pi, g as gf
r1 = sm.f(pi)
r2 = gf(6, pi)
1.1.10 二元运算和比较运算符
此处注意一个例子:
a = [1, 2, 3]
b = a
# Note, the list function always creates a new list
c = list(a)
a is b #返回True
a is not c #返回True
a == c #返回True
1.1.11 严格与懒惰
Python是一种严格(急性子)的语言,几乎在任何时候,计算过程和表达式都是立即求值的。
有一些Python技术(尤其是用到迭代器和生成器的那些)可以用于实现延迟计算(lazy evaluation)。
1.1.12 可变和不可变的对象
可变(mutable):大部分Python对象,如列表、字典、Numpy数组以及大部分用户自定义类型(类)。即它们所包含的对象或值是可以被修改的。
a_list = ['foo', 2, [4, 5]]
a_list[2] = (3, 4)
a_list #Output:['foo', 2, (3, 4)]
不可变的(immutable):如字符串和元组等。
a_tuple = (3, 5, (4, 5))
a_tuple[1] = 'four'
Output:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)<ipython-input-4-2c9bddc8679c> in <module> 1 a_tuple = (3, 5, (4, 5)) ----> 2 a_tuple[1] = 'four' TypeError: 'tuple' object does not support item assignment