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

python - nie rozumiem kodu

Cloud VPS
+1 głos
532 wizyt
pytanie zadane 14 maja 2022 w Python przez thesolitaryofchoice Początkujący (490 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ź 14 maja 2022 przez adrian17 Mentor (354,120 p.)
wybrane 14 maja 2022 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 14 maja 2022 przez thesolitaryofchoice Początkujący (490 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 14 maja 2022 przez adrian17 Mentor (354,120 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 14 maja 2022 przez VBService Ekspert (256,600 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 14 maja 2022 przez thesolitaryofchoice Początkujący (490 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 14 maja 2022 przez adrian17 Mentor (354,120 p.)
edycja 14 maja 2022 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 14 maja 2022 przez adrian17 Mentor (354,120 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 14 maja 2022 przez thesolitaryofchoice Początkujący (490 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 14 maja 2022 przez adrian17 Mentor (354,120 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 14 maja 2022 przez thesolitaryofchoice Początkujący (490 p.)
Dobra teraz chwytam, przynajmniej tak mi się wydaje. Z mojej strony to wszystkie pytania.

Podobne pytania

0 głosów
1 odpowiedź 230 wizyt
pytanie zadane 14 maja 2022 w Python przez thesolitaryofchoice Początkujący (490 p.)
+1 głos
0 odpowiedzi 442 wizyt
pytanie zadane 2 maja 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 1,223 wizyt
pytanie zadane 13 listopada 2020 w Python przez PapierowyRycerz Początkujący (290 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...