函数返回指针而不是Python中的值

函数返回指针而不是Python中的值,python,pointers,Python,Pointers,我已经完成了生成密码列表的函数,但它返回的是指针而不是值: #!/usr/bin/python3 import sys import string from random import * characters = string.ascii_letters + string.digits def generator(): password = "".join(choice(characters) for x_num in range(randint(18, 19))) re

我已经完成了生成密码列表的函数,但它返回的是指针而不是值:

#!/usr/bin/python3
import sys
import string
from random import *

characters = string.ascii_letters + string.digits

def generator():
    password =  "".join(choice(characters) for x_num in range(randint(18, 19)))
    return password


def pass_list(num_of_passwd):
    paswd_list = []
    for index in range(num_of_passwd):
        paswd_list.append(generator())
    passwords = pass_list
    print (passwords)

为什么会发生这种情况?

这应该适合您:

#!/usr/bin/python3
import sys, string, random

def generator(chars):
    password = "".join(random.choice(chars) for _ in range(random.randint(18, 19)))
    return password

def pass_list(chars, num_of_passwd):
    pass_list = [generator(chars) for _ in range(num_of_passwd)]
    return pass_list

characters = string.ascii_letters + string.digits
passwords = pass_list(characters, len(characters))
print(passwords)
输出:

['R63qhL4pzkwyb4DxyJ', 'iStYwujZ9hbGhKhCvr', 'CawJ3qAdqSL0Bf8phZ', '48PPQj8btdxaqshDkk', '318rubpkcR5mOrPMYOT', 'iOkINL0TkjL4sq9Mc3', 'Fw64Tj5KyNVNbJRYLD', 'voALiyI3vn70F3H7Ua6', 'ofAGywZqrEMcJkRwjWL', 'wMlYVakjZzz6Sm04jcv', 'PbPT2Hr9nR0eLhX0aKj', 'Fqa3oGBFj4HmdJR8C3', 'Wva99eZyXZZHaKrwrlT', 'kC7kRHuDYx9njsttQG', 'r5IQZF61lLRowiXQ6e9', 'Lh50xONU63ftvNUoAY', 'ByaxlBt8qVB9RbdQZz', 'b6VNghr4mhT4wfNGec', 'UB3qnHHdEF9OEvk5BHc', 'yA3j7sH4oClb5EybDN', 'E9ejvelWBUFVWCfAKL', 'ladx1niGhZv8bGoghY', 'E2EerTp7sMN6VBAV7Q', 'IxELC2nB5f4zCinvjK', 'DqF38rzrcihfFJwCJN', 'YeakZZHZKRAIM3Bt1pE', 'oJrLBQhyepaF1LiBfZJ', 'gNsgLR9Berqowg6CII', 'hLldZQ9MqxYySQ9Kti', 'mzGE71SiVHqdIbxDMwh', 'qkfAXnEWUkkxPTvaL3', 'FUx1xoKGFpDSM1SB8A', '0vH3AePPLAmbJonqTP3', 'thf80WN1JK4WdtrEySk', '9GlqeSobGMND6LzqYU', 'CqPPeqyAjM1YVjiN3UF', 'gdAHZdIxYSgdBCRli3', 'i2ltodn3npecEjV6bXu', 'ejSBXWalzp6QvQFzuE', 'usnv3Wwb4drwX6KUIkg', 'f24RszgtS8KyNE3A8u', 'lVYyoQoR9QVmUC4F7M', '5avz5UvQqMjC2oCPCCs', '1yVSXljlVqx83pCuPdo', 'sUkmkR2Otb89YFPtRQ', 'sVOnTTVBhr3ss6JjFi', 'o3ZIR1aRd579G6YPrBI', 'PP1WxXisQqYfB0OSYz', 'o6qcvRrAOqJDvf5HxB', 'UlrdaaIR3QVU8haF3qn', 'MrfKJcbNq4GjuPUPkNF', 'vU3aWCQFSpAVzZBp5E', 'ZzpLG4bqLrjENf8Uv6t', 'cy15Fqtw9rCKoOtCuN', 'Y7Iwjr9BjoDcMuz9l9', 'hsdc6B45lgtgsbD5fux', 'uZPp7buh4faAJSymD4V', 'u15I7Jy8hhCXRhGdEL', 'wucZvSYhQ3du5gR0H6', 'W1lzh3kSmDB8ZJyEGX', 'UkEE85JGJvhbNhbS8RM', 'oZiqjgW5GfCstWf09Hb']

原始代码的问题:

['R63qhL4pzkwyb4DxyJ', 'iStYwujZ9hbGhKhCvr', 'CawJ3qAdqSL0Bf8phZ', '48PPQj8btdxaqshDkk', '318rubpkcR5mOrPMYOT', 'iOkINL0TkjL4sq9Mc3', 'Fw64Tj5KyNVNbJRYLD', 'voALiyI3vn70F3H7Ua6', 'ofAGywZqrEMcJkRwjWL', 'wMlYVakjZzz6Sm04jcv', 'PbPT2Hr9nR0eLhX0aKj', 'Fqa3oGBFj4HmdJR8C3', 'Wva99eZyXZZHaKrwrlT', 'kC7kRHuDYx9njsttQG', 'r5IQZF61lLRowiXQ6e9', 'Lh50xONU63ftvNUoAY', 'ByaxlBt8qVB9RbdQZz', 'b6VNghr4mhT4wfNGec', 'UB3qnHHdEF9OEvk5BHc', 'yA3j7sH4oClb5EybDN', 'E9ejvelWBUFVWCfAKL', 'ladx1niGhZv8bGoghY', 'E2EerTp7sMN6VBAV7Q', 'IxELC2nB5f4zCinvjK', 'DqF38rzrcihfFJwCJN', 'YeakZZHZKRAIM3Bt1pE', 'oJrLBQhyepaF1LiBfZJ', 'gNsgLR9Berqowg6CII', 'hLldZQ9MqxYySQ9Kti', 'mzGE71SiVHqdIbxDMwh', 'qkfAXnEWUkkxPTvaL3', 'FUx1xoKGFpDSM1SB8A', '0vH3AePPLAmbJonqTP3', 'thf80WN1JK4WdtrEySk', '9GlqeSobGMND6LzqYU', 'CqPPeqyAjM1YVjiN3UF', 'gdAHZdIxYSgdBCRli3', 'i2ltodn3npecEjV6bXu', 'ejSBXWalzp6QvQFzuE', 'usnv3Wwb4drwX6KUIkg', 'f24RszgtS8KyNE3A8u', 'lVYyoQoR9QVmUC4F7M', '5avz5UvQqMjC2oCPCCs', '1yVSXljlVqx83pCuPdo', 'sUkmkR2Otb89YFPtRQ', 'sVOnTTVBhr3ss6JjFi', 'o3ZIR1aRd579G6YPrBI', 'PP1WxXisQqYfB0OSYz', 'o6qcvRrAOqJDvf5HxB', 'UlrdaaIR3QVU8haF3qn', 'MrfKJcbNq4GjuPUPkNF', 'vU3aWCQFSpAVzZBp5E', 'ZzpLG4bqLrjENf8Uv6t', 'cy15Fqtw9rCKoOtCuN', 'Y7Iwjr9BjoDcMuz9l9', 'hsdc6B45lgtgsbD5fux', 'uZPp7buh4faAJSymD4V', 'u15I7Jy8hhCXRhGdEL', 'wucZvSYhQ3du5gR0H6', 'W1lzh3kSmDB8ZJyEGX', 'UkEE85JGJvhbNhbS8RM', 'oZiqjgW5GfCstWf09Hb']
  • 脚本中实际未调用
    pass\u list()
  • 附加到空列表,而不是使用理解-速度大大减慢
  • 发生了什么变化:

    ['R63qhL4pzkwyb4DxyJ', 'iStYwujZ9hbGhKhCvr', 'CawJ3qAdqSL0Bf8phZ', '48PPQj8btdxaqshDkk', '318rubpkcR5mOrPMYOT', 'iOkINL0TkjL4sq9Mc3', 'Fw64Tj5KyNVNbJRYLD', 'voALiyI3vn70F3H7Ua6', 'ofAGywZqrEMcJkRwjWL', 'wMlYVakjZzz6Sm04jcv', 'PbPT2Hr9nR0eLhX0aKj', 'Fqa3oGBFj4HmdJR8C3', 'Wva99eZyXZZHaKrwrlT', 'kC7kRHuDYx9njsttQG', 'r5IQZF61lLRowiXQ6e9', 'Lh50xONU63ftvNUoAY', 'ByaxlBt8qVB9RbdQZz', 'b6VNghr4mhT4wfNGec', 'UB3qnHHdEF9OEvk5BHc', 'yA3j7sH4oClb5EybDN', 'E9ejvelWBUFVWCfAKL', 'ladx1niGhZv8bGoghY', 'E2EerTp7sMN6VBAV7Q', 'IxELC2nB5f4zCinvjK', 'DqF38rzrcihfFJwCJN', 'YeakZZHZKRAIM3Bt1pE', 'oJrLBQhyepaF1LiBfZJ', 'gNsgLR9Berqowg6CII', 'hLldZQ9MqxYySQ9Kti', 'mzGE71SiVHqdIbxDMwh', 'qkfAXnEWUkkxPTvaL3', 'FUx1xoKGFpDSM1SB8A', '0vH3AePPLAmbJonqTP3', 'thf80WN1JK4WdtrEySk', '9GlqeSobGMND6LzqYU', 'CqPPeqyAjM1YVjiN3UF', 'gdAHZdIxYSgdBCRli3', 'i2ltodn3npecEjV6bXu', 'ejSBXWalzp6QvQFzuE', 'usnv3Wwb4drwX6KUIkg', 'f24RszgtS8KyNE3A8u', 'lVYyoQoR9QVmUC4F7M', '5avz5UvQqMjC2oCPCCs', '1yVSXljlVqx83pCuPdo', 'sUkmkR2Otb89YFPtRQ', 'sVOnTTVBhr3ss6JjFi', 'o3ZIR1aRd579G6YPrBI', 'PP1WxXisQqYfB0OSYz', 'o6qcvRrAOqJDvf5HxB', 'UlrdaaIR3QVU8haF3qn', 'MrfKJcbNq4GjuPUPkNF', 'vU3aWCQFSpAVzZBp5E', 'ZzpLG4bqLrjENf8Uv6t', 'cy15Fqtw9rCKoOtCuN', 'Y7Iwjr9BjoDcMuz9l9', 'hsdc6B45lgtgsbD5fux', 'uZPp7buh4faAJSymD4V', 'u15I7Jy8hhCXRhGdEL', 'wucZvSYhQ3du5gR0H6', 'W1lzh3kSmDB8ZJyEGX', 'UkEE85JGJvhbNhbS8RM', 'oZiqjgW5GfCstWf09Hb']
    
  • 更简洁的语法(一般)-例如,当循环到一个变量上时,我认为最好使用“u”

  • 最后调用函数以生成结果

  • 列出要替换循环附加的理解


  • 它返回什么?输出在哪里?你说我的返回指针是什么意思?Nm,我也读错了
    passwords=pass\u list
    是一个输入错误。你是说
    passwords=paswd\u list
    。顺便说一句,这个赋值是没有意义的,您可以只做
    print(paswd_list)
    我们在python中不使用术语“指针”。关于如何考虑python变量,有各种各样的解释。如果有C背景,Python中的每个非原语变量(非原语中的列表)都是引用(或“指针”)。Python只传递值。当该值是引用时,语言会根据需要取消引用它。因此,您可以将列表作为参数传递,然后更改被调用函数中的父值,就像传递指针时所期望的那样。但你不能因为一个数字就这么做。字符串在Python中是“原语”。@TimRichardson我不太明白这一点。可以在函数中更改全局可变对象,但不能更改不可变对象。就这样。它是关于名称查找和范围的。我不知道你想说什么;字符串是不可变的-在函数范围内更改它需要重新绑定到名称。在任何情况下,这都是一个错误typo@roganjosh当有人发布Python问题并谈论“指针”时,谈论“全局可变对象”(我想)没有什么意义。我猜OP来自C/C++背景。不管怎样,我说的是100%正确的。字符串是不可变的,因为Python将其视为“基元”类型。这与C有很大的不同,这就是我为什么提到它的原因。Python键入有太多杂乱无章的内容,但归根结底就是我说的。您可以使用
    pass_list()
    的第二个参数来选择要生成多少密码。虽然提供可复制粘贴的解决方案是可以的,但如果您能解释原始代码的错误,也会对OP有所帮助,以及你的代码是如何修复的。@GinoMempin谢谢你的建议,检查编辑。谢谢!我真的很喜欢
    char
    选项,而且它很有效!