Python Careful

关于局部变量和全局变量

在函数内部或代码块内是可以访问全局变量的,但是是以只读形式访问的,若不加 global 关键字 那么是不能对其进行修改的,若对全局变量进行赋值,默认是会创建一个新的同名局部变量的

而且 在一个代码块内部,如果有新声明的新同名变量,那么就算在其前面也是不能访问到外部的 全局变量的,此时若进行访问,会报错

var = 1

def func():
    print(var) # ok 1
var = 1

def func():
    print(var) # not ok referenced before assignment
    var = 4
var = 1

def func():
    var = 4
    print(var) # ok 4
var = 1

def func():
    global var
    print(var)  # ok 1
    var = 4
    print(var) # ok 4

print(var) # ok 4

Python 中的无返回值方法

例如 list 的 append 操作就是无返回值的,换句话说就是不能进行形如

list = []
list.append(1).append(2)

这样的连续操作

注意函数返回的数据类型

  • 注意是 list 还是 生成器
  • 注意是 list/tuple 还是 单个变量

Python 很注重惰性计算,所以很多函数,方法返回的是 生成器 或者 map 类型,有些时候需要 转换 为 list tuple 等再进行使用

例如 plt.plot(...) 就返回一个 plot 对象的 list, 原因大概是可以这样写 plt.plot(x, y, x, z)

单元素 list tuple 的注意事项

很多函数可能需要返回多个值,所以就会返回 tuple 作为数据类型,但很多时候其返回的 tuple 中又只有一个元素,此时就加逗号咯

line, = ax.plot(Data[0, 0], Data[0, 1],color = 'red',lw = 1.5, label = 'Pos')

类似这样

有时候我们也需要返回一个 tuple 但只有一个元素,所以加逗号咯

def func():
    something()
    return res,

python 中的代码块

if 语句不会产生代码块,也就是不会生成新的变量空间,这点和其他语言不太一样