赞
踩
在我们学习 Python 的过程中,会发现有些程序的写法非常的巧妙。本篇文章是作者收集的一些很有用且经常能用到的 Python 技巧,部分为自己整理,部分摘自Python最佳实践指南。
本文会持续更新,欢迎收藏转发!
in
- >>> "123" in "23526"
- false
count
方法的使用- >>> "13263514115".count("1")
- 4
- >>> [1,1,2,3,4,4,5,2].count(1)
- 2
f-string
是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快。- >>> a = "zhangsan"
- >>> b = "lisi"
- >>> print(f"Hello,{a} and {b}")
- Hello,zhangsan and lisi
{v: k for k, v in some_dict.items()}
itertools
包中的 itertools.chain.from_iterable
轻松快速的辗平一个列表。- import itertools
- a_list = [[1, 2], [3, 4], [5, 6]]
- print(list(itertools.chain.from_iterable(a_list)))
- # Output: [1, 2, 3, 4, 5, 6]
-
- # or
- print(list(itertools.chain(*a_list)))
- # Output: [1, 2, 3, 4, 5, 6]
startswith()
方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。- >>> "123".startswith("1")
- True
- >>> a = [1,2,3]
- >>> b = a
- >>> b.append(4)
- >>> a
- [1, 2, 3, 4]
- >>> c = a[:]
- >>> c.append(5)
- >>> c
- [1, 2, 3, 4, 5]
- >>> a
- [1, 2, 3, 4]
- # 定义很长的字符串的时候,别像下面这样:
- >>> a = """how
- ... are
- ... you"""
- >>> a
- 'hownarenyou'
-
- # 最好像下面这样:
- >>> a = ("how "
- ... "are "
- ... "you")
- >>> a
- 'how are you'
ThreadPoolExecutor
和 ProcessPoolExecutor
。 前者将创建一个用户可以提交作业的工作线程池。后者以相同的方式工作,它使用多进程而不是多线程作为工作池,但只有可序列化的对象可以执行并返回。 由于GIL的工作原理,一个很好的经验法则是当执行涉及很多阻塞(如通过网络发出请求)的任务时 使用 ThreadPoolExecutor
,而对高计算开销的任务使用 ProcessPoolExecutor
执行器。- # 正确示范,注意默认参数要设置为None,以及方法开头的处理方式
- def append_to(element, to=None):
- if to is None:
- to = []
- to.append(element)
- return to
-
- # 错误示范
- def append_to(element, to=[]):
- to.append(element)
- return to
-
- my_list = append_to(12)
- print(my_list)
-
- my_other_list = append_to(42)
- print(my_other_list)
-
- # 输出结果:
- # [12]
- # [12, 42]
- # 原因:当函数被定义时,Python的默认参数就被创建一次,而不是每次调用函数的时候创建。
- # 所以如果使用一个可变默认参数并改变了它,之后所有调用此函数时该默认参数都已被改变。
- # 有时可以特地使用这种行为来维护函数调用间的状态,这通常用于编写缓存函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。