空值 None
空值 None,就是空对象的值,此对象会由没有显式地设置返回值的函数返回。None 是个内置名称,空对象求值,什么也不会发生。
None
help(None)
Help on NoneType object:
class NoneType(object)
| Methods defined here:
|
| __bool__(self, /)
| self != 0
|
| __repr__(self, /)
| Return repr(self).
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
# 没有返回值的列表方法
a = [].append(1)
a
# 将 a 打印出来,将打印内置名称 None
print(a)
None
生成器表达式和推导式
生成器表达式和列表推导式非常相似,区别就是将方括号换成了小括号。
生成器表达式返回的是一个生成器迭代器 generator。表达式会产生一系列值,可使用内置函数 next() 逐一获取,或使用 for 循环遍历。
生成器迭代器中的元素,仅供一次性使用,而且可以要多少取多少,它会记住你取了多少,取到了哪里。
(i*i for i in range(3))
<generator object <genexpr> at 0x00000271080FBC00>
g = (i*i for i in range(5))
type(g)
generator
next(g), next(g)
(0, 1)
for i in g:
print(i)
4
9
16
这种表达式被设计用于生成器将立即被外层函数所使用的情况。生成器表达式相比完整的生成器更紧凑但较不灵活,相比等效的列表推导式则更为节省内存。
sum(i*i for i in range(5))
30
list(i*i for i in range(5))
[0, 1, 4, 9, 16]
除了列表推导式和生成器表达式,集合和字典也可使用类似的推导式。
{i*2 for i in 'abac'}
{'aa', 'bb', 'cc'}
{i:j for i,j in zip('abc',(1,2,3))}
{'a': 1, 'b': 2, 'c': 3}
其他内置类型
内置类型除了数字类型,布尔类型,序列类型,集合类型,映射类型,迭代器类型,解释器支持的还有一些其他种类的对象。这些对象大都仅支持一两种操作。
模块
模块唯一的特殊操作是属性访问: m.name
,这里 m 为一个模块而 name 为定义在 m 的符号表中的一个属性的名称。模块属性可以被赋值。import 语句严格来说也是对模块对象的一种操作。关于模块有详细的知识点介绍。
type(math)
module
import math
math.pi
3.141592653589793
函数
函数对象是通过函数定义创建的。对函数对象的唯一操作是调用它: func(argument-list)。
实际上存在两种不同的函数对象:内置函数和用户自定义函数。两者支持同样的操作(调用函数),但实现方式不同,因此对象类型也不同。关于函数有详细的知识点介绍。
print('abc') # 调用函数
abc
type(print)
builtin_function_or_method
def f():pass # 自定义函数
type(f)
function
方法
方法是在类中定义,使用属性表示法来调用的函数。关于方法有详细的知识点介绍。
type(list.append)
method_descriptor
type([].append)
builtin_function_or_method
代码对象
代码对象可由内置的 compile() 函数返回,也可通过从函数对象的 __code__
属性从中提取。
可将代码对象(而非源码字符串)传给 exec() 或 eval() 内置函数来执行或求值。
def f():
print('代码对象')
code = f.__code__
type(code)
code
exec(code)
代码对象
类型对象
类型对象表示各种对象类型。对象的类型可通过内置函数 type() 来获取。类型没有特殊的操作。标准库模块 types 定义了所有标准内置类型的名称。
type(int), type(list)
(type, type)
type(1), type([])
(int, list)