ããªããPythonããã°ã©ããŒã§ããå ŽåãããŒã¿åã¯åžžã«èåŸã«æ®ã£ãŠããŸãã ã©ããã§ãããã¯èªåèªèº«ã§ååšããäœããã®åœ¢ã§çžäºäœçšããŸãããã»ãšãã©ã®å Žåããšã©ãŒãçºçããå Žåã«ã®ã¿ååšã«ã€ããŠèããŸãã ãããŠãäŸå€ã¯ãããŒã¿åã®1ã€ãæåŸ ã©ããã«åäœããªãããšã瀺ããŠããŸãã
Pythonã¯ãåã·ã¹ãã ã®å®è£ ãåžžã«èªãã«æã£ãŠããŸãã äœå¹Žåã«ããã¥ã¡ã³ããèªãã ãèŠããŠããŸãããããã«ã¯ã¢ãã«ã®ã¿ã€ãã³ã°ã®å©ç¹ã«é¢ããã»ã¯ã·ã§ã³å šäœããããŸããã æ£çŽã«èšã£ãŠãã ãããã¯ããå®çšçãªç®çã®ããã«ãã¢ãã«ã®ã¿ã€ãã³ã°ã¯è¯ã解決çã§ãã äœã«ãå¶éãããŠããããããŒã¿åãååšããªãããã«ããŒã¿åãåŠçããå¿ èŠããªãå Žåã¯ãéåžžã«çŸããAPIãäœæã§ããŸãã Pythonã¯ãæ¥åžžã®ã¿ã¹ã¯ã解決ããã®ãç¹ã«ç°¡åã§ãã
Pythonã§å®è£ ããã»ãšãã©ãã¹ãŠã®APIã¯ãä»ã®ããã°ã©ãã³ã°èšèªã§ã¯æ©èœããŸããã§ããã ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ ïŒ ã¯ãªãã¯ã©ã€ãã©ãªïŒã®ãããªåçŽãªãã®ã§ãããä»ã®èšèªã§ã¯æ©èœããŸãããäž»ãªçç±ã¯ãããŒã¿åãšåžžã«éããªããã°ãªããªãããšã§ãã
å°ãåã«ãPythonã«éçåä»ããè¿œå ãããšããåé¡ãæèµ·ãããŸãããç§ã¯ãæ°·ãã€ãã«å£ããããšãå¿ããé¡ã£ãŠããŸãã ç§ã¯ãªãæ瀺çãªåä»ãã«å察ããã®ãããããŠãªãPythonããã®éã決ããŠé²ãŸãªãã®ãã説æããããšããŸãã
ãåã·ã¹ãã ããšã¯äœã§ããïŒ
åã·ã¹ãã ã¯ãã©ã®åãçžäºäœçšãããã«å¿ããäžé£ã®ã«ãŒã«ã§ãã ããŒã¿åã®ã¿ã«å°å¿µããã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®ã»ã¯ã·ã§ã³å šäœããããããèªäœã¯å°è±¡çã§ãããçè«ã«èå³ããªããŠããåã·ã¹ãã ãç¡èŠããããšã¯å°é£ã§ãã2ã€ã®çç±ãããåã·ã¹ãã ã«æ·±ãå ¥ã蟌ã¿ãŸããã 第äžã«ãç§èªèº«ã¯ãã®åéãå®å šã«ç解ããŠããªãããããŠç¬¬äºã«ãå®éã«ã¯ãããŒã¿åéã®é¢ä¿ããæãããããã«ãã¹ãŠãç解ããå¿ èŠã¯ãŸã£ãããããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¢ãŒããã¯ãã£ã«åœ±é¿ãäžããããããããã®åäœãèæ ®ããããšãéèŠã§ãããçè«å®¶ãšããŠã§ã¯ãªããå®è·µè ãšããŠã®ã¿ã€ãã³ã°ã«ã€ããŠèª¬æããŸãïŒçŸããAPIãæ§ç¯ããäŸã䜿çšïŒã
åã·ã¹ãã ã«ã¯å€ãã®ç¹æ§ããããŸããããããã®éã®æãéèŠãªéãã¯ãããŒã¿åãæäœããããšãããšãã«ããŒã¿åãããèªäœã«ã€ããŠæäŸããæ å ±ã®éã§ãã
ããšãã°ãPythonãåãäžããŸãã ã¿ã€ãããããŸãã ããã«æ°å42ããããŸãããã®æ°åã«ã¿ã€ããå°ãããšãæŽæ°ã§ãããšçããŸãã ããã¯å æ¬çãªæ å ±ã§ãããã€ã³ã¿ãŒããªã¿ãŒã¯ãæŽæ°ãçžäºã«ããåãã§ããã«ãŒã«ã®ã»ãããå®çŸ©ã§ããŸãã
ãã ããPythonã«ã¯æ¬ ããŠãããã®ã1ã€ãããŸããè€åããŒã¿åã§ãã Pythonã®ããŒã¿åã¯ãã¹ãŠããªããã£ãã§ããã€ãŸããç¹å®ã®æç¹ã§ãè€ååãšã¯ç°ãªãããã®ãã¡ã®1ã€ã ããæäœã§ããŸãã
ã»ãšãã©ã®ããã°ã©ãã³ã°èšèªãæã€æãåçŽãªè€åããŒã¿åã¯æ§é ã§ãã Pythonã§ã¯ãå€ãã®å Žåãã©ã€ãã©ãªã¯ç¬èªã®æ§é ãããšãã°Djangoã®ORMã¢ãã«ãSQLAlchemyãå®çŸ©ããå¿ èŠã¯ãããŸããã ããŒã¿ããŒã¹ã®ååã¯ãæ§é å ã®ãã£ãŒã«ãã«å¯Ÿå¿ããPythonãã³ãã«ãä»ããŠè¡šãããŸããäž»ããŒãidãšåŒã°ãããããIntegerFieldïŒïŒã§ãããšèšãå Žåãã¢ãã«ãè€åããŒã¿åãšããŠå®çŸ©ããŸãã
è€ååã¯æ§é ã®ã¿ã«éå®ãããŸããã è€æ°ã®çªå·ã䜿çšããå¿ èŠãããå Žåã¯ãã³ã¬ã¯ã·ã§ã³ïŒé åïŒã䜿çšããŸãã Pythonã«ã¯ãã®ããã®ãªã¹ããããããªã¹ãã®åèŠçŽ ã¯å®å šã«ä»»æã®ããŒã¿åãæã€ããšãã§ããŸããããã¯ãç¹å®ã®èŠçŽ åïŒæŽæ°ã®ãªã¹ããªã©ïŒãæã€ä»ã®ããã°ã©ãã³ã°èšèªã®ãªã¹ããšã¯ç°ãªããŸãã
ãæŽæ°ãªã¹ãããšãããã¬ãŒãºã¯ãåžžã«åãªããªã¹ããããæå³ããããŸãã åžžã«ãªã¹ãã調ã¹ãŠåèŠçŽ ã®ã¿ã€ããèŠãããšãã§ããã®ã§ãããã«ã€ããŠè°è«ããããšãã§ããŸããã空ã®ãªã¹ããã©ããããïŒ Pythonã«ç©ºã®ãªã¹ããããå Žåããã®ããŒã¿ã®ã¿ã€ããå€å¥ã§ããŸããã
å€Noneã䜿çšãããšãåãåé¡ãçºçããŸãã UseråŒæ°ãåãå ¥ããé¢æ°ããããšããŸãã Noneãã©ã¡ãŒã¿ãæž¡ããå ŽåãããããUserãã¿ã€ãã®ãªããžã§ã¯ãã§ããå¿ èŠãããããšã¯æ±ºããŠããããŸããã
ãã®åé¡ã®è§£æ±ºçã¯äœã§ããïŒ NULLãã€ã³ã¿ãŒãæãããæ瀺çã«æå®ãããèŠçŽ ã¿ã€ããæã€é åã䜿çšããŠãã ããã Haskellã«ã¯ãããååšããããšã¯èª°ããç¥ã£ãŠããŸãããéçºè ã«ãšã£ãŠæµå¯Ÿçã§ã¯ãªãä»ã®èšèªããããŸãã ããšãã°ãRustã¯C ++ã«éåžžã«äŒŒãŠãããããç§ãã¡ã«ãšã£ãŠãã芪ãã¿ãããããã°ã©ãã³ã°èšèªã§ãã ãŸããRustã«ã¯éåžžã«åŒ·åãªåã·ã¹ãã ããããŸãã
nullãã€ã³ã¿ãŒãæ¬ èœããŠããå ŽåãããŠãŒã¶ãŒãèšå®ãããŠããŸããããšããå€ãæž¡ãã«ã¯ã©ãããã°ããã§ãã ããšãã°ãRustã«ã¯ãããã«ãªãã·ã§ã³ã®ã¿ã€ãããããŸãã ãããã£ãŠãåŒOptionã¯ïŒãã®å Žåã¯ç¹å®ã®ãŠãŒã¶ãŒã®ïŒå€ãã©ããããããŒã¯ãããåæã§ãããäžéšã®ãŠãŒã¶ãŒïŒãŠãŒã¶ãŒïŒãŸãã¯Noneãæž¡ãããšãã§ããããšãæå³ããŸãã çŸåšãå€æ°ã«ã¯å€ãããå Žåãšãªãå Žåãããããããã®å€æ°ã䜿çšãããã¹ãŠã®ã³ãŒãã¯ãå€Noneãæž¡ãå Žåãæ£ããåŠçã§ããå¿ èŠããããŸããããã§ãªãå Žåã¯ãã³ã³ãã€ã«ãããŸããã
ç°è²ã®æªæ¥
以åã¯ãåçåä»ãã䜿çšãã解éèšèªãšéçåä»ãã䜿çšããã³ã³ãã€ã«èšèªãšã®éã«ã¯æ確ãªåé¢ããããŸããã æ°ãããã¬ã³ãã¯ãã²ãŒã ã®çŸåšã®ã«ãŒã«ãå€ããŠããŸããæªç¥ã®é åã«è¶³ãèžã¿å ¥ããæåã®å åã¯ãCïŒèšèªã®åºçŸã§ãã ããã¯éçåä»ããåããã³ã³ãã€ã«èšèªã§ãããæåã¯Javaã«éåžžã«äŒŒãŠããŸããã CïŒèšèªãéçºããããšããã®ã¿ã€ãã·ã¹ãã ã«æ°ããæ©èœãç»å Žãå§ããŸããã æãéèŠãªã€ãã³ãã¯ãäžè¬åãããåã®åºçŸã§ãããã³ã³ãã€ã©ã«ãã£ãŠåŠçãããªãã£ãã³ã¬ã¯ã·ã§ã³ïŒãªã¹ãããã³èŸæžïŒãå³å¯ã«å žååããããšãã§ããŸããã ããã«-ãã®ä»ïŒèšèªã®äœæè ã¯ãã³ãŒããããã¯å šäœã®å€æ°ã®éçãªåä»ããæŸæ£ããæ©èœãå°å ¥ããŸããã ããã¯ãWebãµãŒãã¹ïŒJSONãXMLãªã©ïŒã«ãã£ãŠæäŸãããããŒã¿ãæäœããå Žåã«éåžžã«äŸ¿å©ã§ããããã¯ãæœåšçã«å®å šã§ãªãæäœãå®è¡ããåã·ã¹ãã ããäŸå€ããã£ãããããŠãŒã¶ãŒã«èª€ã£ãããŒã¿ãéç¥ã§ããããã§ãã
çŸåšãCïŒèšèªåã·ã¹ãã ã¯éåžžã«åŒ·åã§ãããå ±å€ããã³åå€ã®ä»æ§ãæã€ãžã§ããªãã¯åããµããŒãããŠããŸãã ãŸããnullãã€ã³ã¿ãŒãèš±å¯ããåã®æäœããµããŒãããŠããŸãã ããšãã°ãnullãšããŠè¡šããããªããžã§ã¯ãã®ããã©ã«ãå€ãå®çŸ©ããããã«ãnullïŒ "??"ïŒãšããå€ãæã€å ±çšäœæŒç®åãè¿œå ãããŸããã CïŒã¯ãã§ã«ãã«ãåãé€ãã«ã¯è¡ãéããŠããŸããããã¹ãŠã®ããã«ããã¯ã¯å¶åŸ¡ãããŠããŸãã
éçåä»ããåããä»ã®ã³ã³ãã€ã«èšèªãæ°ããã¢ãããŒããè©Šã¿ãŠããŸãã ãã®ãããC ++ã§ã¯åžžã«éçåä»ãã®èšèªã§ããããéçºè ã¯å€ãã®ã¬ãã«ã§åæšè«ã®å®éšãéå§ããŸããã MyType <XãY> :: const_iteratorã®åœ¢åŒã®ã€ãã¬ãŒã¿ãŒã®æ代ã¯éå»ã®ãã®ã§ãããçŸåšã§ã¯ã»ãšãã©ãã¹ãŠã®å Žåã«ãªãŒãã¿ã€ãã䜿çšã§ããã³ã³ãã€ã©ãŒãç®çã®ããŒã¿åã代ããã«äœ¿çšããŸãã
ããã°ã©ãã³ã°èšèªRustã§ã¯ãåæšè«ãéåžžã«ããŸãå®è£ ãããŠãããããå€æ°ã®åããŸã£ããæå®ããã«ãéçåä»ãã§ããã°ã©ã ãäœæã§ããŸãã
use std::collections::HashMap; fn main() { let mut m = HashMap::new(); m.insert("foo", vec!["some", "tags", "here"]); m.insert("bar", vec!["more", "here"]); for (key, values) in m.iter() { println!("{} = {}", key, values.connect("; ")); } }
å°æ¥çã«ã¯åŒ·åãªåã·ã¹ãã ãåºçŸãããšä¿¡ããŠããŸãã ããããç§ã®æèŠã§ã¯ãããã¯åçåä»ãã®çµããã«ã¯è³ããããããããããã®ã·ã¹ãã ã¯ãããŒã«ã«åæšè«ã«ããéçåä»ãã®ãã¹ã«æ²¿ã£ãŠçºå±ããã§ãããã
Pythonãšæ瀺çãªåä»ã
å°ãåã®äŒè°ã§ã誰ããéçåä»ãã¯çŽ æŽããããšèª¬åŸåãæã£ãŠäž»åŒµããPythonã¯æ¬åœã«ãããå¿ èŠãšããŠããŸãã ãã®è°è«ãã©ã®ããã«çµãã£ããæ£ç¢ºã«ã¯èŠããŠããŸããããçµæã¯mypyãããžã§ã¯ãã§ããã泚éæ§æãšçµã¿åãããŠãPython 3ã®ãŽãŒã«ãã¿ã€ãã³ã°æšæºãšããŠææ¡ãããŸããããã®æšå¥šäºé ãèŠãããšããªãå Žåã¯ã次ã®ãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
from typing import List def print_all_usernames(users: List[User]) -> None: for user in users: print(user.username)
ããã¯æåã®è§£æ±ºçã§ã¯ãªããšç§ã¯å¿ããä¿¡ããŠããŸãã å€ãã®çç±ããããŸãããäž»ãªåé¡ã¯ãæ®å¿µãªããPythonã®åã·ã¹ãã ãããŸãè¯ããªãããšã§ãã å®éãèšèªã®èŠæ¹ã«ãã£ãŠãèšèªã®ã»ãã³ãã£ã¯ã¹ã¯ç°ãªããŸãã
éçåä»ããç解ããã«ã¯ãåã·ã¹ãã ãé©åã«å®è£ ããå¿ èŠããããŸãã 2ã€ã®ã¿ã€ããããå Žåããããã®ã¿ã€ããã©ã®ããã«çžäºäœçšããå¿ èŠãããããåžžã«ç¥ã£ãŠããå¿ èŠããããŸãã Pythonã§ã¯ãããã¯åœãŠã¯ãŸããŸããã
Pythonã¿ã€ãã»ãã³ãã£ã¯ã¹
ã¹ãããã·ã¹ãã ã«é¢ãã以åã®èšäºãèªãã å ŽåãPythonã®åã¯ãå®è£ ãããã¬ãã«ïŒCãŸãã¯PythonïŒã«å¿ããŠç°ãªãåäœãããããšãèŠããŠããå¿ èŠããããŸãã ããã¯èšèªã®éåžžã«ç¹æ®ãªæ©èœã§ãããä»ã®ã©ãã«ã衚瀺ãããŸããã åæã«ãéçºã®åæ段éã§ã¯ãå€ãã®ããã°ã©ãã³ã°èšèªãã€ã³ã¿ãŒããªã¿ãŒã¬ãã«ã§åºæ¬çãªããŒã¿åãå®è£ ããŠããŸããPythonã«ã¯ãåºæ¬çãªãåã¯ãããŸããããCã«ã¯ããŒã¿åã®ã°ã«ãŒãå šäœãå®è£ ãããŠããŸãããããã¯ããªããã£ãåããã³åºæ¬åã§ããã ãã§ãªããããžãã¯ã®ãªããã®ã§ããã°äœã§ãããŸããŸããã ããšãã°ãcollections.OrderedDictã¯ã©ã¹ã¯Pythonã§èšè¿°ãããåãã¢ãžã¥ãŒã«ã®collections.defaultdictã¯ã©ã¹ã¯Cã§èšè¿°ãããŠããŸãã
ããã¯ãå¯èœãªéãå ã®åããšãã¥ã¬ãŒãããå¿ èŠãããPyPyã€ã³ã¿ãŒããªã¿ãŒã«å€ãã®åé¡ãåŒãèµ·ãããŸãã ããã¯ãCPythonãšã®éããç®ç«ããªãåªããAPIãååŸããããã«å¿ èŠã§ãã Cã§èšè¿°ãããã€ã³ã¿ãŒããªã¿ãŒã¬ãã«ãšä»ã®èšèªãšã®äž»ãªéããç解ããããšã¯éåžžã«éèŠã§ãã
å¥ã®äŸã¯ã2.7ããåã®ããŒãžã§ã³ã®Pythonã®reã¢ãžã¥ãŒã«ã§ãã ãã以éã®ããŒãžã§ã³ã§ã¯ãå®å šã«æžãçŽãããŸããããäž»ãªåé¡ã¯äŸç¶ãšããŠé¢é£ããŠããŸããã€ã³ã¿ãŒããªã¿ãŒã¯ããã°ã©ãã³ã°èšèªã®ããã«æ©èœããŸããã
reã¢ãžã¥ãŒã«ã«ã¯ãæ£èŠè¡šçŸããã¿ãŒã³ã«ã³ã³ãã€ã«ããããã®ã³ã³ãã€ã«æ©èœããããŸãã ãã®é¢æ°ã¯æååãåãåãããã¿ãŒã³ãªããžã§ã¯ããè¿ããŸãã 次ã®ããã«ãªããŸãã
>>> re.compile('foobar') <_sre.SRE_Pattern object at 0x1089926b8>
ãã¿ãŒã³ãªããžã§ã¯ãã¯_sreã¢ãžã¥ãŒã«ã§å®çŸ©ãããŠããããšãããããŸãã_sreã¢ãžã¥ãŒã«ã¯å éšã¢ãžã¥ãŒã«ã§ãããããã§ãå©çšå¯èœã§ãã
>>> type(re.compile('foobar')) <type '_sre.SRE_Pattern'>
æ®å¿µãªããã_sreã¢ãžã¥ãŒã«ã«ã¯å®éã«ã¯ãã®ãªããžã§ã¯ããå«ãŸããŠããªããããããã¯ããã§ã¯ãããŸããã
>>> import _sre >>> _sre.SRE_Pattern Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'SRE_Pattern'
ããŠãããã¯åããã®å Žæãç§ãã¡ã«ã ãŸããŠããæåã®æéã§ã¯ãªãããŸãããããã«ããå éšåã§ãã å ã«é²ã¿ãŸãã ãã¿ãŒã³ã®ã¿ã€ãïŒ_sre.SRE_PatternïŒãããã£ãŠãããããã¯ãªããžã§ã¯ãã¯ã©ã¹ã®åå«ã§ãã
>>> isinstance(re.compile(''), object) True
ãŸãããã¹ãŠã®ãªããžã§ã¯ããæãäžè¬çãªã¡ãœããã®ããã€ããå®è£ ããŠããããšãããã£ãŠããŸãã ããšãã°ããã®ãããªã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¯__repr__ã¡ãœããããããŸãã
>>> re.compile('').__repr__() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: __repr__
äœãèµ·ãã£ãŠããã®ïŒ çãã¯ãŸã£ããäºæ³å€ã§ãã ç§ã«ã¯äžæãªçç±ã§ãããŒãžã§ã³2.7ããåã®Pythonã§ã¯ãSREãã¿ãŒã³ãªããžã§ã¯ãã«ã¯ç¬èªã®tp_getattrã¹ãããããããŸããã ãã®ã¹ãããã§ã¯ãç¬èªã®å±æ§æ€çŽ¢ããžãã¯ãå®è£ ãããç¬èªã®å±æ§ãšã¡ãœãããžã®ã¢ã¯ã»ã¹ãæäŸãããŸããã dirïŒïŒã¡ãœããã䜿çšããŠãã®ãªããžã§ã¯ãã調ã¹ããšãå€ãã®ãã®ãåã«æ¬ èœããŠããããšãããããŸãã
>>> dir(re.compile('')) ['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']
ãã¿ãŒã³ãªããžã§ã¯ãã®åäœã«é¢ãããã®å°ããªç 究ã¯ãããªãäºæããªãçµæã«ã€ãªãããŸãã ãããå®éã«èµ·ããããšã§ãã
ããŒã¿åã¯ããªããžã§ã¯ãããç¶æ¿ããããšã宣èšããŸãã ããã¯CPythonã«ã¯åœãŠã¯ãŸããŸãããPythonèªäœã«ã¯åœãŠã¯ãŸããŸããã Pythonã¬ãã«ã§ã¯ããã®åã¯ãªããžã§ã¯ãåã®ã€ã³ã¿ãŒãã§ãŒã¹ã«é¢é£ä»ããããŠããŸããã Pythonèšèªãçµç±ããåŒã³åºããšã¯ç°ãªããã€ã³ã¿ãŒããªã¿ãŒãçµç±ããåŒã³åºãã¯ãã¹ãŠæ©èœããŸãã ãããã£ãŠãããšãã°ãã¿ã€ãïŒxïŒã¯æ©èœããŸãããx .__ class__ã¯æ©èœããŸããã
ãµãã¯ã©ã¹ãšã¯
äžèšã®äŸã¯ãPythonã«ã¯å¥ã®ã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹ãååšããå¯èœæ§ãããããšã瀺ããŠããŸãããåæã«ãã®åäœã¯åºæ¬ã¯ã©ã¹ã«å¯Ÿå¿ããŠããŸããã ãããŠãéçåä»ãã«ã€ããŠè©±ããŠããå Žåãããã¯éèŠãªåé¡ã§ãã ãã®ãããPython 3ã§ã¯ãCã§èšè¿°ãããŸã§dictåã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ã§ããŸããããã®å¶éã®çç±ã¯ããã®åã¯åã«å®è£ ã§ããªãå¯èŠãªããžã§ã¯ãã«å¯Ÿããåäœã決å®ããããã§ãã ããã¯äžå¯èœã§ãããããã£ãŠãå泚éãé©çšããé¢æ°ãæååãšããŠããŒãæã¡ãåŒæ°ãšããŠæŽæ°å€ãæã€èŸæžãåãå ¥ããããšã宣èšãããšããã®é¢æ°ãèŸæžããŸãã¯èŸæžåäœãæã€ãªããžã§ã¯ããåãå ¥ãããã©ããã泚éããå€æããããšã¯ã§ããŸããèŸæžã®ãµãã¯ã©ã¹ãæž¡ããŸãã
æªå®çŸ©ã®åäœ
æ£èŠè¡šçŸãã¿ãŒã³ãªããžã§ã¯ãã®å¥åŠãªåäœã¯Python 2.7ã§å€æŽãããŸããããåé¡ã¯æ®ããŸããã èŸæžã®äŸã§ç€ºãããããã«ãã³ãŒãã®èšè¿°æ¹æ³ã«å¿ããŠèšèªã®åäœãç°ãªããåã·ã¹ãã ã®æ£ç¢ºãªã»ãã³ãã£ã¯ã¹ãå®å šã«ç解ããããšã¯äžå¯èœã§ããã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ã¿ã€ããæ¯èŒãããšãPythonã®2çªç®ã®ããŒãžã§ã³ã®ã€ã³ã¿ãŒããªã¿ãŒã®å éšã®éåžžã«å¥åŠãªåäœãèŠãããŸãã 3çªç®ã®ããŒãžã§ã³ã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå€æŽããããã®åäœã¯ãã¯ã圌女ã«ã¯é¢ä¿ãããŸããããæ ¹æ¬çãªåé¡ã¯äŸç¶ãšããŠå€ãã®ã¬ãã«ã§æ€åºã§ããŸãã
äŸãšããŠã»ããã®äžŠã¹æ¿ããèŠãŠã¿ãŸãããã Pythonã»ããã¯éåžžã«äŸ¿å©ãªããŒã¿åã§ãããæ¯èŒãããšéåžžã«å¥åŠãªåäœãããŸãã Python 2ã«ã¯ãåŒæ°ãšããŠ2ã€ã®ãªããžã§ã¯ããåãåããæž¡ãããåŒæ°ã®ã©ã¡ãã倧ãããã瀺ãæ°å€ãè¿ãcmpïŒïŒé¢æ°ããããŸãã
ã»ãããªããžã§ã¯ãã®2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãæ¯èŒããããšãããšã次ã®ããã«ãªããŸãã
>>> cmp(set(), set()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot compare sets using cmp()
ãªããã æ£çŽã«èšããšãç§ã«ã¯ããããªãã ããããçç±ã¯ãæ¯èŒæŒç®åãã»ããã§ã©ã®ããã«æ©èœãããã§ãããããã¯cmpïŒïŒã§ã¯æ©èœããŸããã åæã«ãfrozensetsã®ã€ã³ã¹ã¿ã³ã¹ã¯èããæ¯èŒãããŸãïŒ
>>> cmp(frozenset(), frozenset()) 0
ãããã®ã»ããã®1ã€ã空ã§ãªãå Žåãé€ããåã³äŸå€ãçºçããŸãã ãªãã§ïŒ çãã¯ç°¡åã§ããããã¯CPythonã€ã³ã¿ãŒããªã¿ãŒã®æé©åã§ãããPythonã®åäœã§ã¯ãããŸããã 空ã®frozensetã¯åžžã«åãå€ãæã¡ïŒäžå€ã®åã§ãããèŠçŽ ãè¿œå ããããšã¯ã§ããŸããïŒããããã£ãŠåžžã«åããªããžã§ã¯ãã§ãã 2ã€ã®ãªããžã§ã¯ãã®ã¡ã¢ãªå ã®ã¢ãã¬ã¹ãåãã§ããå ŽåãcmpïŒïŒé¢æ°ã¯ããã«0ãè¿ããŸããããããªãèµ·ããã®ããPython 2ã®æ¯èŒé¢æ°ã®ã³ãŒãã¯è€éãããŠãããã«ãããããããã«ã¯ããããŸãããããã®é¢æ°ã«ã¯ããã€ãã®æ¹æ³ããããŸãããã®çµæã«ã€ãªããå¯èœæ§ããããŸãã
ãã€ã³ãã¯ãããããã°ã§ããããšã ãã§ã¯ãããŸããã ãã€ã³ãã¯ãPythonã§ã¯åå士ã®çžäºäœçšã®åçãæ確ã«ç解ããŠããªããšããããšã§ãã 代ããã«ãPythonã®åã·ã¹ãã ã®ãã¹ãŠã®åäœã«å¯Ÿããåçãåžžã«1ã€ãããŸããããCPythonã¯ãã®ããã«æ©èœããŸããã
PyPyãCPythonã®åäœãåæ§ç¯ããããã«è¡ã£ãäœæ¥éãé倧è©äŸ¡ããããšã¯å°é£ã§ãã PyPyãPythonã§æžãããŠãããšãããšãèå³æ·±ãåé¡ãæµ®ãã³äžãããŸãã Pythonããã°ã©ãã³ã°èšèªããèšèªã®çŸåšã®Pythonéšåã®å®è£ æ¹æ³ã§èšè¿°ãããŠããã°ãPyPyã®åé¡ã¯ã¯ããã«å°ãªããªããŸãã
ã€ã³ã¹ã¿ã³ã¹ã¬ãã«ã®åäœ
ä»®ã«ã説æãããã¹ãŠã®åé¡ãä¿®æ£ãããããŒãžã§ã³ã®Pythonããããšæ³åããŠã¿ãŸãããã ãã®å Žåã§ããéçåãèšèªã«è¿œå ããããšã¯ã§ããŸããã ãã®çç±ã¯ãPythonã¬ãã«ã§ã¯ãåã¯éèŠãªåœ¹å²ãæããããããã«éèŠãªã®ã¯ããªããžã§ã¯ããäºãã«ã©ã®ããã«çžäºäœçšãããã§ããããšãã°ãæ¥æãªããžã§ã¯ãã¯äžè¬ã«ä»ã®ãªããžã§ã¯ããšæ¯èŒã§ããŸãã ãã ãã2ã€ã®datetimeãªããžã§ã¯ããäºãã«æ¯èŒããå Žåãã¿ã€ã ãŸãŒã³ã«äºææ§ãããå Žåã«ã®ã¿ãããå®è¡ã§ããŸãã ãŸããå€ãã®æäœã®çµæã¯ããããã«é¢ä¿ãããªããžã§ã¯ããæ éã«èª¿ã¹ããŸã§äºæž¬ã§ããªãå ŽåããããŸãã Python 2ã§2ã€ã®æååãé£çµããçµæã¯ãUnicodeãŸãã¯ãã€ãæååã«ãªããŸãã ã³ãŒããã¯ã·ã¹ãã ã®ç°ãªããšã³ã³ãŒããŸãã¯ãã³ãŒãAPIã¯ãç°ãªããªããžã§ã¯ããè¿ãå ŽåããããŸãã
èšèªãšããŠã®Pythonã¯ãå泚éãããŸãæ©èœããã«ã¯åçãããŸãã èšèªã§ãžã§ãã¬ãŒã¿ãæããéèŠãªåœ¹å²ãæ³åããŠã¿ãŠãã ãããããã§ããåå埩ã§å€ãã®åå€ææäœãå®è¡ã§ããŸãã
å泚éã®å°å ¥ã«ããããããããããŸããªå¹æãçãŸããŸãã ãã ãããããAPIã®ã¢ãŒããã¯ãã£ã«æªåœ±é¿ãäžããå¯èœæ§ãé«ããªããŸãã å°ãªããšãããããã®æ³šéãããã°ã©ã ã®èµ·ååã«åãåãããªãå Žåãã³ãŒãã®å®è¡ãé ããªããŸãã å泚éã¯ãPythonãPythonã§ã¯äžå¯èœãªãã®ã«å€ããããšãªããå¹ççãªéçã³ã³ãã€ã«ãèš±å¯ããŸããã
æè·ç©ãšã»ãã³ãã£ã¯ã¹
Pythonã«å¯Ÿããç§ã®å人çãªåŠå®çãªæ 床ã¯ããã®èšèªãå°éããäžæ¡çãªè€éãã«ãããã®ã ãšæããŸãã ããã¯åã«ä»æ§ã«æ¬ ããŠããã ãã§ãããä»æ¥ãåéã®çžäºäœçšã¯éåžžã«è€éã«ãªãããã¹ãŠãç解ããããšã¯ã§ããªããããããŸããã éåžžã«å€ãã®æŸèæãšãããã®å°ããªåäœæ©èœããã¹ãŠãããããä»æ¥å¯èœãªèšèªä»æ§ã¯CPythonã€ã³ã¿ãŒããªã¿ãŒã®è©³çŽ°ãªèª¬æã ãã§ããç§ã®æèŠã§ã¯ãäžèšã®ãã¹ãŠãèæ ®ãããšãå泚éã®å°å ¥ã¯ã»ãšãã©æå³ããããŸããã
å°æ¥ã誰ããäž»ã«åçãªåä»ãã䜿çšããŠæ°ããããã°ã©ãã³ã°èšèªãéçºãããå Žåã¯ãåã·ã¹ãã ãã©ã®ããã«æ©èœãããã«ã€ããŠã®æ確ãªèª¬æã«ããã«æéãè²»ããå¿ èŠããããŸãã ããã¯JavaScriptã§éåžžã«ããŸãè¡ãããçµã¿èŸŒã¿åã®ãã¹ãŠã®ã»ãã³ãã£ã¯ã¹ã¯ãæå³ããªããªãå Žåã§ã詳现ã«èšè¿°ãããŸããããã¯ç§ã®æèŠã§ã¯è¯ãç¿æ £ã§ãã èšèªã®ã»ãã³ãã£ã¯ã¹ãã©ã®ããã«æ©èœããããæ確ã«å®çŸ©ããŠããã°ãå°æ¥ãã€ã³ã¿ãŒããªã¿ãŒã®é床ãæé©åãããããªãã·ã§ã³ã®éçåä»ããè¿œå ãããããããšãç°¡åã«ãªããŸãã
ãã©ã³ã¹ã®ãšãããååã«ææžåãããèšèªã¢ãŒããã¯ãã£ãç¶æãããšãå€ãã®åé¡ãåé¿ã§ããŸãã å°æ¥ã®ããã°ã©ãã³ã°èšèªã®ã¢ãŒããã¯ãã¯ãèšèªã®æ¯ãèããæçµçã«ã€ã³ã¿ãŒããªã¿ãŒã®æ¯ãèãã«ãã£ãŠèª¬æããããšããPHPãPythonãããã³Rubyã®èšèªã®éçºè ãç¯ãããã¹ãŠã®ééãã絶察ã«é¿ããã¹ãã§ãã
Pythonãããè¯ãæ¹åã«å€ããããšã¯ãŸããªããšæããŸãã ãã®å°é£ãªéºç£ããã¹ãŠåãé€ãã«ã¯ãæéãšåŽåãããããããŸãã
Dreadatourã翻蚳ããããã¹ãã¯ïŒ usernameïŒ ãèªã¿ãŸããã