本節內容python
1.協程函數(本次先嵌入概念 瞭解)mysql
#yield:
#1:把函數的執行結果封裝好__iter__和__next__,即獲得一個迭代器
#2:與return功能相似,均可以返回值,但不一樣的是,return只能
#返回一次值,而yield能夠返回屢次值
#3:函數暫停與再繼續運行的狀態是有yield保存
# def func(count):
# print('start')
# while True:
# yield count
# count+=1
#
# g=func(10)
# # print(g)
# print(next(g))
#
# print(next(g))sql
2.遞歸oracle
#遞歸調用:在調用一個函數的過程當中,直接或間接地調用了函數自己app
#直接 def func(): print('from func') func() func() #間接 def foo(): print('from foo') bar() def bar(): print('from bar') foo() foo() age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=18 age(n)=age(n-1)+2 #n>1 age(1)=18 #n=1 def age(n): if n == 1: return 18 return age(n-1)+2 print(age(5)) #遞歸的執行分爲兩個階段: #1 遞推 #2 回溯 l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15,[16,[17,]],19]]]]]]] def search(l): for item in l: if type(item) is list: search(item) else: print(item) search(l)
3 二分法ide
#二分法 l = [1,2,5,7,10,31,44,47,56,99,102,130,240] def binary_search(l,num): print(l) #[10, 31] if len(l) > 1: mid_index=len(l)//2 #1 if num > l[mid_index]: #in the right l=l[mid_index:] #l=[31] binary_search(l,num) elif num < l[mid_index]: #in the left l=l[:mid_index] binary_search(l,num) else: print('find it') else: if l[0] == num: print('find it') else: print('not exist') return binary_search(l,32)
4 import 語句函數
#導入模塊幹了哪些事: #1 執行源文件 #2 以一個源文件的全局名稱空間 #3 在當前位置拿到一個模塊名,指向2建立的名稱空間 import spam money=100000000000 def read1(): print('from test') # print(spam.money) # print(spam.read1) # spam.read1() # spam.read2() spam.change() print(money) spam.read1() import spam as s1 print(s1.money) sql_type=input('sql_type: ') if sql_type == 'mysql': import mysql as sql elif sql_type == 'oracle': import oracle as sql sql.sqlparse() import sys print(sys) import spam print(spam)
5 from... import語句spa
#優勢:使用源文件內的名字時無需加前綴,使用方便 #缺點:容易與當前文件的名稱空間內的名字混淆 # from spam import money,read1,read2,change # money=0 # print(money) # print(read1) # # read1() # def read1():print('ok') # read2() # # money=10 # change() # print(money) # from spam import money as m # # print(m) from spam import * # print(_money) # read1() # print(read2) print(money) print(x) print(read1)
6 模塊搜索路徑code
import time import importlib import spam time.sleep(20) # import spam # print(spam.money) importlib.reload(spam) print(spam.money) import sys print('time' in sys.modules) import time print('time' in sys.modules) import sys import sys #結論: #注意:自定義的模塊名必定不要與python自帶的模塊名重名 #內存中--》內置模塊————》sys.path import sys # print(sys.path) sys.path.insert(0,r'C:\Users\Administrator\PycharmProjects\python18期週末班\day5\模塊\模塊的搜索路徑\aaa') import spam
7 區分python文件兩種用途協程
import os,sys x=1 def func1(): print('from m1') def func2(): print('from m2') def func3(): print('from m3') # print(__name__) #文件當作腳本運行時__name__等於__main__ #文件當作模塊被加載運行時__name__等於模塊名 if __name__ == '__main__': #當作腳本使用 func1() func2() func3() 看成模塊使用 import m1 # m1.func2() m1.func3()
8 包的導入
9 絕對導入與相對導入(只是在包裏面模塊沒有這個概念)
絕對導入指 的是包的頂級是根目錄
#實例 用法 from 包名.包名.文件名 import 函數或者變量名 from atm.bin.core import get(這裏get也能夠寫成* 是指對應文件全部能夠調用的名字)
缺點:當更名字的時候 須要修改相關的文件
相對導入
#相對導入 用法 from .bin.core import get #點表明當前目錄 from ..core import get 那麼若是把當前包移到其餘目錄下該如何應用 某個包下的功能呢? 這裏咱們介入sys import sys sys.path.append(r'要導入的文件路徑')
10 軟件開發規範
11 logging模塊的使用