python一些公共方法

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ù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容