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]
, 这是因为 a
和 b
都指向同一个对象。这两个变量名就像两个指向同一块内存的指针一样,只不过没有像 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
此时并未激活)。