SeeM Posted March 26, 2023 Report Share Posted March 26, 2023 Hej. Potrzebuję losować sobie dużo użytkowników przy każdym testowaniu aplikacji. Mam coś takiego: def random_string(length=15): return ''.join(random.choices(string.ascii_lowercase, k=length)) def create_test_user(username=random_string(), email=f'{random_string()}@email.pl', password='qwerty*%123456'): user_test = User(username=username, email=email, password=password) return user_test Problem w tym, że to nie przelosowuje ani wartości username oraz email: In [2]: ble = create_test_user In [3]: ble2 = create_test_user In [4]: ble Out[4]: <function mekhub.tests.create_test_user(username='suvkqmwtxyxivho', email='[email protected]', password='qwerty*%123456')> In [5]: ble2 Out[5]: <function mekhub.tests.create_test_user(username='suvkqmwtxyxivho', email='[email protected]', password='qwerty*%123456')> Pewnie to coś łatwego, ale nie mogę sobie z tym poradzić. Próbowałem dodać random.seed() przed każdym wywołaniem fukcji random_string oraz create_test_user, ale za nadal wartości username oraz email są te same. Fukcja random_string działa zgodnie z oczekiwaniami, zwracając różne 15-znakowe ciągi. Jedynie create_test_user zwraca ciągle te same wartości. Nawet po usunięciu i zdefiniowaniu ponownie funkcji create_test_user wartości są te same. n [1]: from aplikacja.tests import random_string, create_test_user In [2]: ble = create_test_user In [3]: ble Out[3]: <function mekhub.tests.create_test_user(username='rdemxbsltajpkja', email='[email protected]', password='qwerty*%123456')> In [4]: del create_test_user In [5]: from aplikacja.tests import random_string, create_test_user In [6]: ble2 = create_test_user In [7]: ble2 Out[7]: <function mekhub.tests.create_test_user(username='rdemxbsltajpkja', email='[email protected]', password='qwerty*%123456')> Macie jakieś pomysły? Link to comment Share on other sites More sharing options...
tomcio Posted March 26, 2023 Report Share Posted March 26, 2023 Problem banalny, przypisujesz funkcję do zmiennej. Zamiast ble = create_test_user korzystaj z ble = create_test_user(). Z twoim obecnym sposobem aby cokolwiek uzyskać musiałbyś wywołać samą funkcję z poziomu zmiennej tj ble() 2 Link to comment Share on other sites More sharing options...
SeeM Posted March 26, 2023 Author Report Share Posted March 26, 2023 To już próbowałem i byłoby zbyt proste (-: In [2]: ble = create_test_user() In [3]: ble2 = create_test_user() In [4]: ble Out[4]: <User: ealksmyezmnrgpt> In [5]: ble2 Out[5]: <User: ealksmyezmnrgpt> Zawsze dostaję tę samą nazwę użytkownika. Link to comment Share on other sites More sharing options...
@sunrise Posted March 26, 2023 Report Share Posted March 26, 2023 Oprócz tego co tomcio napisał w Pythonie wartość domyślna parametru funkcji jest ustawiana raz przy jej definiowaniu, a nie przy wywoływaniu. 1 Link to comment Share on other sites More sharing options...
SeeM Posted March 26, 2023 Author Report Share Posted March 26, 2023 19 minut temu, sunrise napisał: Oprócz tego co tomcio napisał w Pythonie wartość domyślna parametru funkcji jest ustawiana raz przy jej definiowaniu, a nie przy wywoływaniu. O, to już trochę wyjaśnia. Dzięki, będę musiał podejść do problemu inaczej. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now