Wpis z mikrobloga

Mam pytanie odnośnie zasad pisania kodu.

Funkcję user-input() chcemy wywołać tylko raz, i chcemy zwrócić z niej zmienną name, którą musimy użyć w funkcjach n1() i n2(). Jak to najlepiej zrobić?

Wiem, że można dopisać name = user-input(), ale czy należy tak robić? Bo jak kod będzie dłuższy, dołożymy jakieś importy/eksporty to name będzie zmienną globalną, a tego chyba należy unikać?

def user_input():
....name = input('Give me your name ')
........return name


def n1():
....print(F'Hey, {name}')

def n2():
....print(F'Hello {name}')

name = user_input() ???

n1()
n2()

#naukaprogramowania #python
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Rajtuz: to zależy od skali projektu. W jednoplikowym skrypcie nazwa name może być wystarczająca, ale jeżeli planujesz importować to daj lepszą nazwę typu userfullname albo coś takiego. Idąc dalej niech n1 i n2 przyjmują argumenty które później wydrukują. W większych projektach pewnie najsensowniej byłoby użyć obiektu User z metodami get name i n1/n2 wtedy name będziesz miał pod atrybutem przy selfie - self.name. Ze swojego doświadczenia globalnych zmiennych używam
  • Odpowiedz
@Rajtuz: Jesli zalezy ci na tym, aby odizolowac od siebie m.in. zmienne to mozesz stworzyc klase i metode, ktora pobierze te wartosc raz, przypisujac ja do selfa.

Innym rozwiazaniem, jest po prostu stworzeniu jakiejs glownej funkcji (np. main), ktora bedzie twoja lokalna przestrzenia nazw dla calego programu.
  • Odpowiedz
@RapRose: @zgubiles_sie_jelonku: Tylko gdzie stworzyć obiekt w takim przypadku? Napisałem coś takiego, ale chyba nie o to wam chodziło, bo to to samo co na początku tylko dłużej:

class UserFirstName:
....def get_username(self):
........self.name = input('Give me your name
  • Odpowiedz
@zgubiles_sie_jelonku: No niestety, przy wykopowym formatowaniu przez nie może być pustych enterów, więc trzeba tego użyć wielokrotnie.

Dzięki, ciekawa koncepcja. Tylko, czy w takim przypadku wszystkie definicje korzystające z namenie muszą być w klasie UserFirstName? A co jakby namemusiało być użyte w jakiejś zewnętrznej funkcji?
  • Odpowiedz
@Rajtuz: nie pisz funkcji, które mąka dostęp do globalnych zmiennych, podawaj im argumenty zamiast n3(): print(user.name) zrób n3(user): print(user.name) wtedy ta funkcja będzie ogólna, bo po staremu to w zasadzie wgl nie potrzebujesz tej funkcji, bo po co
  • Odpowiedz
@Rajtuz:

Przykład dostosowałem trochę do twoich potrzeb, nie wiem na jakim poziomie jesteś i co chcesz z tym kodem zrobić.

Dzięki, ciekawa koncepcja. Tylko, czy w takim przypadku wszystkie definicje korzystające z namenie muszą być w klasie
  • Odpowiedz
W takim wypadku lepiej byłoby nie printować tego imienia tylko po prostu je zwrócić.


@zgubiles_sie_jelonku: Hmm, tylko jak zwrócić atrybut name z obiektu klasy User np. do funkcji test1() i test2()?

class User:
  • Odpowiedz