加深Python知识课参考资料:
- Python Cookbook, Third Edition, by David Beazley and Brian K. Jones (O’Reilly)
- Fluent Python by Luciano Ramalho (O’Reilly)
- Effective Python, Second Edition, by Brett Slatkin (Addison-Wesley)
2.1Python解释器
python是一种解释型语言,通过一次执行一个语句来执行程序。
2.2IPython基础
Tab补全
略
Introspection(自省)
在变量前或者后使用问号(?)将显示关于对象的一些信息,这被称为对象自省。
?有一个用法,类似于标准Unix或Windows命令行的方式搜索IPython命名空间。与通配符(*)组合在一起的多个字符将显示与通配符表达式匹配的所有名称。例如,我们试图获得Numpy命名空间中包含load的所有函数的列表,可以用
np.*load*?
2.3Python语言基础
Python语句不需要用分号终止。但分号可用在一行上分割多个语句(但通常不鼓励这么做)
动态引用,强类型
Python中的变量没有与之关联的固有类型,变量只需赋值就可以引用不同类型的对象。
变量是特定命名空间中对象的名称;类型信息存储在对象本身中。Python是一种强类型语言,形如
‘5’ + 5 # 不会进行隐式转换得到10或者'55'
但在某些允许情况下也会发生隐式转换,如
a = 4.5 # <class 'float'>
b = 2 # <class 'int'>
a / b # 隐式转换,得到2.25
属性和方法
Python中的对象通常同时具有属性(存储在对象‘内部’的其他Python对象)和方法(与可以访问内部数据的对象关联的函数),他们都可以通过语法<obj.attribute_name>访问;也可以通过’getattr(obj, ‘attribute_name’)'函数访问
鸭子打字
通常,我们可能不关心对象的类型,而只关系它是否具有某些方法或行为。例如,你可以通过对象是否实现了迭代器来证实一个对象是否可迭代。对许多对象而言,这意味着它有‘iter’魔术方法。而更好的检查方法是尝试使用’iter’函数:
def isiterable(obj):
try:
iter(obj)
return True
except TypeError: # not iterable
return False
二元运算符以及比较
可以通过is和not is来检查两个变量是否引用同一个对象。
is和is not的一个常见用法是检查一个变量是否引用None,因为有且只有一个None对象。
可变和不可变对象
Python中的许多对象(如列表、字典、Numpy数组和大多数用户定义的类型(类))都是可变的,这意味着可以修改它们包含的一个或多个对象。
其他的,如字符串和元组,是不可变的,这意味着它们的内部数据无法修改。
标量类型
Python中有一小组内置类型,用于处理数值数据,字符串,布尔值,日期和时间。这些“单值”类型有时称为标量类型。日期和时间由标准库datetime提供,单独讨论。
字符串
对于带换行符的多行字符串,可以使用三重引号来编写字符串。
Python中的字符串是不可变对象,因此要修改字符串,需要使用创建新字符串的函数或方法,如‘replace’方法。
字符串是Unicode的序列,因此可以像其他序列(如列表和元组)一样处理。并且适用“切片”语法。
反斜杠字符是转义字符,用于指定换行符或Unicode字符等特殊字符。可以在字符串前加上引导符r,此时字符串将按照原样解释。
字符串模版化或格式化是一个重要主题。String对象有一个format方法,它可用于将格式化的参数替换为字符串,从而生成一个新的字符串,如:
template = '{0:.2f} {1:s} are worth US${2:d}'
# {0:.2f}表示第一个参数的格式设置为具有两个小数点的浮点数
# {1:s}表示第二个参数的格式设置为字符串
# {2:d}表示第三个参数的格式设置为精确整数
template.format(88.46, 'Argentne Pesos', 1)
Python3.6引入了一个名为f-strings(格式化字符串文本的缩写)的新功能,它使得创建格式化字符串更加方便。若要创建一个f-string,在字符串文本前面添加字符’f’,并将Python表达式括在大括号中,以将表达式的值替换成格式化的字符串。
amount = 10
rate = 88.46
currency = 'Pesos'
result = f'{amount} {currency} is worth US${amount / rate:.2f}'
字节和统一码(Unicode)
在现代Python(如Python3.0及更高版本)中,Unicode已经成为第一类字符串类型,它可以更一致地处理ASCII和非ASCII文本。在旧版本Python中,字符串都是字节,没有任何明确的Unicode编码。假如你知道字符编码,则可以转化为Unicode。下面是一个包含非ASCII字符的Unicode字符串示例:
val = "español"
可以通过’encode’方法将这个Unicode字符串转化为它的UTF-8字节表示形式
val_utf8 = val.encode('utf-8')
type(val_uft8) # 返回bytes,说明这是字节
假设你知道一个字节对象的Unicode编码,你也可以通过’decode’方法将它还原:
val_uft8.decode('utf-8')