如何解决python无法在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 /命令提示符等实例,加密密钥的确会更改。
解决方法
定义函数时,默认参数仅计算一次。如果您希望每次调用不带enckey
参数的函数时都拥有一个新的生成器,则应该执行以下操作:
def senc(a,enckey=None):
if enckey is None:
enckey = generator()
b=list(a)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。