python note 14 其他函式及遞迴應用

2022-08-19 14:24:11 字數 3851 閱讀 4335

1、repr用法

print("你好"

) # 使用者看著舒服

print(repr("你好

")) # 真實的字串表示形式(正式的)

print("我叫%r" % "周潤發") # %r 實際上呼叫的是repr()

print(repr("你好, 我\'叫周潤發")) # 程式中內部儲存的內容, 這個是給程式設計師看的

2、lambda匿名函式用法

# 普通的正常的函式

def

func(n):

return n *n

ret = func(9)

print(ret)

# 匿名函式, 語法: lambda 引數: 返回值

a = lambda n : n *n

ret = a(9)

print

(ret)

#print(a(5)) # 函式的名字可以認為是a

#print(func.__name__) # 檢視函式的名字

#print(a.__name__) # __name__的值都是

def

func(a, b):

return a +b

x = lambda a, b: a+b

print(x(1,2))

# 匿名函式, 給函式傳遞2給引數. 返回最大值

fn = lambda *args: max(args) #

單行函式

print(fn(1,2,5,2,3,4,156,3,2,2,4,5,56,34,34,34,34,88))

3、sorted排序函式用法

lst = ["

聊齋", "

西遊記", "

三國演義

", "

葫蘆娃", "

水滸傳", "

年輪", "亮劍"

]def

func(s):

return len(s)%2ll = sorted(lst, key=func)

print(ll)

lst =[,,

,,

]ll = sorted(lst, key=lambda el: len(el['

name

']), reverse=true)#

倒序排列

print(ll)

4、filter篩選函式用法

lst = ["

張無忌", "

張鐵林", "

趙一寧", "

石可心","

馬大帥"

]def

func(el):

if el[0] == '張'

:

return false #

不想要的

else

:

return true #

想要的#

篩選,f = filter(lambda el: el[0]!="

張", lst) #

將lst中的每一項傳遞給func, 所有返回true的都會保留, 所有返回false都會被過濾掉

print("

__iter__

"in dir(f)) #

判斷是否可以進行迭代

for e in

f:

print(e)

lst =[,,

,] f = filter(lambda el: el['

score

'] < 60, lst)

print(list(f))

5、map對映函式應用

lst = [1,4,7,2,5,8]

deffunc(el):

return el**2m = map(lambda el: el**2, lst) #

把後面的可迭代物件中的每乙個元素傳遞給function, 結果就是function的返回值

print(list(m))

# 分而治之

#

map(func1, map(func2, map(func3 , lst)))

# 水桶效應, zip()

lst1 = [1, 3, 5, 7]

lst2 = [2, 4, 6, 8, 10]

m = map(lambda x, y, z: x + y+ z, lst1, lst2, [5,1,2,3,6])

print(list(m))

6、遞迴函式

# 遞迴深度. 你可以自己掉用自己的次數,

# 官方文件中遞迴最大深度是1000. 在這之前就會給你報錯

# 遍歷 d:/sylar資料夾, 列印出所有的檔案和普通檔案的檔名

import

osdef func(filepath, n): #

d:/sylar/

#1,開啟這個資料夾

files =os.listdir(filepath)

#2. 拿到每乙個檔名

for file in files: #

檔名#

3. 獲取到路徑

f_d = os.path.join(filepath, file) #

d:/sylar/檔名/

#4. 判斷是否是資料夾

ifos.path.isdir(f_d):

#5. 如果是資料夾. 繼續再來一遍

print("

\t"*n, file,"

:") #

列印檔案名

func(f_d, n + 1)

else: #

不是資料夾. 普通檔案

print("

\t"*n, file)

func(

"d:/sylar

",0)

7、二分法查詢

# 遞迴來完成二分法

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]

deffunc(n, left, right):

if left <= right: #

邊界print("哈哈"

) mid = (left + right)//2

if n >lst[mid]:

left = mid + 1

return func(n, left, right) #

遞迴 遞迴的入口

elif n right = mid - 1

#深坑. 函式的返回值返回給呼叫者

return func(n, left, right) #

遞迴elif n ==lst[mid]:

print("

找到了"

)

return

mid

#return # 通過return返回. 終止遞迴

else

:

print("

沒有這個數

") #

遞迴的出口

return -1 #

1, 索引+ 2, 什麼都不返回, none

#找66, 左邊界:0, 右邊界是:len(lst) - 1

ret = func(70, 0, len(lst) - 1)

print(ret) #

不是none

Data Mining (14)其他知識

該部落格主要介紹資料探勘的一些其他的相關知識,包括但不限於資料庫 資料倉儲 olap模型等。olap 多維資料模型 資料倉儲的維度建模 w.h.inmon把資料倉儲定義為 乙個面向主題的 整合的 穩定的 隨時間變化的資料的集合,以用於支援管理決策過程 資料倉儲 操作型資料庫 面向主題 面向應用 容量...

一,用好filter,map,和其他高階便利函式

const arrcontainsemptyval 3,4,5,2,3,undefined,null,0,const compact arr arr.filter boolean console.log compact arrcontainsemptyval 問題二 將陣列中的 vip 使用者餘額加...

Visual C 中呼叫其他應用程式的方法(函式)

本文所有程式在visual studio.net 2003 c 環境下編寫,編譯過程沒有錯誤。現在都使用visual studio 2005了。不知道還能編譯通過不 三個sdk函式winexec,shellexecute,createprocess實現呼叫其他程式的方法 visual c中呼叫其他應...