Python 三十个实践、建议和技巧,各种风格的 Python 面试题进来了解一下
python version
elif not sys.version_info >= (3, 5):
Kindly tell your user (s)he needs to upgrade
because you're using 3.5 features
3、使用 IPython
IPython 基本上是一个增强的 shell,仅仅是为了自动补全功能,IPython 也是值得使用的,但其实它还有更多作用,包括内建的 Magic 命令,这里列举了一些:
%cd:改变当前的工作目录
%edit:打开编辑器并在关闭编辑器后执行键入的代码
%env:显示当前的环境变量
%pip:install [pkgs] 在不离开交互式 shell 的情况下安装功能包
%time 和 %timeit:类似于 python 中的 time 模块,可以为代码运行计时
IPython 的另一个有用功能是可以使用之前任意一行代码的输出,代码的输入和输入实际上都是对象,例如可以通过 Out[3] 来使用第三次运行代码的输出对象。安装 IPython 的指令是:
pip3 install ipython
4.列表解析式
列表解析式可以用来替换通过 loop 来填充列表的丑陋方法,其基本语法是:
[ expression for item in list if conditional ]
一个非常基础的例子,用于生成包含连续数字的列表:
mylist = [i for i in range(10)]
print(mylist)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
由于可以使用表达式,因此可以通过更复杂的数学方法来生成列表:
squares = [x**2 for x in range(10)]
print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
甚至也可以调用外部函数:
def some_function(a):
return (a + 5) / 2
my_formula = [some_function(i) for i in range(10)]
print(my_formula)
[2, 3, 3, 4, 4, 5, 5, 6, 6, 7]
最后,也可以用 if 作为生成条件来对列表进行过滤。在下面的例子中,只有偶数被保留:
filtered = [i for i in range(20) if i%2==0]
print(filtered)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
5、检查对象的内存占用情况
通过 sys.getsizeof(object)命令可以查看任何对象的内存使用情况:
import sys
mylist = range(0, 10000)
print(sys.getsizeof(mylist))
48
这是因为 range 函数返回的是一个类对象,这个类对象表现为一个列表。因此使用 range 函数比使用实际的包含一万个数字的列表要更加节省内存。可以通过上面第四条中提到的列表解析式创建一个同样大小的实际列表:
import sys
myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))
87632
实际内存占用 87632 字节,远高于通过 range 函数生成的对象。
6、返回多个值
Pyhon 中的函数都可以返回多个变量,而不需要字典,列表或者类作为返回对象。方法如下:
def get_user(id):
fetch user from database
....
return name, birthdate
name, birthdate = get_user(4)
对于有限数量的返回值,这是可以的。但是任何超过 3 个值的内容都应该放到一个(data)类中。
7、使用 data 类
从 3.7 版本开始,python 提供了 data 类。与常规类或其他替代方法(如返回多个值或字典)相比,有以下几个优点:
数据类需要至少一定数量的代码
可以通过?eq?方法来比较不同的 data 类对象
可以?repr?通过很容易地打印一个数据类来进行调试
数据类需要类型提示,因此减少了 bug
一个 data 类的例子如下:
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card = Card("Q", "hearts")
print(card == card)
True
print(card.rank)
'Q'
print(card)
Card(rank='Q', suit='hearts')
8、就地变量交换
一个简洁的技巧,可以节省几行代码:
a = 1
b = 2
a, b = b, a
print (a)
2
print (b)
1
9、字典合并(Python 3.5+)
从 python 3.5 开始,字典的合并变得更简单了:
dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = { **dict1, **dict2 }
print (merged)
{'a': 1, 'b': 3, 'c': 4}
10、将字符串转化为标题格式
在标题格式中,非介词的首字母会大写。可以通过.title()方法实现:
mystring = "10 awesome python tricks"
print(mystring.title())
'10 Awesome Python Tricks'
11、将字符串分离并存储到列表中
可以按任意字符来分割字符串,并存储到列表中,例如按空格来分割字符串:
mystring = "The quick brown fox"
mylist = mystring.split(' ')
print(mylist)
['The', 'quick', 'brown', 'fox']
12、将列表中的字符串合并到一起
与上一条的功能正好相反,从列表中创建字符串,并在两个单词间插入空格:
mylist = ['The', 'quick', 'brown', 'fox']
mystring = " ".join(mylist)
print(mystring)
'The quick brown fox'
也许你会疑惑,为什么不使用 mylist.join(" ")呢?归根结底,String.join(
)函数不仅可以连接列表,还可以连接任何可迭代的列表。将它放在 String 中会阻止在多个位置实现相同的功能。
13、Emoji
这些表情具有很强的表达能力,能给人留下深刻印象。更重要的是,这在分析社交媒体数据时尤其有用。首先通过以下命令安装 emoji 模块:
pip3 install emoji
可以按照以下方法使用表情:
import emoji
result = emoji.emojize('Python is :thumbs_up:')
print(result)
'Python is ??'
You can also reverse this:
result = emoji.demojize('Python is ??')
print(result)
'Python is :thumbs_up:'
14、列表切片操作
列表切片的基本语法是:
a[start:stop:step]
start,stop 和 step 都是可选的(可填可不填),默认值是:
start:0
stop:列表的末尾
step:1
一些例子如下:
We can easily create a new list from
the first two elements of a list:
first_two = [1, 2, 3, 4, 5][0:2]
print(first_two)
[1, 2]
And if we use a step value of 2,
we can skip over every second number
like this:
steps = [1, 2, 3, 4, 5][0:5:2]
print(steps)
[1, 3, 5]
This works on strings too. In Python,
you can treat a string like a list of
letters:
mystring = "abcdefdn nimt"[::2]
print(mystring)
'aced it'
15、翻转字符串和列表
可以用切片操作来翻转列表或字符串,将 step 设置为负值即可实现:
revstring = "abcdefg"[::-1]
print(revstring)
'gfedcba'
revarray = [1, 2, 3, 4, 5][::-1]
print(revarray)
[5, 4, 3, 2, 1]
16、图片显示
可以通过 Pillow 模块来显示图片,例如显示 Kitty 小猫,首先安装 python 图片库:
pip3 install Pillow
然后下载你要显示的图片,并重命名。然后可以通过以下命令来显示图片:
from PIL import Image
im = Image.open("kittens.jpg")
im.show()
print(im.format, im.size, im.mode)
JPEG (1920, 1357) RGB
或者也可以直接通过 IPython 来显示:
Pillow 的功能远不止显示图片。它可以对图片进行分析,调整大小,滤波,增强,变形等等。
17、使用 map()函数
Python 的一个内建函数是 map()。map()的基本语法是:
map(function, something_iterable)
传入的参数是一个函数,和一个需要执行的对象,可以是任何可迭代对象。在下面的例子中使用的是 list:
def upper(s):
return s.upper()
mylist = list(map(upper, ['sentence', 'fragment']))
print(mylist)
['SENTENCE', 'FRAGMENT']
Convert a string representation of
a number into a list of ints.
list_of_ints = list(map(int, "1234567")))
print(list_of_ints)
[1, 2, 3, 4, 5, 6, 7]
map()是一个代替循环的好方式,可以在你的代码中尝试使用 map()函数。
18、从列表或字符串中获取唯一元素
通过 set()函数可以将列表或字符串转换为集合,集合中的不含重复元素:
(1)Python 所有方向的学习路线(新版)
这是我花了几天的时间去把 Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python 学习视频
包含了 Python 入门、爬虫、数据分析和 web 开发的学习视频,总共 100 多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100 多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
评论