簡體   English   中英

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它都會重新執行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM