sort和sorted
annotate_query = sorted(sub_query, key=lambda x: (-x['re_avg_max'],x[), reverse=True)
sort 和sorted的區(qū)別
[
{"re_avg_max":1,'field2':33},
{"re_avg_max:2}
]
my_list = [3, 1, 4, 2]
my_list.sort()
print(my_list) # 輸出:[1, 2, 3, 4]
sort 是列表的方法,用于原地排序列表本身,即修改列表的順序,而不返回新的排序結(jié)果。它沒有返回值,直接在原列表上進(jìn)行排序操作。
sorted 是內(nèi)置函數(shù),接受可迭代對象作為參數(shù),并返回一個新的已排序的列表,而不修改原始對象。它返回排序后的結(jié)果,不影響原始對象。
my_list = [3, 1, 4, 2]
sorted_list = sorted(my_list)
print(sorted_list) # 輸出:[1, 2, 3, 4]
print(my_list) # 輸出:[3, 1, 4, 2](原始列表不受影響)
sorted 函數(shù)還可以接受額外的參數(shù),例如 key 和 reverse,用于自定義排序規(guī)則或指定排序順序。
my_list = [3, 1, 4, 2]
sorted_list = sorted(my_list, reverse=True) # 降序排序
print(sorted_list) # 輸出:[4, 3, 2, 1]
可以按某個key去排序
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']
深拷貝和淺拷貝
其實python不推薦一邊生成,一邊改數(shù)據(jù),所以對于保存中間變量這種做法,最好是保存一個n的全局變量去存數(shù)據(jù)
python 可變的數(shù)據(jù)類型
dict/list
filter
Python內(nèi)建的filter()函數(shù)用于過濾序列。
和map()類似,filter()也接收一個函數(shù)和一個序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
例如,在一個list中,刪掉偶數(shù),只保留奇數(shù),可以這么寫:
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結(jié)果: [1, 5, 9, 15]
匿名函數(shù)
匿名函數(shù)有個限制,就是只能有一個表達(dá)式,不用寫return,返回值就是該表達(dá)式的結(jié)果。
用匿名函數(shù)有個好處,因為函數(shù)沒有名字,不必?fù)?dān)心函數(shù)名沖突。此外,匿名函數(shù)也是一個函數(shù)對象,也可以把匿名函數(shù)賦值給一個變量,再利用變量來調(diào)用該函數(shù):
f = lambda x: x * x
>>>f
--<function <lambda> at 0x101c6ef28>
>>>f(5)
25
同樣,也可以把匿名函數(shù)作為返回值返回,比如:
def build(x, y):
return lambda: x * x + y * y
裝飾函數(shù)
就是
@decorated function
def realfunction()
這個裝飾函數(shù)就在之前定義好了在這個real function前后干活,這樣有些通用的功能就能通過裝飾器定義,不用每次寫功能都重寫一次
本質(zhì)上,decorator就是一個返回函數(shù)的高階函數(shù)。所以,我們要定義一個能打印日志的decorator,可以定義如下:
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw) --這一行才是原來的函數(shù),上面那行是包著這個函數(shù)的前置執(zhí)行命令
return wrapper
@log
def now():
print('2015-3-25')
調(diào)用now()函數(shù),不僅會運(yùn)行now()函數(shù)本身,還會在運(yùn)行now()函數(shù)前打印一行日志:
>>> now()
call now():
2015-3-25
把@log放到now()函數(shù)的定義處,相當(dāng)于執(zhí)行了語句:
now = log(now)
由于log()是一個decorator,返回一個函數(shù),所以,原來的now()函數(shù)仍然存在,只是現(xiàn)在同名的now變量指向了新的函數(shù),于是調(diào)用now()將執(zhí)行新函數(shù),即在log()函數(shù)中返回的wrapper()函數(shù)。
wrapper()函數(shù)的參數(shù)定義是(*args, **kw),因此,wrapper()函數(shù)可以接受任意參數(shù)的調(diào)用。在wrapper()函數(shù)內(nèi),首先打印日志,再緊接著調(diào)用原始函數(shù)。