![](/img/trans.png)
[英]Python: Can I call a function as part of the *args list in another function?
[英]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
它都會重新執行 generator 以獲取密鑰。 但這並沒有發生。
以下是證明:
>>> 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)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.