python 调用 args 中的另一个函数失败
python fails to call another function in args
我最近在研究一个简单的基本加密程序。 (在阅读问题之前跳过阅读代码)
def generator():
enckey="abcdefghijklmnopqrstuvwxyz"
a=list(enckey)
random.shuffle(a)
c=''
for i in a:
c+=i
c=c+a[0]
return c
def senc(a,enckey=generator()):
b=list(a)
for i in range(0,len(a)):
for j in range(0,27):
if b[i]==enckey[j]:
b[i]=enckey[j+1]
break
c=''
for i in b:
c+=i
print("Encrypted text:",c,"\nEncryption Key:",enckey)
现在,当我调用函数 senc("argument")
时,它会生成一个 enckey
并使用它来加密提供的文本。现在,由于我说 enckey=generator()
我希望每次执行 senc
时它都会重新执行生成器以获取密钥。但这并没有发生。
证明如下:
>>> id(senc("Andy"))
Encrypted text: Arnj
Encryption Key: htpkzwqlxcsdnregobvaimyjufh
1655676136
>>> id(senc("Candy"))
Encrypted text: Cirnj
Encryption Key: htpkzwqlxcsdnregobvaimyjufh
1655676136
两者都在相同的内存地址,并且可以看出加密密钥是相同的。我哪里错了,为什么没有调用函数?
请注意,IDLE/commandprompt 的每个新实例的加密密钥都会发生变化,等等
默认参数仅在定义函数时计算一次。如果你想在每次调用不带 enckey
参数的函数时都有一个新的生成器,你应该这样做:
def senc(a,enckey=None):
if enckey is None:
enckey = generator()
b=list(a)
...
我最近在研究一个简单的基本加密程序。 (在阅读问题之前跳过阅读代码)
def generator():
enckey="abcdefghijklmnopqrstuvwxyz"
a=list(enckey)
random.shuffle(a)
c=''
for i in a:
c+=i
c=c+a[0]
return c
def senc(a,enckey=generator()):
b=list(a)
for i in range(0,len(a)):
for j in range(0,27):
if b[i]==enckey[j]:
b[i]=enckey[j+1]
break
c=''
for i in b:
c+=i
print("Encrypted text:",c,"\nEncryption Key:",enckey)
现在,当我调用函数 senc("argument")
时,它会生成一个 enckey
并使用它来加密提供的文本。现在,由于我说 enckey=generator()
我希望每次执行 senc
时它都会重新执行生成器以获取密钥。但这并没有发生。
证明如下:
>>> id(senc("Andy"))
Encrypted text: Arnj
Encryption Key: htpkzwqlxcsdnregobvaimyjufh
1655676136
>>> id(senc("Candy"))
Encrypted text: Cirnj
Encryption Key: htpkzwqlxcsdnregobvaimyjufh
1655676136
两者都在相同的内存地址,并且可以看出加密密钥是相同的。我哪里错了,为什么没有调用函数?
请注意,IDLE/commandprompt 的每个新实例的加密密钥都会发生变化,等等
默认参数仅在定义函数时计算一次。如果你想在每次调用不带 enckey
参数的函数时都有一个新的生成器,你应该这样做:
def senc(a,enckey=None):
if enckey is None:
enckey = generator()
b=list(a)
...