Skip to content

Commit

Permalink
python modules
Browse files Browse the repository at this point in the history
  • Loading branch information
timeface authored and timeface committed Oct 31, 2018
1 parent 476439e commit 40be29e
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
42 changes: 40 additions & 2 deletions generator/gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
##这里的语句会被执行吗
##这里的语句会被执行吗 YES
print('element',element)
yield element
except TypeError:
Expand All @@ -27,4 +27,42 @@ def error():
lies = [1,2,[3,4]]
gen = flatten(lies)
for i in gen:
print('print', i)
print('print', i)


##八皇后问题。generator的形式。
def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False

def queens(num=8, state=()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
##base case
yield (pos,)
else:
##recursive case
for result in queens(num, state + (pos,)):
## result is only a tuple
## iterator queens has only one element !!!!
yield (pos,) + result
'''
1 -> (4,3,2,1)
2 -> (4,3,2)
3 -> (4,3)
4 -> (4,)
当下一次next(genQueen)的时候, next 应该是从 最深层的yield后面开始执行,不然就是逻辑错误。。。
也就是所generator function被调用的时候,系统是会 保留其调用的堆栈的,尽管经过一层层的yield。
也就是说yield是可以穿越调用栈,但是不用回退堆栈的!!!! 是不是像C语言找那个的 setjump 的作用呢???
'''

genQueen = queens(5)
print( next(genQueen) )
print( next(genQueen) )
print( next(genQueen) )
print( next(genQueen) )
print( len( list(genQueen) ) )
19 changes: 19 additions & 0 deletions modules/index.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'''
tell the python interpreter to find your module
>>> import sys
>>> sys.path.append("absolute_path/your_module_dir")
import-only-once !!!! 模块的缓存
>>> import importlib
>>> hello = importlib.reload(hello)
'''

def greet():
print('hello world')


if __name__ == "__main__":
## 不是被别的模块import
## 而是被当做程序执行
greet()

0 comments on commit 40be29e

Please sign in to comment.