Python编程实用的10个小tips

今天每日一题暂停,给大家分享一些Python编程的小技巧!

1、打印引入模块的文件路径

如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:

import threading
import socket

print(threading)
print(socket)

#1- <module 'threading' from '/usr/lib/python2.7/threading.py'>
#2- <module 'socket' from '/usr/lib/python2.7/socket.py'>

2、调试脚本

我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:

import pdb
pdb.set_trace()

我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。

3、 开启文件分享

Python 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:

python3 -m http.server

上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。

4、一行代码计算任何数的阶乘

import functools
result = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(3)
print(result)

#-> 6

5、找到列表中出现最频繁的数

test = [1,2,3,4,2,2,3,1,4,4,4]
print(max(set(test), key=test.count))

#-> 4

6、重置递归限制

Python 限制递归次数到 1000,我们可以重置这个值:

import sys

x=1001
print(sys.getrecursionlimit())

sys.setrecursionlimit(x)
print(sys.getrecursionlimit())

#1-> 1000
#2-> 1001

请只在必要的时候采用上面的技巧。

7、检查一个对象的内存使用

在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:

import sys
x=1
print(sys.getsizeof(x))

#-> 28

8、 使用 __slots__ 来减少内存开支

你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用 __slots__ 类变量来在一定程度上减少内存开支。

import sys
class FileSystem(object):

   def __init__(self, files, folders, devices):
       self.files = files
       self.folders = folders
       self.devices = devices
print(sys.getsizeof( FileSystem ))

class FileSystem1(object):

   __slots__ = ['files', 'folders', 'devices']
   def __init__(self, files, folders, devices):
       self.files = files
       self.folders = folders
       self.devices = devices

print(sys.getsizeof( FileSystem1 ))
#In Python 3.5
#1-> 1016
#2-> 888

很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用 __slots__。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。

9、不使用循环构造一个列表

import itertools
test = [[-1, -2], [30, 40], [25, 35]]
print(list(itertools.chain.from_iterable(test)))

#-> [-1, -2, 30, 40, 25, 35]

10、 在 Python 中实现一个真正的 switch-case 语句

下面的代码使用一个字典来模拟构造一个 switch-case。

def xswitch(x):
   return xswitch._system_dict.get(x, None)

xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}

print(xswitch('default'))
print(xswitch('devices'))

#1-> None
#2-> 2

1-50、Python面试1-50题汇总

51、说说Python中闭包是什么?

52、read、readline和readlines的区别?

53、说说Python中with的用法?

54、Python中连接字符串用join还是+?

55、Python中search和match的区别?

56、说说Python中字符串大小写转换?

57、Python反转三位整数有几种方法?

58、说说Python中贪婪和非贪婪匹配?

59、说说Python中正负索引?

60、说说Python中切片是什么?

关注小猿公众号,每天学习Python编程

发布了132 篇原创文章 · 获赞 45 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/liliangpin/article/details/103296195