使用Python创建全局变量,在初始化后更改值

时间:2017-05-05 02:22:01

标签: python

我一直在尝试为sha1算法编写一个小的python脚本。我需要初始化h0到h4的全局变量。

在初始化整数值后,它会变为h0和h3值的不同int,而不是h1,h2或h4。我不确定原因,因为快速谷歌搜索显示h0和h3不是特殊字符。

相关代码:

h0 = 0
h1 = 0
h2 = 0
h3 = 0
h4 = 0

#Initialize some variables
def init_var():
    global h0
    global h1
    global h2
    global h3
    global h4

    h0 = 01100111010001010010001100000001
    h1 = 11101111110011011010101110001001
    h2 = 10011000101110101101110011111110
    h3 = 00010000001100100101010001110110
    h4 = 11000011110100101110000111110000

    print "\n\n\n h0", h0
    print "h1", h1
    print "h2", h2
    print "h3", h3
    print "h4", h4

当我在控制台中打印它时,它会给出:

robert@robert-VirtualBox:~/sha1-hash-algorithm$ python testalgorithm.py



 h0 1393027350754575011593322497
h1 11101111110011011010101110001001
h2 10011000101110101101110011111110
h3 19342823492383875910635592
h4 11000011110100101110000111110000

有人能告诉我为什么会这样吗?这是python中的一些特殊字符吗?

我在输出中包含了一个屏幕截图: enter image description here

2 个答案:

答案 0 :(得分:3)

在python编号中,以0开头的是基数8(八进制数)。

>>> 011
9

011等于1 * (8**1) + 1 * (8**0) = 9
0111等于1 * (8**1) + 1 * (8**1) + 1 * (8**0) = 73

在您的情况下,它按预期工作。

>>> h0 = 01100111010001010010001100000001
>>> h0
>>> 1393027350754575011593322497L

答案 1 :(得分:1)

@luoluo告诉你原因。因此,如果要为变量分配二进制数,则应使用前缀:0b

>>> a = 0b10010
>>> print(a)
18
>>> a = 0b001010
>>> print(a)
10

你应该知道,当你向控制台打印二进制数时,Python会自动显示一个十进制数字。