ptyhon之路day5遞歸與二分法

本節內容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)
View Code

 

 

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模塊的使用

相關文章
相關標籤/搜索