我无法从另一个文件导入函数名称

时间:2019-10-16 02:50:54

标签: python

我正在制作一个密码生成器,它将生成的密码转换为md5哈希,但不允许我将功能从一个文件导入到另一个文件。

这是我的代码。

password.py

import random
import string


def main():

    y = int(input("Enter desired length for password: "))

    def random_char(y):
        return ''.join(random.choice(string.ascii_letters + string.digits + string.punctuation) for x in range(y))

    genpass = random_char(y)

    print(genpass)

    def getGenpass():
        return genpass

main()

hash.py

import hashlib
import password
from password import getGenpass


mystring = password.getGenpass()

def main():
    hash_object = hashlib.md5(mystring.encode())
    print("Here is your md5 hash: " + hash_object.hexdigest())

main()

如果我从password.py中删除了导入,则脚本可以正常工作。

免责声明。我是python的新手。

3 个答案:

答案 0 :(得分:0)

因为您的函数没有全局功能,所以它在main()中定义,并且不能从main外部访问。而且您的main总是在每次导入时运行。当您只想将其用作导入时,请尝试以下操作:

password.py:

import random
import string

def getGenpass():

    def random_char(y):
        return ''.join(random.choice(string.ascii_letters + string.digits + string.punctuation) for x in range(y))

    y = int(input("Enter desired length for password: "))

    genpass = random_char(y)

    print(genpass)

    return genpass

然后仅将函数导入您的hash.py:

import hashlib
from password import getGenpass

答案 1 :(得分:0)

password.py

您可以这样编码:

import random
import string

def getGenpass():
    y = int(input("Enter desired length for password: "))

    def random_char(y):
        return ''.join(random.choice(string.ascii_letters + string.digits + string.punctuation) for x in range(y))

    genpass = random_char(y)
    print(genpass)
    return genpass

答案 2 :(得分:0)

getGenpass是Main内部的一个内部函数,为什么期望它是可见的?