网站首页 > 基础教程 正文
这里我总结了15个关于python的骚技巧,实属提高工作效率、同事间吹牛利器,走过路过千万别错过,赶紧收藏起来吧。
1.巧用else语句(重要)
python的else 子句不仅能在 if 语句中使用,还能在 for、while 和 try 等语句中使用,这个语言特性不是什么秘密,但却没有得到重视。
for:
l=[1,2,3,4,5]
for i in l:
if i=='6':
print(666)
break
else:
print(999)
如果不这么实现,我们只能设置一个变量来记录了:
l=[1,2,3,4,5]
a=1
for i in l:
if i=='6':
print(666)
a=0
break
if a:
print(999)
while和for类似
看一下try:
try:
a()
except OSError:
#语句1
else:
#语句2
仅当 try 块中没有异常抛出时才运行 else 块。
总结一下else:
for:
仅当 for 循环运行完毕时(即 for 循环没有被 break 语句中止)才运行 else 块。
while:
仅当 while 循环因为条件为假值而退出时(即 while 循环没有被break 语句中止)才运行 else 块。
try:
仅当 try 块中没有异常抛出时才运行 else 块。
2. map()
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。(重点理解)
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:
>>> def f(x):
... return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
3.sorted
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
#可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
我们再看一个字符串排序的例子:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']
默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
现在,我们提出排序应该忽略大小写,按照字母顺序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为忽略大小写排序即可。忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。
这样,我们给sorted传入key函数,即可实现忽略大小写的排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']
从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。
sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。
4.split
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串。
语法:
str.split(str="", num=string.count(str))
简化:
str.split("")
5.reduce
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
简单例子:
>>> from functools import reduce
>>> def fn(x, y):
return x * 10 + y
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
结合一下,我们可以自己写出int()函数
from functools import reduce
a={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def charnum(s):
return a[s]
def strint(s):
return reduce(lambda x, y: x * 10 + y, map(charnum, s))
6.python自省
这个也是python彪悍的特性.自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().
7.python容器
列表:元素可变(任何数据类型),有序(可索引),append/insert/pop;
元组:元素不可变,但元素中的可变元素是可变的;有序(可索引);而且元组可以被散列,例如作为字典的键。
集合:无序(不可被索引)、互异
字典:无序,键值对(key:value),key唯一不可重复
8.调试脚本
我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,例如:
import pdb
pdb.set_trace()
9.多行字符串
这个比c方便多了,c打上换行符再加上转义,真的很难受
a='''dvfssd
fsdfdsfsd
dsdsfbfdfasf
afasfaf'''
print(a)
10.in判断
可以直接用来判断某个变量是否在列表中
我们可以使用下面的方式来验证多个值:
if m in [1,3,5,7]:
而不是:
if m==1 or m==3 or m==5 or m==7:
11.四种翻转字符串/列表的方式
*翻转列表本身
testList = [1, 3, 5]
testList.reverse()
print(testList)
#-> [5, 3, 1]
*在一个循环中翻转并迭代输出
for element in reversed([1,3,5]):
print(element)
#1-> 5
#2-> 3
#3-> 1
* 一行代码翻转字符串
"Test Python"[::-1]
#输出 “nohtyP tseT”
*使用切片翻转列表
[1, 3, 5][::-1]
#输出 [5,3,1]。
12.拼接字符串
众所周知,python中字符串可以相加:
a="i "
b="love "
c="you"
print(a+b+c)
拼接列表中的所有元素为一个字符串
l=['a','b','c']
print(''join(l))
#以join左边的字符做分割
13.字典推导
Python不光列表用推导式,字典/集合也有
#列表
l=[[0 for i in range(4)] for i in range(4)]#生成二维列表
print(l)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
testDict = {i: i * i for i in xrange(10)}
testSet = {i * 2 for i in xrange(10)}
print(testSet)
print(testDict)
#set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
14.返回多个值
并没有太多编程语言支持这个特性,然而 Python 中的方法确实(可以)返回多个值
def a():
return 1,2,3,4,5
15.开启文件共享
Python 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:
python3 -m http.server
上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。
感谢阅读!
猜你喜欢
- 2024-11-15 站长在线Python精讲:使用正则表达式的sub()方法替换字符串详解
- 2024-11-15 Python使用K-means实现文本聚类(基于kmeans的文本聚类算法)
- 2024-11-15 如何用Python轻松分割大型文本文件:一个有效的文件处理脚本解析
- 2024-11-15 python实现pdf转word(python如何把pdf转成excel)
- 2024-11-15 Python协程 & 异步编程(asyncio) 入门介绍
- 2024-11-15 一篇文章带你深度解析Python线程和进程
- 2024-11-15 Python 字符串方法(删除,拆分,拼接)用途:查阅
- 2024-11-15 音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南
- 2024-11-15 python的re.spilt使用案例(python re. split)
- 2024-11-15 如何用Python高效地分割PDF文件:一个简洁的PyPDF2脚本解析
- 06-18单例模式谁都会,破坏单例模式听说过吗?
- 06-18Objective-c单例模式的正确写法「藏」
- 06-18单例模式介绍(单例模式都有哪些)
- 06-18前端设计-单例模式在实战中的应用技巧
- 06-18PHP之单例模式(php单例模式连接数据库)
- 06-18设计模式:单例模式及C及C++实现示例
- 06-18python的单例模式(单例 python)
- 06-18你认为最简单的单例模式,东西还挺多
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)