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

python - nie rozumiem kodu

Object Storage Arubacloud
+1 głos
280 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 Ekspert (344,860 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 Ekspert (344,860 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 (253,340 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 Ekspert (344,860 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 Ekspert (344,860 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 Ekspert (344,860 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ź 180 wizyt
pytanie zadane 14 maja 2022 w Python przez thesolitaryofchoice Początkujący (490 p.)
+1 głos
0 odpowiedzi 242 wizyt
pytanie zadane 2 maja 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 888 wizyt
pytanie zadane 13 listopada 2020 w Python przez PapierowyRycerz Początkujący (290 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...