python 技巧收集

目录

本文是 python 技巧收集的“杂文”,记录使用 python 过程中的一些小技巧。

1 分割字符串

S = 'aaa,bbb,cccc,dd\n'
line.rstrip().split(',')

输出为:

['aaa','bbb','cccc','dd']

2 一切都是对象

在 python 中,一切都是对象。这句话意味着 python 不是强类型语言。python 甚至不鼓励在写代码的时候进行类型检查。因为这会破坏代码的灵活性。

在 python 中,代码处理的是对象而不是数据类型。这意味着,我们只需要处理好指向对象的所引即可。任何一个变量名都是指向对象的所引。

比如:

a = [0,1,2]
b = a

这时,如果我们令 b[0]=8 ,那么 a 就会变成 [8,1,2], 这是因为 ab 都指向同一个对象。这两个变量名就像两个指向同一块内存的指针一样,只不过没有像 C 语言那样有取地址和取数据的复杂操作。在 python 中传递的是引用,类似 C 中的指针。

3 变量作用域

在 python 中,当你听到 global 时,你应该立即想到 module . 如果要在 module B 中使用 module A 的变量,需要使用 import 导入。

在 def 中,所有的变量都是局部变量,其作用域仅限于当前函数。如果要在 def 中为一个全局变量赋值则需要在当前函数中使用 global 关键字把全局变量引入当前函数。当然,你也可以在 def 内使用 global 声明一个变量为 global. 这样就可以在 def 外作为 global 变量来发访问。

X = 99

def f1():
    X=88
    def f2():
        print(X)
    f2()

f1()

注意,在上面的代码中, f1() 输出的结果是:88 . 为了理解这个结果,想象 f2 是 f1 内的一个 local 变量。 f2 只在 f1 内有效。在 f2 中,调用了变量 X ,这时,解释器会向上查找 X 的定义。在 f1 的定义中找到了 X

在下面的代码中,我们会看到函数会及以变量的查找顺序。

def f1():
    X=88
    def f2():
        print(X)
    return f2

action = f1()
action()

f1 返回的是一个函数 f2 ,赋值给了 action 。调用 action 时, action 依然记得 f1 中的 X (尽管 f1 此时并未激活)。