1. 程式人生 > >遞歸,匿名函數,內置函數

遞歸,匿名函數,內置函數

eval 方法 之間 nbsp int() 當前 結果 function --

帶參裝飾器 Send 原理

send原理
1.send發生信息給當前停止的yield
2.再去調用__next__()方法,生成器接著往下指向,返回下一個yield值並停止

‘‘‘
1.繁瑣版
variety=[‘黃連‘,‘茯苓‘,‘半夏‘,‘杜若‘,‘連翹‘,‘蘇葉‘]
def namer(variety):
print(‘%s滿眼都是六便士‘%variety[0])
print(‘%s卻擡頭看見了月亮‘%variety[0])
name=yield variety[0]

print(‘%s聽聞%s滿眼都是六便士‘%(name,variety[1]))
print(‘%s擡頭看見了月亮‘ % variety[1])


name = yield variety[1]

print(‘%s聽聞%s滿眼都是六便士‘ % (name, variety[2]))
print(‘%s擡頭看見了月亮‘ % variety[2])
name = yield variety[2]

obj = namer(variety)
# obj為剛開始的藥品
q=obj.__next__()
# 黃連
print(‘------------------------‘)
q=obj.send(q)
print(‘------------------------‘)
q=obj.send(q)
‘‘‘
‘‘‘
簡化版
variety=[‘黃連‘,‘茯苓‘,‘半夏‘,‘杜若‘,‘連翹‘,‘蘇葉‘]


def namer(variety):
for i in range(len(variety)):
if i == 0:
print(‘%s滿眼都是六便士‘%variety[0])
else:
print(‘%s聽聞%s滿眼都是六便士‘% (name,(variety[i])) )
print(‘%s擡頭看見了月亮‘%variety[i])
name=yield variety[i]
obj=namer(variety)
for i in range(len(variety)):
if i == 0:

q=obj.__next__()
else:
q=obj.send(q)
print(‘-------------‘)
‘‘‘

遞歸:

函數直接或間接調用本身,都稱之為遞歸

回溯:找尋答案的過程

遞推:推出結果的過程

前提條件:

1.遞歸必須有出口

2.遞歸回溯遞推的條件一定有規律

import sys
print(sys.getrecursionlimit())
# 獲取最大遞歸層數
sys.setrecursionlimit(100)
# 設置最大遞歸層數
print(sys.getrecursionlimit())
‘‘‘
‘‘‘
遞歸
count=0
def f():
global count
count +=1
print(count)
f()

n的階乘
5! =5*4*3*2*1=120
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1
def jiecheng(n):
if n == 1 or n == 0:
return 1
j = n*jiecheng(n-1)
return j
res=jiecheng(100)
print(res)

f()

ef fn(*args, **kwargs):

函數體

return ‘返回值‘

匿名函數:

1. 匿名函數沒有函數名

2.匿名函數的關鍵字采用lambda

3.關鍵字 lambda 與標識函數功能體 : 之間一定是參數,所以省略()

4.匿名還是沒有函數體,只有返回值,所以函數體和返回值的return關鍵字都省略了

lambda *args, **kwargs: ‘返回值‘

註意:

1. 參數的使用和有名函數一樣,六種形參都支持

2.返回值必須明確成一個值,可以為單個值對象,也可以為一個容器對象

a = lambda *args, **kwargs: ‘返回值1‘, ‘返回值2‘

print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, ‘返回值2‘)

# 返回值1

print(a[0]())

正確返回兩個值

lambda *args, **kwargs:( ‘返回值1‘, ‘返回值2‘

max結合匿名函數工作原理

1.max內部會遍歷iter,將遍歷結果一一傳給lambda的參數x

2.依據lambda的返回值作為比較條件,得到最大條件下的那個遍歷值

3.對外返回最大的遍歷值

max(iter, lambda x: x)

min工作原理一樣,得到的是最小值

map 映射

dic={
‘qwe‘:8,
‘asd‘:4
}
res=map(lambda k: (k,dic[k]*2),dic)
print(list(res))

map(lambda x: x * 2, [3, 1, 2]) # 將遍歷結果映射為任意類型值 [6, 2, 4]

reduce合並

from functools import reduce
res=reduce(lambda x , y: x+y, [5,92,54,1,3,])
print(res)
res=reduce(lambda x , y: x*y, [5,92,54,1,3,])
print(res)
print(sum([2,6,9,5,8,6,]) )

常用的內置函數

1.與類型相關的

list() str() ord() chr() bool() int() ...

print(ord(‘A‘))

print(chr(97))

2.進制轉化

print(bin(10)) # 1010

print(oct(10)) # 12

print(hex(10)) # a

print(0b1111) # 15

print(0o10) # 8

print(0x11) # 17

from functools import reduce

3.常用操作類的

# range() len() iter() next() enumerate() id() type() print() input() open()

4.原義字符串

print(r‘a\nb‘)

print(ascii(‘a\nb‘))

print(repr(‘a\nb‘))

5.數學相關運算

abs() sum() max() min() pow() sorted()

print(abs(-1))

print(pow(2, 3)) # 2**3

print(pow(2, 3, 3)) # 2**3%3

dic = {

‘owen‘: (1, 88888),

‘zero‘: (2, 66666),

‘tom‘: (3, 77777),

}

res = sorted(dic, key=lambda k: dic[k][1])

print(res) # [‘zero‘, ‘tom‘, ‘owen‘]

res = sorted(dic, key=lambda k: dic[k][1], reverse=True)

print(res) # [‘owen‘, ‘tom‘, ‘zero‘]

6.獲取幫助

help(dict)

7.執行字符串: eval() exec()

8.反射:getattr() setattr() delattr() hasattr()

9.面向對象的裝飾器:classmethod() staticmethod()

10.面向對象的其他:super() globals() locals()

print(globals())

def fn():

a = 10

b = 20

def inner(): pass

print(globals()) 以字典類型返回當前位置的全部全局變量

print(locals()) 以字典類型返回當前位置的全部局部變量

fn()

遞歸,匿名函數,內置函數