SeeM Napisano Marzec 26, 2023 Zgłoszenie Share Napisano Marzec 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? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
tomcio Napisano Marzec 26, 2023 Zgłoszenie Share Napisano Marzec 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
SeeM Napisano Marzec 26, 2023 Autor Zgłoszenie Share Napisano Marzec 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. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@sunrise Napisano Marzec 26, 2023 Zgłoszenie Share Napisano Marzec 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
SeeM Napisano Marzec 26, 2023 Autor Zgłoszenie Share Napisano Marzec 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. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się