一些Python语法

关键字 global

global关键字主要目的是为了在函数中使用全局变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
count = 10

def modify_count():
temp_count = 20
print('local variable: ', temp_count)
global count
print('global variable: ', count)
count = 100
print('after modified: ', count)
return

print('before modify_count(): ', count)
modify_count()
print('after modify_count(): ', count)

输入结果:

1
2
3
4
5
6
7
before modify_count():  10
local variable: 20
global variable: 10
after modified: 100
after modify_count(): 100

Process finished with exit code 0

从代码中可以看到,,如果要在函数modify_count()中使用全局变量count,那么需要使用global关键字修饰。
同时,函数内部对count的修改,将影响到函数外面count的值。

if __name__ == '__main__' 说明

因为在 Python 中,一个.py文件就是一个模块,模块中一般写了很多函数供其他模块使用。但我们需要测试模块中函数的正确性,这时候就需要用到 if __name__ == '__main__'.

__name__是每个模块的一个属性名,如果我们需要在当前模块中编写测试代码,一般情况下,我们是将测试代码放在 if __name__ == '__main__'这条判断语句下面,因为如果是直接运行当前模块,那么__name__的值就是__main__,条件判断下面的测试代码将会被执行。

如果有另外一个模块module_2.py引用了当前模块module_1.py,那么当我们运行module_2.py时,module_1.py中的__name__的值将变成module_2,即引用了module_1这个模块的模块名。那这时module_1中的if判断将不满足,也就不会执行测试代码,module_2也就只是导入了module_1中的函数,符合我们的期望。

np.random.seed()说明

seed(int) 接收一个整数做为生成随机数的算法的参数。如果接收到的整数值相同,那么产生的随机数也相同。

代码

1
2
3
4
5
6
import numpy as np
num = 0
while num < 5:
np.random.seed(5)
print(np.random.random())
num += 1

输出结果

1
2
3
4
5
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948

但是设置的seed()的值只生效一次,下次使用random()函数如果不是上次的seed()值,那么将会产生不同的随机数。

代码

1
2
3
4
5
6
import numpy as np
num = 0
np.random.seed(5)
while num < 5:
print(np.random.random())
num += 1

输出结果

1
2
3
4
5
0.22199317108973948
0.8707323061773764
0.20671915533942642
0.9186109079379216
0.48841118879482914

从结果可以看到,第一次输出的random()值,由于和上面代码一样设置了seed(5),所以第一行结果相同;但是后面4次循环由于没有继续设置seed(),因而产生的随机数不同。

Donate comment here