Na azzal a különbséggel, hogy PHP-ben van ilyen is:
php > print (int)(false==0);
1
php > print (int)(false===0);
0
Bónusz: Pythonban van komplex típus, és van korlátlan számábrázolási tartományú integer. Na de nem egyszerre!
c1=complex(200000002,400000002)
c2=complex(1000000005,3)
c=c1*c2
print("%32.0f" %c.real)
print("Ez lenne a jo: %d" %(int(c1.real)*int(c2.real)-int(c1.imag)*int(c2.imag)))
kimenete:
200000001800000000
Ez lenne a jo: 200000001800000004
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
- 1222 megtekintés
Hozzászólások
A PHP gyengén típusos nyelv. A false == 0 ez esetben tökéletes, csakúgy, mint a === esetén az eredmény.
Error: nmcli terminated by signal Félbeszakítás (2)
- A hozzászóláshoz be kell jelentkezni
Hát nem is akarok birkózni a programnyelv típusosságával, szóval nem helyezek súlyt arra, hogy erős-e vagy gyenge, csak fölemlítem, hogy a PHP-ben a 'hasonlít' operátor (==) mellett van 'egyenlő' operátor is (===), míg Python-ban nem találtam hasonlót.
- A hozzászóláshoz be kell jelentkezni
érték szerint egyenlő ==
azonosan egyenlő (érték és típus) ===
- A hozzászóláshoz be kell jelentkezni
>>> 0==False
True
>>> 0 is False
False
>>> False is False
True
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Sajnos ez kicsit más, elemi értékekkel nem látszik, de pl. egy listával:
print([1,2] is [1,2])
False
print(type([1,2])==type([1,2]) and [1,2]==[1,2])
True
- A hozzászóláshoz be kell jelentkezni
ebben nincs sok buveszet csak erteni kell a kulonbseget a == es az is kozott...
- A hozzászóláshoz be kell jelentkezni
Facepalm.
A ket [1, 2] listad nem azonos, szoval az is operator termeszetesen kulonbozonek fogja venni. A False ojjektumbol egy van (meg persze None-bol, True-bol, stb. is), szoval ket False ertek az igazabol egy False ertekre mutato 2 referencia, es azonosak.
Ha tenyleg az kell, ami a masodik printben van, akkor beteszed egy really_really_equal fuggvenybe, es azt hasznalod.
Esetleg mielott megszereted a Python nyelvet, meg is tanulhatnad..
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Úgy tűnt, mint ha azt sugallnád, hogy az `is` lenne használható 'tényleg egyenlő, nem csak hasonlít' értelemben. [Az mondjuk lehet, hogy a hozzászólásod szöveges része tömörebb volt a kelleténél, túl sokat bíztál telepatikus kommunikációra.] Erre mondtam, hogy sajnos nem, ki kell írni, hogy type(a)==type(b) and a==b
.
- A hozzászóláshoz be kell jelentkezni
A különbség, amit keresel a két operátor között: ugyanaz az a két érték (ugyanarra a memóriacímre mutat), vagy ugyanolyan (ugyanaz az értéke a két memóriaterületnek).
- A hozzászóláshoz be kell jelentkezni
>>> print([1] is [1])
False
>>> print(1 is 1)
True
>>> print("abc" is "abc")
True
- A hozzászóláshoz be kell jelentkezni
Nem szeretnélek megbántani, mert nagyon tisztelem a munkádat, de azt hiszem nem igazán ismered a Pythont.
>>> print([1,2] is [1,2])
False
>>> print([1,2] == [1,2])
True
>>>
Az is azt figyeli, hogy két objektum azonos memóriahelyen van-e, vagyis, hogy a két változó ugyanaz-e. Ha a változók értékét szeretnéd összehasonlítani arra a == szolgál.
“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”
― Philip K. Dick
- A hozzászóláshoz be kell jelentkezni
>>> print((1,2) is (1,2))
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
True
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
A list es a tuple kozti kulonbseg, hogy az utobbi immutable. Nalad emiatt ket azonos objektum lesz az is ket oldalan, lista eseten meg kulonbozo. Khm.. mint az kozismert..
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
>>> a=1000
>>> b=1000
>>> a is b
False
>>> a=10
>>> b=10
>>> a is b
True
>>> a=(1,2)
>>> b=(1,2)
>>> a is b
False
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Szépen megpróbálja kimagyarázni, de ezt nem nagyon érdemes. Itt jön be az, hogy a jelenlegi okoknak már nincs köze az eredeti célhoz, vagyis hogy a szoftver az embert szolgálja konzekvens módon. Ha fájlból futtatva jó, akkor az interpreternél rossz a design és a koncepció. Nem szépíteni kell hanem újra tervezni mielőbb.
- A hozzászóláshoz be kell jelentkezni
is leggyakoribb hasznalata:
In [3]: timeit a is None
19.9 ns ± 0.238 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [4]: timeit a == None
23.2 ns ± 0.0979 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Ami az ujra tervezest illeti:
https://en.wikipedia.org/wiki/Cython
"which gives a 95 times improvement over the pure-python version. More details on the subject in the official quickstart page."
go rust
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
dzsízüsz...
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
3.10 alatt:
>>> 0 is False
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
False
- A hozzászóláshoz be kell jelentkezni
u0_a182@localhost:~$ python
Python 3.10.1 (main, Dec 9 2021, 15:28:13) [Clang 12.0.8 (https://android.googlesource.com/to
olchain/llvm-project c935d99d7 on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0 is False
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
False
>>> a=0
>>> a is False
False
Egyszeruen szol, hogy egy fixen odairt ertekkel (literal) hasznalod, es biztos ezt akartad-e, mert ez a kododban valoszinuleg felesleges. Ezert warning.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
A 3.5 => 3.9 atmenetnel valtozott meg. B@szott jo ez a nyelv ;)
- A hozzászóláshoz be kell jelentkezni
Igen. Bekerult az egyik (a legszelesebb korben hasznalt) implementacioba egy plusz warning, hogy ha nem azt akartad irni, amit irtal, akkor erre figyelmeztessen.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Félrenéztél valamit, mert nem változott meg semmi, csak dob egy extra figyelmeztetést, hogy ne csináljon hülyeséget a kedves felhasználó.
- A hozzászóláshoz be kell jelentkezni
Ellenpéldaként ilyen amikor egy keményen típushű nyelv nem engedi az eltérő típusok ( 0: int, false: bool) összehasonlítását. Explicit cast-old át és aztán megy.
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gi…
- A hozzászóláshoz be kell jelentkezni
Sőt tovább is van: kedves példám, miután egyszer belecsúsztam egy ilyesmi eltérésbe, ami hibás számításhoz vezetett.
#include <stdio.h>
int main() {
float a = 1.0/3.0;
int b = 4.0 / a;
printf("4.0 / (1.0/3.0) = %d\n", b); // eredmény itt 11 lesz.
}
Szintén az automatikus típuskonverzió kulisszatitkai. Ha szigorúan azonos típussal dolgozik a nyelv, akkor ez sem marad a kulisszák mögött.
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gi…
- A hozzászóláshoz be kell jelentkezni
Ruby szintén 12.
- A hozzászóláshoz be kell jelentkezni
Ruby ezek szerint tud float-ot és double típust kezelni?
Itt jegyzem meg érdekességként, Lua 5.2-ig kizárólag double típust ismert, integeres feladatokat is double-val számolta, hiszen az 53 bites mantissza veszteség nélkül bírta a 32 bites integert kezelni.
Aztán az 5.3-ban lett bevezetve az integer alacsony szintű típus.
- A hozzászóláshoz be kell jelentkezni
Opcionalisan volt olyan lua, ami meg csak int-et kezelt. Akkori ARM-okon szerettek, mert nem volt/kellett HW floating point tamogatas, es amire hasznaltak, nem is kellett olyan szamolas.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Ez valószínűleg az eLua lehetett, ez egy önálló életet élő redukált Lua ág.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, meg ugy 2009-2010 korul nezegettem a luat komolyabban, hogy mikrokontrolleren mennyire konnyu c-vel keverve hasznalni, kiszervezni a kod egy reszet, akkor ugy dontottem, hogy nem eri meg. Most mar tudom, hogy fejlodott (ESP-n pl.).
Par evvel kesobb meg iGO-hoz irtam kodot (beepitetten lua-t hasznal scriptelesre), aminel lua oldalrol lehet Androidos intentet kuldeni. Nem volt bonyolult, csak meg kellett oldani, hogy a lua->c->java hivas menjen.
Kb. ennyi tapasztalatom van a nyelvvel.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Arra tippelnék hogy csak double van, az MRI implementációban ezt nem néztem meg. Lehet hogy a matematikai kerekítésekkel operál inkább. Lásd az alábbit, ahol veszteség nélkül vissza tudja szorozni:
a = 2 / 3.0
=> 0.6666666666666666
a * 3
=> 2.0
Szerk.: Megnéztem, csak double-t használ.
https://ruby-doc.org/core/Float.html
A Float object represents a sometimes-inexact real number using the native architecture's double-precision floating point representation.
- A hozzászóláshoz be kell jelentkezni
Azért kérdezem, mert ha a fenti C példában egy "f" betűt odaraksz, már jó is lenne az eredmény. Gyakorlatilag a float --> double --> int autokonverzió és ezzel járó teljesen más kerekítési szabály hülyíti meg.
int b = 4.0f / a;
- A hozzászóláshoz be kell jelentkezni
tudnam egy python topicbol hogy jutottunk ide :(((((
- A hozzászóláshoz be kell jelentkezni
Hat hogy NevemTeve a pythont meg csak most kezdi megszeretni, ezt meg mar biztos szereti, szoval ontopic. :)
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
hg2ecz szereti tolni mindenhol az imádott Rustját és hogy miért felsőbbrendűbb, mint a C. Minden topikban előjön, ahol programozási nyelvekről van szó.
- A hozzászóláshoz be kell jelentkezni
eszrevettem, de kurva idegesito. itt nem a rust es nem a fos ruby a kerdes, a pythonrol lehetne beszelgetni, en latom, hogy van uj hozzaszolas, megnyitom, erre ilyen fosokrol kell olvasnom, mint a ruby.
- A hozzászóláshoz be kell jelentkezni
fos ruby
Hatarozottan jo erzes volt ezt a szoszerkezetet olvasni. Neha kezdett az az erzesem lenni, hogy csak en utalom a ruby-t. Szerencsere nem. :)
- A hozzászóláshoz be kell jelentkezni
Ilyen az élet, amikor az ember nem csak 1..2 nyelvet ismer. Látja, mi van eltalálva és mi az, ami az évek során kevésbé mutatkozik elegáns megoldásnak.
Az biztos, ha lenne Pythonból erősen típushű változat, arra tuti áttérnék. A mypy megtetszett, de sajnos ez sem kényszeríti ki eléggé.
- A hozzászóláshoz be kell jelentkezni
nem erted: itt lenyegtelen a tobbi 500 nyelv, amit latsz. senkit nem erdekel. itt a python az erdekes. :)
- A hozzászóláshoz be kell jelentkezni
Ha az ember több nyelvet is ismer, tudja, hogy a Rust is szar, csak máshogyan, nem abszolút legjobb megoldás. De nálad vakhit van, nem 1-nél több nyelv ismerete.
- A hozzászóláshoz be kell jelentkezni
Az a trend, hogy az ujabb verziok egyre inkabb kikenyszeritik, ha megadsz tipust. Ugy ertve, hogy ha rossz tipus kerulne oda, akkor szol. Szoval nyugodtan ird tipussal a kododat, es valtoztatas nelkul menni fog kesobb is.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Az 1 tényleg nem true, és nem is false, mert az egész szám az nem logikai érték. Nem értem a problémádat.
- A hozzászóláshoz be kell jelentkezni
Ezért indokolt, hogy 0==false és 1==true PHP-ban és Pythonban?
- A hozzászóláshoz be kell jelentkezni
C-ben elegánsabb definíciót láttam:
#define false 0
#define true !false
Ebből kifolyólag a true nem feltétlenül 1, csak nem 0.
- A hozzászóláshoz be kell jelentkezni
Biztos te is tudsz google-t használni, de itt van példa ahol ezt használják:
https://realpython.com/python-boolean/#python-booleans-as-numbers
hogy a feature/language design neked tetszik-e vagy sem, az egy másik kérdés.
- A hozzászóláshoz be kell jelentkezni
PHP mellett az egyik leginkabb nem zold programnyelv.
Tessek rustot hasznalni.
Every single person is a fool, insane, a failure, or a bad person to at least ten people.
- A hozzászóláshoz be kell jelentkezni
a barrier to entry rustnal 500x akkora mint pythonnal.
python3, enter, es mar csapom be a kodot a terminalba.
- A hozzászóláshoz be kell jelentkezni
Igen, ez is igaz. Siman tud egy automata tesztelo, biologus, fizikus is python kodot irni. Vagy hasznalhatja kicsit okosabb szamologepkent. Igazabol meg terminal sem kell, Jupyterbe bongeszobe is irhato.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
papyrus, enter, es mar csapom be a kodot a terminalba.
- A hozzászóláshoz be kell jelentkezni
Code highlighting kerdese, beallithatod ugy az ide-t, hogy minden zold legyen. Sok ertelme mondjuk nem lenne.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
:(
Isten ezert a hozzaszolasert megolt egy macskat es egy kutyat.
- A hozzászóláshoz be kell jelentkezni
Akkor ezert tunt el a cicank ?
Fene az oreg trogert, hogy nincs jobb dolga. :D
Every single person is a fool, insane, a failure, or a bad person to at least ten people.
- A hozzászóláshoz be kell jelentkezni
Python 3.9.7 (default, Sep 10 2021, 14:59:43)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.20.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: int(True)
Out[1]: 1
In [2]: bool(1)
Out[2]: True
- A hozzászóláshoz be kell jelentkezni
>>> print(bool(int("0")))
False
>>> print(int(bool("0")))
1
- A hozzászóláshoz be kell jelentkezni
Egy 0-as szamjegyet tartalmazo string int-re konvertalva a 0-as szam lesz, a 0 boolkent meg False.
A 0-as szamjegyet tartalmazo string nem ures, marpedig az ures string lenne False. Bool-ra konvertalva az erteke igy True lesz, ami int-kent 1.
szerk: Akkor mar ez viccesebb:
>>> int(bool(str(0)))
1
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
A standard típusú objektumok, az üres string, az üres lista, az üres dict, az üres sokaság (tuple), az üres készlet (set) stb. bool értéke mind False. Ha nem üresek, akkor meg True. (Ha saját objektumot készít az ember, akkor definiálhatja annak a bool értékét is, annak függvényében, hogy az objektumot milyen állapotában tekinti "üresnek" vagy "nem üresnek".)
- A hozzászóláshoz be kell jelentkezni
a set miota keszlet, es nem halmaz? ha mar magyaritunk...
- A hozzászóláshoz be kell jelentkezni
Nekem is készlet, de biztosan azért, mert az egyik első python tankönyvem kantal műve volt. :) Ezúton is köszönöm, szuper könyv, hatalmas tudásanyag.
“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”
― Philip K. Dick
- A hozzászóláshoz be kell jelentkezni
Pontosabbnak vélem a készlet elnevezést. Egy halmaz tartalmazhat azonos elemeket, de a pythonos set objektum nem, éppen ez a lényege. A halmaz elnevezéssel inkább a pythonos listát lehet illetni, mert abba mindent bele lehet dobálni, még saját magát is. De a hétköznapi meggondolás alapján is, például egy szerszámkészletnél arra gondolok, hogy minden eszközből csak egyet tartalmaz; no persze, ez már az étkészletre nem igaz :-)
- A hozzászóláshoz be kell jelentkezni
Egy halmaz tartalmazhat azonos elemeket
Matematikában nem, egy halmaznak egy objektum csak egyszer eleme. Ha többszöri tartalmazás lehetne, azt multisetnek nevezik, ott minden elem mellé feljegyzik az elem multiplicitását is a multisetben.
- A hozzászóláshoz be kell jelentkezni
Én a halmaznak még egy ennél általánosabb matematikai definícióját tanultam:-) De egyébként is, egy pythonos objektum elnevezésénél nem kell feltétlenül a legszigorúbb matematikai definícióhoz igazodni.
- A hozzászóláshoz be kell jelentkezni
Mi a halmaz általad tanult definíciója? Remélem nem a naiv halmazelméletes definíció, arról úgy kb. 1900 óta tudjuk, hogy rossz.
- A hozzászóláshoz be kell jelentkezni
> egy halmaznak egy objektum csak egyszer eleme.
Ez bizony így van, ezért írhatjuk le nyugodtan azt, hogy R\{0}, nem kell aggódnunk, hogy esetleg egy másik 0 is eleme a halmaznak.
És a set szerintem is halmaz, de inkább set.
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com
- A hozzászóláshoz be kell jelentkezni
Meg ezért írhatod le, hogy A u A = A stb.
nem tudom, kantal milyen halmazdefiníciót ismer, és milyen halmazműveleteket, de érdekelne.
- A hozzászóláshoz be kell jelentkezni
off: majd számold meg egyszer azt egy darab csavarhúzót;)
- A hozzászóláshoz be kell jelentkezni
Persze, ha az embernek több szerszámkészlete van, akkor idővel "összefésülődhetnek":-)
- A hozzászóláshoz be kell jelentkezni
na, de legalabb kiderult, hogy ez a sajat magyaritasod. szerintem ez helytelen, es a halmaz helyes - ahogy persicsb is irta, egy elemet egyszer tartalmazhat matematikailag, es 100%-ig biztos vagyok, hogy a python keszitoi (mint minden mas nyelv keszitoi is) ezert hivjak halmaznak a strukturajukat, nem mondjuk zoknisfioknak.
- A hozzászóláshoz be kell jelentkezni
Doksi szerint:
Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.
Az, hogy nevesitett matematikai halmazmuveleteket lehet vegezni rajta, az nem volt kicsit gyanus neked? :)
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Az első gondolatom nekem is az volt, hogy legyen az objektum neve magyarul "halmaz", de mivel a fejemben összekeveredett a halmaz elavult és újkori definíciója (több évtizede tanultam már), és a "halmaz" kifejezés, ahogy korábban írtam, hétköznapi értelemben az "összehordottság" érzetét kelti, és mivel a 'set' egyik jelentése a "készlet", így ez mellett döntöttem.
Az elnevezés ilyetén megválasztása a könyvemben semmilyen logikai- vagy értelmezési problémát nem okoz, minden teljesen helytálló.
A matekot jól és/vagy a több programnyelvet ismerő olvasóban azonban felmerülhet a kérdés, hogy miért nem "halmaz" lett a "set", azaz miért nem a többi programnyelvben szokásos elnevezést választottam. Egy programozási nyelvben több olyan objektumtípus is létezhet, és tetszőleges mennyiségben definiálhatunk olyan újabbakat, amelyeken halmazműveleteket lehet végezni, és nyilván nem nevezhetjük mindannyiukat "halmaznak", bár megpróbálhatjuk ezt az elnevezésbe valahogy beleerőltetni (pl. "frozen set" -> "befagyasztott halmaz"). Az kétségtelenül igaz, hogy legalább egy standard objektumnál, mint amilyen a set, meg kellett volna említenem a "halmaz" elnevezést is, és ez meg is fog történni a könyv 3. kiadásában, egyetlen mondatban, valahogy így: "Egy 'set' típusú objektumra a továbbiakban halmazként illetve készletként fogunk utalni."
- A hozzászóláshoz be kell jelentkezni
Az első gondolatom nekem is az volt, hogy legyen az objektum neve magyarul "halmaz"
De miért?
- A hozzászóláshoz be kell jelentkezni
Gondolom azert, mert az elso gondolata volt a helyes.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Az itt kialakult thread remek példa, hogy miért nem szabad l'art pour l'art lefordítgatni szakkifejezéseket :)
- A hozzászóláshoz be kell jelentkezni
Sajnos a "szakmai" fordítások általában meghagyják az eredeti kifejezéseket, vagy ha nem, akkor inkább félrefordítanak vagy egyáltalán nem magyaros kifejezést eredményeznek; ezért voltam kénytelen a magyarításba belefogni, azaz éppenhogy nem l'art pour l'art módon.
- A hozzászóláshoz be kell jelentkezni
Sajnos a "szakmai" fordítások általában meghagyják az eredeti kifejezéseket
És ez így van rendjén, különösen azoknál a kifejezéseknél, amiket az IDE-be beírva működő programkódot kapunk.
Ebből lesznek az olyan remekművek, mint a sendmail->levélküld vagy a többi leiterjakab.
- A hozzászóláshoz be kell jelentkezni
Semmiféle programkódról nem volt szó. Nem keyword-öket magyarítottam, minden kódpéldában a 'set' szerepel, minden művelet megnevezése "halmazművelet", csupán a magyarázó szövegben szerepel a "készlet" szó.
"Ebből lesznek az olyan remekművek, mint a sendmail->levélküld vagy a többi leiterjakab." Ezektől engem is kiráz a hideg.
De lassan már a háborút is a nyakamba varrod.
- A hozzászóláshoz be kell jelentkezni
De lassan már a háborút is a nyakamba varrod.
Dehogy. A háborút biztosan nem, de ha ez segít, az értelmetlen magyarításokkal kapcsolatban sem tartalak egy személyben felelősnek.
- A hozzászóláshoz be kell jelentkezni
ne haragudj, a konyv amugy biztos fasza, de a setet nem halmaznak forditani szerintem hatalmas hiba.
- A hozzászóláshoz be kell jelentkezni
Egyáltalán nem érzem annak, olvasd el, kevésbbé dogmatikus hozzállással, mégegyszera a korábbi bejegyzéseimet.
- A hozzászóláshoz be kell jelentkezni
Most NagyZ-vel értek egyet, annyi különbséggel, hogy lehetőleg maradjon set, ha mindenképpen le akarjuk fordítani, akkor viszont halmaz. A készlet egy esetben elfogadható, ha a másik alternatíva a szett. :))
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com
- A hozzászóláshoz be kell jelentkezni
Egy szaknyelvi dologban, ahol minden kifejezésnek pontos jelentése van, nehéz nem dogmatikusnak lenni. Ez olyan, mintha azt mondanád, hogy ne függvény legyen a function magyarul, hanem összefüggés.
- A hozzászóláshoz be kell jelentkezni
No, nem külön-külön, hanem egyszerre válaszolok a "set" elnevezésével kapcsoltos előző kritikákra.
Matematikai szempontból jogos az a felvetés, hogy inkább "halmaznak" kellene nevezni a set-et, de én nem a matematikai névmegfelelést tartottam elsődleges szempontnak. A könyvem megírása előtt a Pythonnal kapcsolatos írásokban leginkább a "set" kifejezéssel találkoztam, és nem a "halmazzal". Nem csak matematikusok programoznak Pythonban, és a tapasztalatom szerint a nem matematikusok többségének fejében a halmaz valami "összehordott", rendezetlen kupac. A "készlet" ezzel szemben sugall valamiféle struktúrát. A könyvemben ugyan az objektumot készletnek nevezem, de a rajta végezhető műveleteket következetesen halmazműveleteknek, és ez nem ellentmondás, egy objektum orientált nyelvben, mint a Python, bárki készíthet saját osztályt, amelyre halmazműveleteket is deklarálhat, és ezért még nem lesz kötelező ezen típusú objektumokat halmaznak neveznie. A set egy python objektum, a halmaz egy matematikai, nem lehet őket egy az egyben megfeleltetni, mert más dimenzióban léteznek. Például egy halmazba bármilyen matematikai objektum betehető (javítsatok ki, ha nem így van), de egy pythonos set-be csak hashable típusú pythonos objektumok, és biztosan találnánk még más eltéréseket is.
Egyébként társalgáskor senkit sem szoktam kijavítani, hogy más elnevezést kellene használnia, mert szerintem egyformán megfelelő mindhárom, a legegyértelműbb természetesen a 'set', csak ugye, az nem magyarul van, és itt most a magyarításról volt szó.
Milyen definícióját tanultam a halmaznak? Az előbb leírtak szerint ennek nincs nagy jelentősége.
- A hozzászóláshoz be kell jelentkezni
Nem ismerem a pythont.
Mi az őse a hashable objektumnak/osztálynak(?)?
- A hozzászóláshoz be kell jelentkezni
Ha jol gondolom, annyi a kikotes, hogy legyen egy __hash__(self) metodusa, ami visszaad egy erteket.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Majdnem jol tippeltem. Kell neki egy __eq__ is.
https://docs.python.org/3/glossary.html#term-hashable
- hashable
-
An object is hashable if it has a hash value which never changes during its lifetime (it needs a
__hash__()
method), and can be compared to other objects (it needs an__eq__()
method). Hashable objects which compare equal must have the same hash value.Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally.
Most of Python’s immutable built-in objects are hashable; mutable containers (such as lists or dictionaries) are not; immutable containers (such as tuples and frozensets) are only hashable if their elements are hashable. Objects which are instances of user-defined classes are hashable by default. They all compare unequal (except with themselves), and their hash value is derived from their
id()
.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Object ős csak van, nem ?
- A hozzászóláshoz be kell jelentkezni
Tudtommal nincs, de nem ismerem annyira a Python belso mukodeset, csak hasznalom.
A tisztan OO Java az, ahol kenyelmes, hogy van egy Object osztaly, amibol minden szarmazik. Leszarmazottat ugye hasznalhatsz barhol az os helyett, emiatt jo, ha van ilyen hierarchia (ami Java eseten fa, mert nincs tobbszoros orokles). Ezen kivul nem tudom, hogy mas nyelven van-e ilyen kozos os, nem talalkoztam mashol vele.
A Python nem tisztan objektum-orientalt, es egy csomo dolog csak futasidoben derul ki a nyelv jellege miatt. Viszont pont ezert nem erdekli a hierarchia, a kulonbozo interface-ek, ha jelen van a megfelelo metodus, onnantol orul neki. Extrem esetben amugy None-ra tudsz allitani metodusokat, szoval meg az is lehet, hogy a leszarmazott nem jo oda, ahova az os meg jo volt (persze ezt csak direkt tudod elrontani, veletlenul nem).
szerk:
Hulyeseget irtam, kiprobaltam egy ures osztallyal, es van. builtins.object a neve, egy __dict__ meg egy __weakref__ jott belole.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
A tisztan OO Java az, ahol kenyelmes, hogy van egy Object osztaly, amibol minden szarmazik.
Kivéve a primitív típusok (int, boolean stb.), amik miatt nem is szokás a Javát "tisztán OO"-nak tekinteni. :) (Egyébként a static metódusok sem igazán "tisztán OO" konstrukciók, de ebbe a nyelvi "workaroundba" ritkábban szokás belekötni ebből a szempontból, pláne, ha nagyon akarjuk, akkor be lehet erőszakolni őket a modellbe, csak épp számos alapelvet sértenek.)
Leszarmazottat ugye hasznalhatsz barhol az os helyett, emiatt jo, ha van ilyen hierarchia (ami Java eseten fa, mert nincs tobbszoros orokles).
Azért ebbe a zárójeles részbe az interface-ek default metódusai Java 8 óta egy picit belepiszkálnak, azóta lehet "többszörös öröklés" implementáció tekintetében is, és okozhat is gondot (aminek a feloldása programozói feladat). Előtte csak "interfész" vagy másnéven "típus" tekintetében volt erre lehetőség.
A pythonhoz nem igazán értek, bár amit leírtál, az a "duck typing" tankönyvi példája. :)
- A hozzászóláshoz be kell jelentkezni
Javaban minden az osztalyokon belul van, meg a main is. Ezert indulnak olyan "elegansan" a java programok a public static void main-nel. Valoban a primitiv tipusok hatekonysag miatt kicsit kulon vannak (azert kellenek a wrapperek, pl. Integer), de ettol fuggetlenul a Javat inkabb tekintem OO-nak, mint a Pythont, ahol az int is objektum (viszont irhatsz egeszen nagy kodokat is anelkul, hogy leirnad, hogy "class"). De javat minimalisan hasznaltam, ahhoz valoszinuleg te ertesz jobban.
A duck typing-ban igazad van, emiatt erdekes kevesbe, hogy ki kibol oroklodik. Ha repul, tud uszni, es hapog, akkor kacsa, hiaba oroklodik a dinoszauruszokbol.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
A duck typing-ban igazad van, emiatt erdekes kevesbe, hogy ki kibol oroklodik. Ha repul, tud uszni, es hapog, akkor kacsa, hiaba oroklodik a dinoszauruszokbol.
Igen, ez egy dinamikusan típusos nyelvben könnyedén megtehető. Ettől még az öröklés mint koncepció hasznos, és nem feltétlenül szükséges osztályokat használni hozzá, lásd prototípus alapú öröklés pl. JavaScriptben* vagy Luában.
* bár ES 6 óta van class kulcsszó, az lényegében csak syntax sugar, a szemantika maradt a régi.
- A hozzászóláshoz be kell jelentkezni
A tisztan OO Java az, ahol kenyelmes, hogy van egy Object osztaly, amibol minden szarmazik.
Kivéve a primitív típusokat, emiatt van azoknak referencia típus megfeleltetése, autoboxing, külön tömb típusok, stb. Egyébként a Top típus mellett hasznos lenne még egy Unit típus (bár van Void, de azért az nem az igazi), illetve egy Bottom típus is. Példaként említeném a Scala, Kotlin és TypeScript nyelveket ahol teljes a hierarchia.
Leszarmazottat ugye hasznalhatsz barhol az os helyett
Gondolom itt leszármazott példányra gondolsz, amire ez igaz. De ha típusokról beszélünk érdemes megemlíteni, hogy ez kontravariancia esetén megfordulhat és az ős típust is használhatod, pl. override-olt metódus paraméterében.
- A hozzászóláshoz be kell jelentkezni
Huh, ez eléggé nagy káosz. Egy programozási nyelvben, és programozói eszközkészletben ennél nagyobb rend van.
Nem arról van szó, hogy akik használnak pythont, matematikusok-e, hanem arról, hogy a programozók mit értenek set alatt. És matematikai halmazt. Minden programnyelvben, ahol van ilyen nevű kollekció típus, matematikai halmazt jelent.
https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Set.html
A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1
and e2
such that e1.equals(e2)
, and at most one null element. As implied by its name, this interface models the mathematical set abstraction.
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic…
This interface provides methods for implementing sets, which are collections that have unique elements and specific operations.
https://www.cplusplus.com/reference/unordered_set/unordered_set/
Unordered sets are containers that store unique elements in no particular order, and which allow for fast retrieval of individual elements based on their value.
De nézzük meg a Python dokumentációját:
https://docs.python.org/3/tutorial/datastructures.html#sets
Python also includes a data type for sets. A set is an unordered collection with no duplicate elements.
A fenti kommented csak egy eléggé erőtlen magyarázkodás. A halmaz valóban egy rendezetlen dolog (nincs rendezési reláció definálva az elemekre), és nincs is a halmaznak semmiféle struktúrája. Egyik progrmaozási platformon sem.
- A hozzászóláshoz be kell jelentkezni