
æè¿ãé¢çœããããªãããŒããããŠå¥åŠãªJavaScriptã®äŸã«ã€ããŠæžããŸãã ã ä»ã§ã¯Pythonã®çªã§ãã é«åºŠãªã€ã³ã¿ãŒããªã¿ãŒåèšèªã§ããPythonã«ã¯ãå€ãã®äŸ¿å©ãªããããã£ããããŸãã ããããäžèŠãããšããäžéšã®ã³ãŒãã®çµæãæããã§ãªãå ŽåããããŸãã
以äžã¯ãPythonã§ã®äºæããªãåäœã®äŸãåéããå
éšã§äœãèµ·ããããè°è«ãã楜ãããããžã§ã¯ãã§ãã ããã€ãã®äŸã¯ãå®éã®WTFã®ã«ããŽãªã«å±ããŠããŸããïŒïŒããããããããã¯ããªããé¿ãããèšèªã®èå³æ·±ãç¹åŸŽã瀺ããŠããŸãã ããã¯Pythonã®å
éšã®ä»çµã¿ãåŠã¶è¯ãæ¹æ³ã ãšæããŸããèå³ãæã£ãŠããã ããã°å¹žãã§ãã
æ¢ã«çµéšè±å¯ãªPythonããã°ã©ããŒã§ããå Žåãå€ãã®äŸã¯ããªãã«ããç¥ãããŠãããããããŸãããããããã«é ãæ©ãŸãããšãããããã®å Žåã«æãããããåŒãèµ·ãããããããŸãã:)
å
容
äŸã®æ§é
泚ïŒäžèšã®äŸã¯ãã¹ãŠã察話åPython 3.5.2ã€ã³ã¿ãŒããªã¿ãŒã§ãã¹ããããŠããã説æã§ç¹ã«æå®ãããŠããªãéãããã¹ãŠã®ããŒãžã§ã³ã®èšèªã§åäœããã¯ãã§ãã
äŸã®æ§é ïŒ
ããã€ãã®æããªèŠåºã
# . # ...
çµæïŒPythonããŒãžã§ã³ïŒïŒ
>>> _ ,
ïŒãªãã·ã§ã³ïŒïŒäºæããªãçµæã®1è¡ã®èª¬æã
説æ
äœãèµ·ãã£ãã®ãããããŠãã®çç±ã®ç°¡åãªèª¬æã
( )
çµæïŒ
>>> # - , #
䜿çšãã
ãããã®äŸãæ倧éã«æŽ»çšããæåã®æ¹æ³ã¯ãæç³»åã§ããããèªãããšã§ããããã«æããŸãã
ãœãŒã¹ã³ãŒãã泚ææ·±ã調ã¹ãŠãã ããã ããªããçµéšè±å¯ãªPythonããã°ã©ãã§ããå Žåãã»ãšãã©ã®å Žåãäœãèµ·ããããããŸãäºæž¬ã§ããŸãã
çµæã調æ»ããã«ã¯ïŒ
- 圌ããããªãã®æåŸ
ãšäžèŽãããã©ããã確èªããŠãã ããã
- ãã®ãããªçµæãåŸãããçç±ãå¿
ãç解ããŠãã ããã
- ããããªãå Žåã¯ã説æãèªãã§ãã ããïŒãŸã ããããªãå Žåã¯ã ããã§å«ãã§ãã ãã ïŒã
- ç解ããããé ã軜ãããããŠæ¬¡ã®äŸã«é²ãã§ãã ããã
PSã³ãã³ãã©ã€ã³ã§ãããã®äŸãèªãããšãã§ããŸãã wtfpython
ã«wtfpython
npmããã±ãŒãžãã€ã³ã¹ããŒã«ããã ãã§ã
$ npm install -g wtfpython
ã³ãã³ãã©ã€ã³ã§wtfpython
ãå®è¡ãããšããã®ã³ã¬ã¯ã·ã§ã³ã$PAGER
éããŸãã
#TODOïŒpypiããã±ãŒãžãè¿œå ããŠãã³ãã³ãã©ã€ã³ã§èªã¿åããŸãã
äŸ
è¡ã¹ãããïŒ
çµæïŒ
>>> value = 11 >>> valu = 32 >>> value 11
ã¯ããïŒ
泚ïŒãã®äŸãåçŸããæãç°¡åãªæ¹æ³ã¯ããã¡ã€ã«/ã·ã§ã«ã«ã³ããŒããŠè²Œãä»ããããšã§ãã
説æ
äžéšã®Unicodeæåã¯ASCIIãšåãããã«èŠããŸãããã€ã³ã¿ãŒããªã¿ãŒã«ãã£ãŠç°ãªããŸãã
>>> value = 42 #ascii e >>> valu = 23 #cyrillic e, Python 2.x interpreter would raise a `SyntaxError` here >>> value 42
ãŸããã©ããããããæªãã...
def square(x): """ . """ sum_so_far = 0 for counter in range(x): sum_so_far = sum_so_far + x return sum_so_far
çµæïŒPython 2.xïŒïŒ
>>> square(10) 10
100ã§ã¯ãªãã§ããããïŒ
泚ïŒçµæãåçŸã§ããªãå Žåã¯ãã·ã§ã«ã§mixed_tabs_and_spaces.pyãã¡ã€ã«ãå®è¡ããŠã¿ãŠãã ããã
説æ
- ã¿ããšã¹ããŒã¹ãæ··åšãããªãã§ãã ããïŒ ãªã¿ãŒã³ã®åã®æåã¯ã¿ãã§ããã4ã€ã®ã¹ããŒã¹ãšããŠèªèãããŸãã
- Pythonãã¿ããåŠçããæ¹æ³ã次ã«ç€ºããŸãã
æåã«ããããã¯ïŒå·Šããå³ãžïŒ1ãã8ãŸã§ã®ã¹ããŒã¹ã§çœ®ãæããããããã眮ãæããããæåã®åèšæ°ã¯8å以äžã«ãªãå¯èœæ§ããããŸã... - ãããã£ãŠã
square
é¢æ°ã®æåŸã®è¡ã®ã¿ãã¯8ã€ã®ã¹ããŒã¹ã«çœ®ãæããããã«ãŒãã«å
¥ããŸãã - ãã®ãããªå ŽåãPython 3ã¯èªåçã«ãšã©ãŒãã¹ããŒã§ããŸãã
çµæïŒPython 3.xïŒïŒ
TabError: inconsistent use of tabs and spaces in indentation
ããã·ã¥ã±ãŒãã®æéïŒ
1ã
some_dict = {} some_dict[5.5] = "Ruby" some_dict[5.0] = "JavaScript" some_dict[5] = "Python"
çµæïŒ
>>> some_dict[5.5] "Ruby" >>> some_dict[5.0] "Python" >>> some_dict[5] "Python"
Pythonã¯JavaScriptã®ååšãç Žå£ããŸãããïŒ
説æ
Pythonã®èŸæžã¯ãç䟡æ§ããã§ãã¯ããããã·ã¥ã®å€ãæ¯èŒããŠã2ã€ã®ããŒãåããã©ãããå€æããŸãã
Pythonã§åãå€ãæã€äžå€ãªããžã§ã¯ãã¯ãåžžã«åãããã·ã¥ãååŸããŸãã
>>> 5 == 5.0 True >>> hash(5) == hash(5.0) True
泚ïŒç°ãªãå€ãæã€ãªããžã§ã¯ããåãããã·ã¥ãåãåãããšãã§ããŸãïŒãã®ç¶æ³ã¯ããã·ã¥è¡çªãšåŒã°ããŸãïŒã
some_dict[5] = "Python"
åŒãå®è¡ãããšãPythonãsome_dict
åãèŸæžããŒãšããŠ5
ããã³5.0
ãèªèãããããæ¢åã® "JavaScript"åŒã¯ "Python"ã«æžãæããããŸãã
StackOverflow ã¯ããã®åäœã®çç±ãå®å
šã«èª¬æããŠããŸãã
åŠçæéã®äžäžèŽ
array = [1, 8, 15] g = (x for x in array if array.count(x) > 0) array = [2, 8, 22]
çµæïŒ
>>> print(list(g)) [8]
説æ
- å¥ãžã§ãã¬ãŒã¿ãŒåŒ
in
ã in
宣èšæã«åŠçãããæ¡ä»¶ä»ãå¥ã¯å®è¡æã«åŠçãããŸãã - ãããã£ãŠãå®è¡åã«
array
ã¯ãªã¹ã[2, 8, 22]
2ã8ã22]ã«åå²ãåœãŠããã1ã8ãããã³15
ãã¡ã«ãŠã³ã¿ãŒ8
ã®å€ã®ã¿ã0
ãã倧ããããããžã§ãã¬ãŒã¿ãŒã¯8
ã®ã¿ã8
ãŸãã
å埩äžã«èŸæžãå€æãã
x = {0: None} for i in x: del x[i] x[i+1] = None print(i)
çµæïŒ
0 1 2 3 4 5 6 7
ã¯ãã 8åå®è¡ãããŠåæ¢ããŸãã
説æ
- ãã®èšèªã¯ãç·šéäžã®èŸæžãå埩ããæ©èœããµããŒãããŠããŸããã
- ãã®æç¹ã§èŸæžãæ¡å€§ãããŠããå€ãã®ããŒãä¿æãããããã8åå®è¡ãããŸãïŒ8ã€ã®åé€ã¬ã³ãŒãããããããèŸæžã®ãµã€ãºãå€æŽããå¿
èŠããããŸãïŒã ãããã¯å®è£
æ©èœã§ãã
- åæ§ã®äŸãStackOverflowã«ãã£ãŠè§£æãããŸãã
å埩äžã«ãªã¹ãã¢ã€ãã ãåé€ãã
list_1 = [1, 2, 3, 4] list_2 = [1, 2, 3, 4] list_3 = [1, 2, 3, 4] list_4 = [1, 2, 3, 4] for idx, item in enumerate(list_1): del item for idx, item in enumerate(list_2): list_2.remove(item) for idx, item in enumerate(list_3[:]): list_3.remove(item) for idx, item in enumerate(list_4): list_4.pop(idx)
çµæïŒ
>>> list_1 [1, 2, 3, 4] >>> list_2 [2, 4] >>> list_3 [] >>> list_4 [2, 4]
çµæãåŸãããçç±ãç¥ã£ãŠããŸãã[2, 4]
ïŒ
説æ
å埩äžã«ãªããžã§ã¯ããå€æŽããããšã¯åžžã«æªãèãã§ãã ããããlist_3[:]
ãããããã«ããªããžã§ã¯ãã®ã³ããŒãå埩ããæ¹ãè¯ãã§ãã
>>> some_list = [1, 2, 3, 4] >>> id(some_list) 139798789457608 >>> id(some_list[:]) # Notice that python creates new object for sliced list. 139798779601192
del
ã remove
ããã³pop
ã®éãïŒ
del var_name
ã¯ãããŒã«ã«ãŸãã¯ã°ããŒãã«åå空éã®var_name
ãã€ã³ãã£ã³ã°ãåã«åé€ããŸãïŒãããã£ãŠã list_1
ã¯åœ±é¿ãåããŸããïŒã
remove
ã¯ãç¹å®ã®ã€ã³ããã¯ã¹ã§ã¯ãªããæåã«äžèŽããå€remove
åé€ããå€ããªãå Žåã¯ValueError
ãäžããŸãã
pop
ã¯ãç¹å®ã®ã€ã³ããã¯ã¹ãæã€èŠçŽ ãåé€ããŠè¿ããç¡å¹ãªã€ã³ããã¯ã¹ãæå®ãããŠããå Žåã¯IndexError
ãäžããŸãã
ãªããããèµ·ãã£ãã®ã[2, 4]
ïŒ
- ãªã¹ãã¯ã€ã³ããã¯ã¹
list_4
ã list_2
ãŸãã¯list_4
ãã1
ãåé€ãããšããªã¹ãã®å
容ã¯[2, 3, 4]
ãŸãã æ®ãã®ãã®ã¯äžã«ã·ãããããŸããã€ãŸãã 2
ã¯ã€ã³ããã¯ã¹0ã«ã 3
ã¯ã€ã³ããã¯ã¹1ã«ãããŸãã次ã®å埩ã¯ã€ã³ããã¯ã¹1ïŒ 3
ïŒã«å¯ŸããŠå®è¡ãããããã 2
ã¯ã¹ããããããŸãã ãªã¹ãå
ã®2çªç®ã®èŠçŽ ããšã«åãããšãèµ·ãããŸãã Pythonã®èŸæžã«é¢é£ããåæ§ã®äŸã¯ ãStackOverflowã§çŸãã説æãããŠããŸãã
è¡æ«ã®ããã¯ã¹ã©ãã·ã¥
çµæïŒ
>>> print("\\ some string \\") >>> print(r"\ some string") >>> print(r"\ some string \") File "<stdin>", line 1 print(r"\ some string \") ^ SyntaxError: EOL while scanning string literal
説æ
r
ãã¬ãã£ãã¯ã¹ã§ç€ºãããçã®æååãªãã©ã«ã§ã¯ãããã¯ã¹ã©ãã·ã¥ã«ã¯ç¹å¥ãªæå³ã¯ãããŸããã- ãã ããã€ã³ã¿ãŒããªã¿ãŒã¯ããã¯ã¹ã©ãã·ã¥ã®åäœãå€æŽãããããããã¯ã¹ã©ãã·ã¥ãšåŸç¶ã®æåã¯åã«ã¹ããããããŸãã ãããã£ãŠãçã®è¡ã®æ«å°Ÿã«ããããã¯ã¹ã©ãã·ã¥ã¯æ©èœããŸããã
巚倧ãªç³žãäœããïŒ
ããã¯ãŸã£ããWTFã§ã¯ãããŸããããããã€ãã®ã¯ãŒã«ãªããšã ãã§ããã泚æããå¿
èŠããããŸã:)
def add_string_with_plus(iters): s = "" for i in range(iters): s += "xyz" assert len(s) == 3*iters def add_string_with_format(iters): fs = "{}"*iters s = fs.format(*(["xyz"]*iters)) assert len(s) == 3*iters def add_string_with_join(iters): l = [] for i in range(iters): l.append("xyz") s = "".join(l) assert len(s) == 3*iters def convert_list_to_string(l, iters): s = "".join(l) assert len(s) == 3*iters
çµæïŒ
>>> timeit(add_string_with_plus(10000)) 100 loops, best of 3: 9.73 ms per loop >>> timeit(add_string_with_format(10000)) 100 loops, best of 3: 5.47 ms per loop >>> timeit(add_string_with_join(10000)) 100 loops, best of 3: 10.1 ms per loop >>> l = ["xyz"]*10000 >>> timeit(convert_list_to_string(l, 10000)) 10000 loops, best of 3: 75.3 µs per loop
説æ
- timeitã«ã€ããŠè©³ããèªãããšãã§ããŸãã éåžžãã³ãŒããã©ã°ã¡ã³ãã®å®è¡æéã枬å®ããããã«äœ¿çšãããŸãã
+
ã䜿çšããŠé·ãæååãçæããªãã§ãã ããstr
ã§ã¯ã str
ã¯äžå€ã§ãããã®ãããé£çµã®åãã¢ã«ã€ããŠãå·Šå³ã®æååãæ°ããè¡ã«ã³ããŒããå¿
èŠããããŸãã ãããã10æåã®4è¡ãé£çµããå ŽåãïŒ10 + 10ïŒ+ïŒïŒ10 + 10ïŒ+ 10ïŒ+ïŒïŒïŒ10 + 10ïŒ+10ïŒ+10ïŒ= 40ã§ã¯ãªã90æåãã³ããŒããŸããè¡ã®æ°ãšãµã€ãºã¯4åæªãã§ãã- ãããã£ãŠã
.format.
æ§æã䜿çšãã.format.
ãŸãã¯%
ïŒãã ããçãè¡ã§ã¯ããã¯+ããå°ãé
ããªããŸãïŒã - ãŸããã³ã³ãã³ããå埩å¯èœãªãªããžã§ã¯ããšããŠæ¢ã«å©çšå¯èœãªå Žåã¯ãããé«éãªãã®ãéžæããããšãã
''.join(iterable_object)
ãŸãã ''.join(iterable_object)
ã
æååé£çµã€ã³ã¿ãŒããªã¿ãŒã®æé©å
>>> a = "some_string" >>> id(a) 140420665652016 >>> id("some" + "_" + "string") # Notice that both the ids are same. 140420665652016 # using "+", three strings: >>> timeit.timeit("s1 = s1 + s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100) 0.25748300552368164 # using "+=", three strings: >>> timeit.timeit("s1 += s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100) 0.012188911437988281
説æ
+=
é«é+
2è¡ä»¥äžãæåã®è¡ïŒããšãã°ã s1 += s2 + s3
ïŒã¯ãè¡å
šäœãåŠçããããŸã§ç Žæ£ãããªãããã§ãã- äž¡æ¹ã®è¡ã¯åããªããžã§ã¯ããåç
§ããŸããCPythonã®æé©åã¯ãæ¯åæ°ãããªããžã§ã¯ããäœæããã®ã§ã¯ãªããæ¢åã®äžå€ãªããžã§ã¯ãïŒå®è£
æ©èœïŒã䜿çšããããšããå Žåãããããã§ãã ç¶ããèªã ã
ã¯ããååšããŸãïŒ
forã«ãŒãã®else
ç¯ ã å
žåçãªäŸïŒ
def does_exists_num(l, to_find): for num in l: if num == to_find: print("Exists!") break else: print("Does not exist")
çµæïŒ
>>> some_list = [1, 2, 3, 4, 5] >>> does_exists_num(some_list, 4)
ãããŸãïŒ
>>> does_exists_num(some_list, -1)
ååšããŸããã
äŸå€åŠçã®else
å¥ ã äŸïŒ
try: pass except: print("Exception occurred!!!") else: print("Try block executed successfully...")
çµæïŒ
Try block executed successfully...
説æ
else
ã¯ããã¹ãŠã®å埩åŸã«æ瀺çãªbreak
ããªãå Žåã«ã®ã¿ãã«ãŒãã®åŸã«å®è¡ãããŸããtry
ãããã¯ã®else
ç¯ã¯ãå®äºç¯ãšãåŒã°ããŸãtry
åŒã®else
ã¯ã try
ãããã¯ãæ£åžžã«å®äºããããšãæå³ããããã§ãã
is
ããã§ã¯is
ãŸãã
ãã®äŸã¯éåžžã«åºãç¥ãããŠããŸãã
>>> a = 256 >>> b = 256 >>> a is b True >>> a = 257 >>> b = 257 >>> a is b False >>> a = 257; b = 257 >>> a is b True
説æ
is
ãš==
ã®éã
is
æŒç®åã¯ãäž¡æ¹ã®ãªãã©ã³ããåããªããžã§ã¯ããåç
§ããŠããããšã確èªããŸãïŒã€ãŸããäºãã«åäžã§ãããã©ããã確èªããŸãïŒã==
æŒç®åã¯ããªãã©ã³ãã®å€ãæ¯èŒããåäžæ§ããã§ãã¯ããŸãã- ãããã£ãŠããªã³ã¯ã®ç䟡æ§ã«äœ¿çšããã
==
ã¯å€ã®ç䟡æ§ã«äœ¿çšãããŸãã 説æäŸïŒ
>>> [] == [] True >>> [] is [] # These are two empty lists at two different memory locations. False
256
ã¯æ¢åã®ãªããžã§ã¯ãã§ããã 257
ã¯ããã§ã¯ãããŸãã
Pythonãèµ·åãããšã-5ã256ã®æ°å€ãã¡ã¢ãªã«å²ãåœãŠãããŸãã ãããã¯é »ç¹ã«äœ¿çšããããããæºåãæŽããŠããããšããå§ãããŸãã
https://docs.python.org/3/c-api/long.htmlããåŒçš
çŸåšã®å®è£
ã§ã¯ã-5ã256ã®ãã¹ãŠã®æ°å€ã«å¯ŸããŠæŽæ°ãªããžã§ã¯ãã®é
åããµããŒããããŠããããããã®ç¯å²ããintãäœæãããšãæ¢åã®ãªããžã§ã¯ããžã®ãªã³ã¯ãååŸãããŸãã ãããã£ãŠãå€ã1ã«å€æŽã§ããã¯ãã§ãããããããã®å ŽåãPythonã®åäœã¯äºæž¬äžèœã«ãªããšæãããŸãã :-)
>>> id(256) 10922528 >>> a = 256 >>> b = 256 >>> id(a) 10922528 >>> id(b) 10922528 >>> id(257) 140084850247312 >>> x = 257 >>> y = 257 >>> id(x) 140084850247440 >>> id(y) 140084850247344
ã€ã³ã¿ãŒããªã¿ãŒã¯ããã»ã©ã¹ããŒãã§ã¯ãªããå®è¡æã«y = 257
ã¯å€257
æŽæ°ãæ¢ã«äœæããããšãç解ããŠããªãã£ããããã¡ã¢ãªå
ã«å¥ã®ãªããžã§ã¯ããäœæããŸãã
a
ãšb
ã¯ãåãè¡ã«åãå€ãæã€åæåäžã«åããªããžã§ã¯ããåç
§ããŸãã
>>> a, b = 257, 257 >>> id(a) 140640774013296 >>> id(b) 140640774013296 >>> a = 257 >>> b = 257 >>> id(a) 140640774013392 >>> id(b) 140640774013488
257
åãè¡ã®b
ãšb
ã«å²ãåœãŠããããšãPythonã€ã³ã¿ãŒããªã¿ãŒã¯æ°ãããªããžã§ã¯ããäœæãããšåæã«ã2çªç®ã®å€æ°ãããããåç
§ããŸãã ç°ãªãè¡ã«å€ãå²ãåœãŠãå Žåãã€ã³ã¿ããªã¿ã¯ãªããžã§ã¯ãã®åœ¢åŒã§ãã§ã«257
ãæã£ãŠããããšããèªèãããŸããã- ããã¯ã察話åç°å¢ã«ç¹ã«é©çšãããã³ã³ãã€ã©æé©åã§ãã äœæ¥äžã®ã€ã³ã¿ãŒããªã¿ãŒã«2è¡å
¥åãããšãããããã³ã³ãã€ã«ãããŸããã€ãŸããå¥ã
ã«æé©åãããŸãã
.py
ãã¡ã€ã«ã§ãã®äŸãå®è¡ããããšããŠãããã¡ã€ã«ã¯äžåºŠã«ã³ã³ãã€ã«ãããããããã®åäœã¯èŠãããŸããã
is not ...
is (not ...)
>>> 'something' is not None True >>> 'something' is (not None) False
説æ
is not
ã¯åç¬ã®ãã€ããªæŒç®åã§is
not
ã is
ãšnot
ãå¥ã
ã«äœ¿çšãããå Žåã®åäœãšã¯åäœãç°ãªããŸãã- ã¹ããŒãã¡ã³ãã®äž¡åŽã®å€æ°ãåããªããžã§ã¯ããæãå Žåã
False
è¿ãis not
ã ãã以å€ã®å Žåã¯ã True
ãTrue
ãŸãã
ã«ãŒãå
ã®é¢æ°ã¯åãçµæãè¿ããŸãã
funcs = [] results = [] for x in range(7): def some_func(): return x funcs.append(some_func) results.append(some_func()) funcs_results = [func() for func in funcs]
çµæïŒ
>>> results [0, 1, 2, 3, 4, 5, 6] >>> funcs_results [6, 6, 6, 6, 6, 6, 6]
some_func
ãfuncs
ã«è¿œå ããåã«ãåå埩ã®x
å€ãç°ãªãå Žåããã¹ãŠã®é¢æ°ã¯6ãè¿ããŸããã
//OR >>> powers_of_x = [lambda x: x**i for i in range(10)] >>> [f(2) for f in powers_of_x] [512, 512, 512, 512, 512, 512, 512, 512, 512, 512]
説æ
- æ¬äœã§ã«ãŒãå€æ°ã䜿çšãããã«ãŒãã§é¢æ°ãå®çŸ©ããå Žåãã«ãŒãé¢æ°ã®ã¯ããŒãžã£ãŒã¯å€ã§ã¯ãªãå€æ°ã«é¢é£ä»ããããŸãã ãããã£ãŠããã¹ãŠã®é¢æ°ã¯ãèšç®ã«å€æ°ã«å²ãåœãŠãããæåŸã®å€ã䜿çšããŸãã
- ç®çã®åäœãåŸãããã«ãã«ãŒãå€æ°ãååä»ãå€æ°ãšããŠé¢æ°ã«æž¡ãããšãã§ããŸãã ãªãæ©èœããã®ã§ããïŒ ãã®ããã«ããŠãå€æ°ã¯åã³é¢æ°ã®ã¹ã³ãŒãå
ã§å®çŸ©ãããããã§ãã
funcs = [] for x in range(7): def some_func(x=x): return x funcs.append(some_func)
çµæïŒ
>>> funcs_results = [func() for func in funcs] >>> funcs_results [0, 1, 2, 3, 4, 5, 6]
ããŒã«ã«ã¹ã³ãŒãããã®ã«ãŒãå€æ°ã®æŒæŽ©
1ã
for x in range(7): if x == 6: print(x, ': for x inside loop') print(x, ': x in global')
çµæïŒ
6 : for x inside loop 6 : x in global
ãã ãã x
ã¹ã³ãŒãå€ã®ã«ãŒãã«å¯ŸããŠå®çŸ©ãããŠããŸããã
2ã
# This time let's initialize x first x = -1 for x in range(7): if x == 6: print(x, ': for x inside loop') print(x, ': x in global')
çµæïŒ
6 : for x inside loop 6 : x in global
3ã
x = 1 print([x for x in range(5)]) print(x, ': x in global')
çµæïŒPython 2.xã®å ŽåïŒïŒ
[0, 1, 2, 3, 4] (4, ': x in global')
çµæïŒPython 3.xã®å ŽåïŒïŒ
[0, 1, 2, 3, 4] 1 : x in global
説æ
- Pythonã§ã¯ãforã«ãŒãã¯ãç¹å®ã®ã«ãŒãå€æ°ãæ°ã«ããã«ãååšããå¯èŠæ§ã¹ããŒã¹ã䜿çšããŸãã ããã¯ã以åã«ã°ããŒãã«åå空éã§forã«ãŒãå€æ°ãæ瀺çã«å®çŸ©ããå Žåã«ãé©çšãããŸãã 次ã«ãæ¢åã®å€æ°ã«é¢é£ä»ããããŸãã
- ãªã¹ãå
å
è¡šèšã®äŸã®Python 2.xã€ã³ã¿ãŒããªã¿ãŒãšPython 3.xã€ã³ã¿ãŒããªã¿ãŒã®çµæã®éãã¯ã Python 3.0ã®æ°æ©èœããã¥ã¡ã³ãã«èšèŒãããŠããå€æŽã䜿çšããŠèª¬æã§ããŸãã
ãæ§æ圢åŒ[... for var in item1, item2, ...]
ããªã¹ãã®çæã§ã¯ãµããŒããããªããªããŸããã 代ããã«[... for var in (item1, item2, ...)]
䜿çšããŠãã ããã ãŸãããªã¹ãçæã«ã¯ç°ãªãã»ãã³ãã£ã¯ã¹ãããããšã«æ³šæããŠãã ããã list()
ã³ã³ã¹ãã©ã¯ã¿ãŒå
ã®çæåŒã«é¢ããŠã¯æ§æç³ã«è¿ããããç¹ã«ã«ãŒãå¶åŸ¡å€æ°ãåšå²ã®ã¹ã³ãŒãã«æŒããããšã¯ãããŸããã
äžç®äžŠã¹ãæåã®è©Šè¡ã§Xãåã€
# Let's initialize a row row = [""]*3 #row i['', '', ''] # Let's make a board board = [row]*3
çµæïŒ
>>> board [['', '', ''], ['', '', ''], ['', '', '']] >>> board[0] ['', '', ''] >>> board[0][0] '' >>> board[0][0] = "X" >>> board [['X', '', ''], ['X', '', ''], ['X', '', '']]
ãããã3ã€ã®Xã¯å²ãåœãŠãŸããã§ãããïŒ
説æ
ãã®èŠèŠåã¯ã row
å€æ°ãåæåããããšãã«ã¡ã¢ãªã§äœãèµ·ãããã説æããŠããŸãã

board
row
ãä¹ç®ããŠåæåããããšãããã¯ã¡ã¢ãªå
ã§çºçããŸãïŒ board[0]
ã board[1]
ããã³board[2]
åèŠçŽ ã¯ã row
æå®ãããåããªã¹ããžã®ãªã³ã¯ã§ãïŒã

å¯å€ã®ããã©ã«ãåŒæ°ã«æ³šæããŠãã ãã
def some_func(default_arg=[]): default_arg.append("some_string") return default_arg
çµæïŒ
>>> some_func() ['some_string'] >>> some_func() ['some_string', 'some_string'] >>> some_func([]) ['some_string'] >>> some_func() ['some_string', 'some_string', 'some_string']
説æ
- Pythonã§ã¯ãå¯å€ã®ããã©ã«ãåŒæ°ã¯å®éã«ã¯ãã¹ãŠã®é¢æ°åŒã³åºãã§åæåãããããã§ã¯ãããŸããã 代ããã«ãæ°ããå²ãåœãŠãããå€ãããã©ã«ãå€ãšããŠäœ¿çšãããŸãã
some_func
åŒæ°ãšããŠæ瀺çã«[]
ãæž¡ããå Žåã default_arg
ããã©ã«ãå€ãšäžç·ã«äœ¿çšãdefault_arg
ãªãã£ããããé¢æ°ã¯äºæãããã®ãè¿ããŸããã
def some_func(default_arg=[]): default_arg.append("some_string") return default_arg
çµæïŒ
>>> some_func.__defaults__ #This will show the default argument values for the function ([],) >>> some_func() >>> some_func.__defaults__ (['some_string'],) >>> some_func() >>> some_func.__defaults__ (['some_string', 'some_string'],) >>> some_func([]) >>> some_func.__defaults__ (['some_string', 'some_string'],)
- å¯å€åŒæ°ã«ãããã°ãåé¿ããæšæºçãªæ¹æ³ã¯ãããã©ã«ãå€ãšããŠ
None
ãå²ãåœãŠããã®åŒæ°ã«å¯Ÿå¿ããé¢æ°ã«å€ãæž¡ããããã©ããã確èªããããšã§ãã äŸïŒ
def some_func(default_arg=None): if not default_arg: default_arg = [] default_arg.append("some_string") return default_arg
ãªãã©ã³ãã¯åãã§ãããã¹ããŒãªãŒãç°ãªããŸã
1ã
a = [1, 2, 3, 4] b = a a = a + [5, 6, 7, 8]
çµæïŒ
>>> a [1, 2, 3, 4, 5, 6, 7, 8] >>> b [1, 2, 3, 4]
2ã
a = [1, 2, 3, 4] b = a a += [5, 6, 7, 8]
çµæïŒ
>>> a [1, 2, 3, 4, 5, 6, 7, 8] >>> b [1, 2, 3, 4, 5, 6, 7, 8]
説æ
- åŒ
a += b
ã¯ã a = a + b
ãšåãåäœãããŸããã - åŒ
a = a + [5,6,7,8]
ã¯ãæ°ãããªããžã§ã¯ããçæãã b
å€æŽããã«åç
§ãå²ãåœãŠãŸãã - åŒ
a + =[5,6,7,8]
å®éã«extendé¢æ°ã«ãããã³ã°ããã a
ãšb
ããã®å Žã§å€æŽãããåããªããžã§ã¯ããæãããã«ãªããžã§ã¯ããæäœããŸãã
äžå€ã®å€æŽ
some_tuple = ("A", "tuple", "with", "values") another_tuple = ([1, 2], [3, 4], [5, 6])
çµæïŒ
>>> some_tuple[2] = "change this" TypeError: 'tuple' object does not support item assignment >>> another_tuple[2].append(1000) #This throws no error >>> another_tuple ([1, 2], [3, 4], [5, 6, 1000]) >>> another_tuple[2] += [99, 999] TypeError: 'tuple' object does not support item assignment >>> another_tuple ([1, 2], [3, 4], [5, 6, 1000, 99, 999])
ããããã¿ãã«ã¯äžå€ã§ããã...
説æ
- https://docs.python.org/2/reference/datamodel.htmlããåŒçš
äžå€ã®ã·ãŒã±ã³ã¹åãªããžã§ã¯ãã¯ãäœæåŸã«å€æŽã§ããŸããã ãªããžã§ã¯ãã«ä»ã®ãªããžã§ã¯ããžã®åç
§ãå«ãŸããŠããå Žåããããã®ãªããžã§ã¯ãã¯å€æŽå¯èœã§ãããå€æŽã§ããŸãã ãã ããäžå€ãªããžã§ã¯ãã«ãã£ãŠçŽæ¥åç
§ããããªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã¯å€æŽã§ããŸããã
+=
æŒç®åã¯ããªã¹ãããã®å Žã§å€æŽããŸãã ã¢ã€ãã ã®å²ãåœãŠã¯æ©èœããŸããããäŸå€ãçºçããå Žåãã¢ã€ãã ã¯æ¢ã«ãã®å Žæã§å€æŽãããŠããŸãã
ã¹ã³ãŒãã§å®çŸ©ãããŠããªãå€æ°ã䜿çšãã
a = 1 def some_func(): return a def another_func(): a += 1 return a
çµæïŒ
>>> some_func() 1 >>> another_func() UnboundLocalError: local variable 'a' referenced before assignment
説æ
- ã¹ã³ãŒãå
ã®å€æ°ãå²ãåœãŠããšããã®ã¹ã³ãŒãã«å¯ŸããŠããŒã«ã«ã«ãªããŸãã ã€ãŸããaã¯
another_func
ã®ã¹ã³ãŒãã®ããŒã«ã«å€æ°ã«ãªããŸããããšã©ãŒãã¹ããŒããåãé åã§ä»¥åã«åæåãããŠããŸããã§ããã - Pythonã§åå空éãšã¹ã³ãŒã解決ãã©ã®ããã«æ©èœãããã«ã€ããŠè©³ããã¯ã ãã®çããŠãã°ããããã¥ãŒããªã¢ã«ããèªã¿ãã ããã
another_func
global
ã䜿çšãa
ã another_func
å€éšã¹ã³ãŒãå€æ°a
ãå€æŽããŸãã
def another_func() global a a += 1 return a
çµæïŒ
>>> another_func() 2
å€éšã¹ã³ãŒãããã®å€æ°ã®æ¶å€±
e = 7 try: raise Exception() except Exception as e: pass
çµæïŒPython 2.xïŒïŒ
>>> print(e) # prints nothing
çµæïŒPython 3.xïŒïŒ
>>> print(e) NameError: name 'e' is not defined
説æ
åºæ
ã¿ãŒã²ããas
äŸå€ãã¹ããŒãããå Žåã except
ç¯ã®æåŸã§ã¯ãªã¢ãããŸãã ãããã
except E as N: foo
ã«å€æãããŸãã
except E as N: try: foo finally: del N
ããã¯ãäŸå€ãå¥ã®ååã«å²ãåœãŠãŠã except
å¥ã®åŸã«åç
§ã§ããããã«ããå¿
èŠãããããšãæå³ããŸãã äŸå€ã¯ããã¬ãŒã¹ããã¯ãæ·»ä»ãããŠããããã¯ãªã¢ãããŸãããã®çµæãã¹ã¿ãã¯ãã¬ãŒã ã§åç
§ãµã€ã¯ã«ã圢æããã次ã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ç¹°ãè¿ããçµäºãããŸã§ããã®ãã¬ãŒã ã®ãã¹ãŠã®ãã±ãŒã«ãä¿æãããŸãã
Python . , e - except
. , . :
def f(x): del(x) print(x)
x = 5
y = [5, 4, 3]
**:**
fïŒxïŒ
UnboundLocalError: local variable 'x' referenced before assignment
f(y)
UnboundLocalError: local variable 'x' referenced before assignment
x
5
y
[5, 4, 3]
- Python 2.x e `Exception()`, .
(Python 2.x):
>>> e Exception() >>> print e # Nothing is printed!
Return
def some_func(): try: return 'from_try' finally: return 'from_finally'
çµæïŒ
>>> some_func() 'from_finally'
try
tryâŠfinally
return
, break
continue
, finally
.return
. finally
, return
, finally
, .
True False
True = False if True == False: print("I've lost faith in truth!")
çµæïŒ
I've lost faith in truth!
- Python
bool
( 0 false 1 true). True
, False
bool
, - True
False
â . - Python 3 , , Python 3.x!
>>> True is False == False False >>> False is False is False True >>> 1 > 0 < 1 True >>> (1 > 0) < 1 False >>> 1 > (0 < 1) False
https://docs.python.org/2/reference/expressions.html#not-in
, a, b, c, ..., y, z â , op1, op2, ..., opN â , a op1 b op2 c⊠y opN z op1 b b op2 c ⊠y opN z, , .
, a == b == c 0 <= x <= 100
.
False is False is False
(False is False) and (False is False)
True is False == False
True is False and False == False
, ( True is False
) False
, False
.1 > 0 < 1
1 > 0
and 0 < 1
, True
.(1 > 0) < 1
True < 1
>>> int(True) 1 >>> True + 1 #not relevant for this example, but just for fun 2
1 < 1
False
1ã
x = 5 class SomeClass: x = 17 y = (x for i in range(10))
çµæïŒ
>>> list(SomeClass.y)[0] 5
2ã
x = 5 class SomeClass: x = 17 y = [x for i in range(10)]
(Python 2.x):
>>> SomeClass.y[0] 17
(Python 3.x):
>>> SomeClass.y[0] 5
- , , , .
- .
- Python 3.X (list comprehensions) .
None
some_list = [1, 2, 3] some_dict = { "key_1": 1, "key_2": 2, "key_3": 3 } some_list = some_list.append(4) some_dict = some_dict.update({"key_4": 4})
çµæïŒ
>>> print(some_list) None >>> print(some_dict) None
, / (sequence/mapping objects) list.append
, dict.update
, list.sort
. ., None
. â , ( )
WTF, , Python . .
a = float('inf') b = float('nan') c = float('-iNf') #These strings are case-insensitive d = float('nan')
çµæïŒ
>>> a inf >>> b nan >>> c -inf >>> float('some_other_string') ValueError: could not convert string to float: some_other_string >>> a == -c #inf==inf True >>> None == None # None==None True >>> b == d #but nan!=nan False >>> 50/a 0.0 >>> a/a nan >>> 23 + b nan
'inf'
'nan'
â ( ). float
, , , «» « ».
1ã
class A: x = 1 class B(A): pass class C(A): pass
çµæïŒ
>>> Ax, Bx, Cx (1, 1, 1) >>> Bx = 2 >>> Ax, Bx, Cx (1, 2, 1) >>> Ax = 3 >>> Ax, Bx, Cx (3, 2, 3) >>> a = A() >>> ax, Ax (3, 3) >>> ax += 1 >>> ax, Ax (4, 3)
2ã
class SomeClass: some_var = 15 some_list = [5] another_list = [5] def __init__(self, x): self.some_var = x + 1 self.some_list = self.some_list + [x] self.another_list += [x]
çµæïŒ
>>> some_obj = SomeClass(420) >>> some_obj.some_list [5, 420] >>> some_obj.another_list [5, 420] >>> another_obj = SomeClass(111) >>> another_obj.some_list [5, 111] >>> another_obj.another_list [5, 420, 111] >>> another_obj.another_list is SomeClass.another_list True >>> another_obj.another_list is some_obj.another_list True
some_list = [1, 2, 3] try: # This should raise an ``IndexError`` print(some_list[4]) except IndexError, ValueError: print("Caught!") try: # This should raise a ``ValueError`` some_list.remove(4) except IndexError, ValueError: print("Caught again!")
(Python 2.x):
Caught! ValueError: list.remove(x): x not in list
(Python 3.x):
File "<input>", line 3 except IndexError, ValueError: ^ SyntaxError: invalid syntax
some_list = [1, 2, 3] try: # This should raise a ``ValueError`` some_list.remove(4) except (IndexError, ValueError), e: print("Caught again!") print(e)
(Python 2.x):
Caught again! list.remove(x): x not in list
(Python 3.x):
File "<input>", line 4 except (IndexError, ValueError), e: ^ IndentationError: unindent does not match any outer indentation level
some_list = [1, 2, 3] try: some_list.remove(4) except (IndexError, ValueError) as e: print("Caught again!") print(e)
çµæïŒ
Caught again! list.remove(x): x not in list
?
from datetime import datetime midnight = datetime(2018, 1, 1, 0, 0) midnight_time = midnight.time() noon = datetime(2018, 1, 1, 12, 0) noon_time = noon.time() if midnight_time: print("Time at midnight is", midnight_time) if noon_time: print("Time at noon is", noon_time)
çµæïŒ
('Time at noon is', datetime.time(12, 0)) The midnight time is not printed.
Python 3.5 datetime.time
False
, UTC. - if obj
: , obj
null «».
?
1ã
# A simple example to count the number of boolean and # integers in an iterable of mixed data types. mixed_list = [False, 1.0, "some_string", 3, True, [], False] integers_found_so_far = 0 booleans_found_so_far = 0 for item in mixed_list: if isinstance(item, int): integers_found_so_far += 1 elif isinstance(item, bool): booleans_found_so_far += 1
çµæïŒ
>>> booleans_found_so_far 0 >>> integers_found_so_far 4
2ã
another_dict = {} another_dict[True] = "JavaScript" another_dict[1] = "Ruby" another_dict[1.0] = "Python"
çµæïŒ
>>> another_dict[True] "Python"
- â
int
>>> isinstance(True, int) True >>> isinstance(False, int) True
True
1
, False
â 0
.
>>> True == 1 == 1.0 and False == 0 == 0.0 True
- StackOverflow.
Python- .
t = ('one', 'two') for i in t: print(i) t = ('one') for i in t: print(i) t = () print(t)
çµæïŒ
one two o n e tuple()
t = ('one',)
t = 'one'
, ( ), , t
str
.- () â ,
tuple
.
For ?
@MittalAshok.
some_string = "wtf" some_dict = {} for i, some_dict[i] in enumerate(some_string): pass
çµæïŒ
>>> some_dict # An indexed dict is created. {0: 'w', 1: 't', 2: 'f'}
for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
exprlist
â . , {exprlist} = {next_value}
. @tukkek:
for i in range(4): print(i) i = 10
çµæïŒ
0 1 2 3
, ?
i = 10
- Python. , ( range(4)
), ( i
).enumerate(some_string)
i
( A
) some_string
. ( ) i
some_dict
. :
>>> i, some_dict[i] = (0, 'w') >>> i, some_dict[i] = (1, 't') >>> i, some_dict[i] = (2, 'f') >>> some_dict
not
@MostAwesomeDude.
x = True y = False
çµæïŒ
>>> not x == y True >>> x == not y File "<input>", line 1 x == not y ^ SyntaxError: invalid syntax
- , Python
==
, not
. not x == y
not (x == y)
, not (True == False)
, True
.x == not y
SyntaxError
, (x == not) y
, x == (not y)
, .- ,
not
â not in
( ==
not in
), not
in
, SyntaxError.
?
PiaFraus .
a, b = a[b] = {}, 5
çµæïŒ
>>> a {5: ({...}, 5)}
(target_list "=")+ (expression_list | yield_expression)
åæ§ã«ïŒ
( , , ) , .
+
(target_list "=")+
, . a
, b
a[b]
( , , {}
, 5
).- .
{}
, 5
a
, b
, a = {}
b = 5
. a
{}
, .- â
a[b]
( , , a
b
. , a
{}
b
5
). 5
({}, 5)
, ( {...}
, a
). :
>>> some_list = some_list[0] = [0] >>> some_list [[...]] >>> some_list[0] [[...]] >>> some_list is some_list[0] [[...]]
( a[b][0]
, a
)
a, b = {}, 5 a[b] = a, b
, a[b][0]
,
a >>> a[b][0] is a True
Join()
â (string operation), (list operation). .
: join()
â , (, , ). , . , API list
.- , :
[] = ()
( tuple
list
)'a'[0][0][0][0][0]
, Python .3 --0-- 5 == 8 --5 == 5
True
.
- Python . , 65 536 . Python , 2^16 . , , 65 536 (: 2^18 !):
import dis exec(""" def f():* """ + """ """.join(["X"+str(x)+"=" + str(x) for x in range(65539)])) f() print(dis.dis(f))
- Python (, !). , - Global Interpreter Lock Python . .
- (list slicing) :
>>> some_list = [1, 2, 3, 4, 5] >>> some_list[111:] []
! :) CONTRIBUTING.md .
䟿å©ãªãªã³ã¯
⢠https://www.youtube.com/watch?v=sH4XF6pKKmk
⢠https://www.reddit.com/r/Python/comments/3cu6ej/what_are_some_wtf_things_about_python
⢠https://sopython.com/wiki/Common_Gotchas_In_Python
⢠https://stackoverflow.com/questions/530530/python-2-x-gotchas-and-landmines
⢠https://stackoverflow.com/questions/1011431/common-pitfalls-in-python ( StackOverflow , Python.)