Python基础笔记(五)

type和isinstance区别

  • type()不会认为子类是一种父类类型。
  • isinstance()会认为子类是一种父类类型。

python成员运算符

测试实例中包含了一系列的成员,包括字符串、列表或元组。

运算符 描述
in 在指定序列中找到值返回Ture,否则返回False
not in 在指定的序列中没有找到值返回Ture

python身份运算符

身份运算符用于比较两个对象的存储单元

运算符 描述 实例
is is是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

注: id() 函数用于获取对象内存地址。

is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内建作用域
1
2
3
4
5
6
7
x = int(2.9)  # 内建作用域

g_count = 0 # 全局作用域
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

global和nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python3

num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()

1
123

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/python3

def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()

100
100

学习资料

菜鸟教程Python3

廖雪峰的官方网站Python3