• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

python - nie rozumiem kodu

+1 głos
90 wizyt
pytanie zadane 5 dni temu w Python przez thesolitaryofchoice Początkujący (430 p.)

Witam,

Sorki jak w bashu wpiszę python/ipython/etc.. a potem załóżmy import math, a potem help(math). To mam coś takiego jak na zdjęciu.obrazek_biloteka_math

I teraz chodzi mi o ten kod. 

acos(x, /)
        Return the arc cosine (measured in radians) of x.

Co znaczy '/' w tym wypadku, przepraszam, jeśli pytanie jest trywialne, a ja nie umiem znaleźć odpowiedzi w przeglądarce. Z góry dziękuję za każdą pomoc.

Pozdrawiam

Mateusz

1 odpowiedź

+2 głosów
odpowiedź 5 dni temu przez adrian17 Ekspert (319,600 p.)
wybrane 5 dni temu przez thesolitaryofchoice
 
Najlepsza

To tylko znaczy że argumenty przed "/" są "tylko-pozycyjne", w sensie że nie można ich przekazywać jako keyword arguments.

def acos(x): pass
acos(5)   # dziala
acos(x=5) # dziala

def acos(x, /): pass
acos(5)   # dziala
acos(x=5) # !!!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: acos() got some positional-only arguments passed as keyword arguments: 'x'

Nie trzeba się tym wiele przejmować, bo czemu miałbyś chcieć wołać `acos(x=cos)` zamiast po prostu `acos(cos)` :)

komentarz 5 dni temu przez thesolitaryofchoice Początkujący (430 p.)
Ok. Dzięki. Czyli rozumiem tak, że jeżeli np. funkcja miałaby dwa argumenty to w przypadku zastosowania tego wykluczenia keywords argument nie ma już wtedy opcji zamienić ich miejscami, bo zawsze ważna jest pozycja i nie mogę przekazać, że w domyśle jest to 5, a tak właściwie po kluczu X, a wcześniej podam sobie jeszcze jakieś y, które w domyśle ma inną wartość?
komentarz 5 dni temu przez adrian17 Ekspert (319,600 p.)
Drugiej części pytanie nie do końca zrozumiałem, ale... tak, jeśli funkcja nie pozwala na nazwane argumenty to nie masz innego wyboru niż przekazać je w dokładnie tej kolejności w jakiej jest zadeklarowane.
komentarz 5 dni temu przez VBService Mędrzec (162,950 p.)

bo czemu miałbyś chcieć wołać `acos(x=cos)` zamiast po prostu `acos(cos)`

a choćby taki powód  smiley

[ on-line ]

def headline(text, /, border="~", width=30, newline=False):
    print(f" {text} ".center(width, border))
    if (newline): print()


headline("VBService")
headline("VBService", border=":")
headline("VBService", border="^", newline=True)
headline("VBService", width=50)

 

komentarz 5 dni temu przez thesolitaryofchoice Początkujący (430 p.)
No dobrze, to w tym wypadku znaczy, że przed znakiem '/' może wystąpić jedynie zmienna text bez wartości domyślnej i nic innego? I że zmienna text zawsze będzie wycentrowana, w tym nagłówku? Nie wiem strzelam. Co by oznaczało również, że już po znaku '/' mogę zadeklarować sobie taki keywords argument jaki chce?
1
komentarz 4 dni temu przez adrian17 Ekspert (319,600 p.)
edycja 4 dni temu przez adrian17

zmienna text

nie wiem co to znaczy

 bez wartości domyślnej

jak najbardziej może być wartość domyślna

I że zmienna text zawsze będzie wycentrowana

Tym bardziej nie rozumiem :(

Potężnie przekombinowujesz. Deklaracja `acos(x, /)` oznacza że nie możesz przekazać `x` jako keyword argument i tyle.

komentarz 4 dni temu przez adrian17 Ekspert (319,600 p.)
A, przepraszam, nie zauważyłem jednej wiadomości. VBService -> miałem na myśli że konkretnie tutaj wiodącym przykładem jest acos() który z definicji ma dokładnie jeden argument i nikogo nie interesuje jego nazwa - i dlatego ten "/". Jasne że w bardziej złożonych przykładach też się przydaje, dlatego go dodali do języka :) (choć w Twoim przypadku prędzej bym użył * jako keyword-only)
komentarz 4 dni temu przez thesolitaryofchoice Początkujący (430 p.)
No właśnie, słuchaj Adrian ja wiem, że może trochę kombinuję, ale próbuję to sobie ułożyć w głowie. I tak jeśli mam slash / to wszystko, co przed nim nie może być tzw. kwargsem po nim może być dowolna liczba takich argumentów w funkcji i jeszcze dodatkowo wszystko, co przed mocno zależy od umiejscowienia w nagłówku funkcji/metody?
1
komentarz 4 dni temu przez adrian17 Ekspert (319,600 p.)

Tylko zaznaczę że _naprawdę_ to nie jest jakaś super wielka ważna fundamentalna rzecz, sama funkcjonalność jest w języku od 3.8 i jest względnie mało używana.

i jeszcze dodatkowo wszystko, co przed mocno zależy od umiejscowienia w nagłówku funkcji/metody?

Nie wiem co przez to masz na myśli.

Cały czas to jest prosta filozofia:

def funkcja(            d, e, f            ): pass
def funkcja(a, b, c, /, d, e, f            ): pass
def funkcja(            d, e, f, *, g, h, i): pass
def funkcja(a, b, c, /, d, e, f, *, g, h, i): pass

- argumenty d, e, f to zwykłe argumenty (możesz je przekazać normalnie lub po nazwie)

- argumentów a, b, c nie możesz przekazać po nazwie

- argumenty g, h, i musisz przekazać po nazwie.

To jest jedyna zmiana. Wszystkie inne reguły, jak kolejność przekazywania argumentów czy wartości domyślne, są kompletnie bez zmian.

komentarz 4 dni temu przez thesolitaryofchoice Początkujący (430 p.)
Dobra teraz chwytam, przynajmniej tak mi się wydaje. Z mojej strony to wszystkie pytania.

Podobne pytania

0 głosów
1 odpowiedź 65 wizyt
pytanie zadane 5 dni temu w Python przez thesolitaryofchoice Początkujący (430 p.)
+1 głos
0 odpowiedzi 87 wizyt
pytanie zadane 2 maja w Python przez Michal123456 Bywalec (2,030 p.)
0 głosów
1 odpowiedź 236 wizyt
pytanie zadane 13 listopada 2020 w Python przez PapierowyRycerz Początkujący (290 p.)

87,940 zapytań

136,516 odpowiedzi

304,377 komentarzy

58,305 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...