python一些公共方法

sort和sorted

annotate_query = sorted(sub_query, key=lambda x: (-x['re_avg_max'],x[), reverse=True) 
sort 和sorted的区别
[
{"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 是列表的方法,用于原地排序列表本身,即修改列表的顺序,而不返回新的排序结果。它没有返回值,直接在原列表上进行排序操作
sorted 是内置函数,接受可迭代对象作为参数,并返回一个新的已排序的列表,而不修改原始对象。它返回排序后的结果,不影响原始对象

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 函数还可以接受额外的参数,例如 key 和 reverse,用于自定义排序规则或指定排序顺序。

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不推荐一边生成,一边改数据,所以对于保存中间变量这种做法,最好是保存一个n的全局变量去存数据
python 可变的数据类型
dict/list

filter

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

匿名函数

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

 f = lambda x: x * x
>>>f
--<function <lambda> at 0x101c6ef28>
>>>f(5)
25

同样,也可以把匿名函数作为返回值返回,比如:

def build(x, y):
    return lambda: x * x + y * y

装饰函数

就是

@decorated function
def realfunction()

这个装饰函数就在之前定义好了在这个real function前后干活,这样有些通用的功能就能通过装饰器定义,不用每次写功能都重写一次
本质上,decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator,可以定义如下:

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw) --这一行才是原来的函数,上面那行是包着这个函数的前置执行命令
    return wrapper
@log
def now():
    print('2015-3-25')

调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:

>>> now()
call now():
2015-3-25

把@log放到now()函数的定义处,相当于执行了语句:

now = log(now)
由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。

wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容