- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章你所不知道的Python奇技淫巧13招【实用】由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写。其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一样可以写出像诗一样的Python代码.
1.导入模块 。
你是不是经常对调用模块时输入一长串模块索引感到头疼?说实在的,数量少的时候或许还可以勉强忍受,一旦程序规模上去了,这也是一项不容小觑的工程.
1
2
3
4
5
6
7
8
9
10
|
#Bad
import
urllib.request
url
=
r
'http://www.landsblog.com'
req
=
urllib.request.Request(url)
response
=
urllib.request.urlopen(req)
#Good
form urllib
import
request
url
=
r
'http://www.landsblog.com'
req
=
request.Request(url)
response
=
request.urlopen(req)
|
这样是不是节省了一点时间呢?
但是这样简写可能造成模块名重复的问题,如何解决呢?
1
2
|
from
module_a
import
fun as a_fun
from
module_b
import
fun as b_fun
|
这样的方法还适用于模块名比较长的模块,笔者印象最深的就是BeautifulSoup模块 。
1
2
3
4
5
6
7
|
from
bs4
import
BeautifulSoup as BS
html
=
'''
<html>
......
</html>
'''
soup
=
BS(html)
|
省时省力.
2.关于 "_" ## 。
这是一个非常有用的功能,可惜很少人知道.
当你在交互界面敲代码,获得一个临时结果,却没有用变量名去保存它的时候,可以用"_"来获取最近一次临时结果.
1
2
3
4
|
>>>
1
+
1
2
>>> _
2
|
在"_"中存储最后输出的值。这在交互式模式中是非常有用的,当你在过程中没有保存计算结果,或者你想看最后一步执行的输出结果.
3.合并字符串 。
这是一个老生常谈的问题,当我们需要将数个字符串合并的时候,习惯性的使用"+"作为连接字符串的手段.
然而,由于不可变对象在内存中生成后无法修改,合并后的字符串会重新开辟出一块内存空间来存储。这样像滚雪球一样,将内存快速消耗殆尽.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Bad
string
=
[
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
]
def
fun(string):
all_string
=
''
for
i
in
string:
all_string
+
=
i
return
all_string
# Good
string
=
[
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g,'
h']
def
fun(string):
all_string
=
''.join(string)
return
all_string
|
4.强大的zip() 。
它是Python的内建函数,zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个包含tuple的list。zip()函数可以在很多场景简化你的代码.
矩阵的行列互换 。
1
2
3
4
5
6
7
8
|
# Bad
a
=
[[
1
,
2
,
3
], [
4
,
5
,
6
], [
7
,
8
,
9
]]
re_a
=
[[row[col]
for
row
in
a]
for
col
in
range
(
len
(a))]
>>> [[
1
,
4
,
7
], [
2
,
5
,
8
], [
3
,
6
,
9
]]
# Good
a
=
[[
1
,
2
,
3
], [
4
,
5
,
6
], [
7
,
8
,
9
]]
re_a
=
list
(
zip
(
*
a))
>>> [[
1
,
4
,
7
], [
2
,
5
,
8
], [
3
,
6
,
9
]]
|
交换dict的键值 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Bad
a
=
{
'a'
:
1
,
'b'
:
2
,
'c'
:
3
,
'd'
:
4
}
def
reverse_dict(a):
new_dict
=
{}
for
k,v
in
m.items():
new_dict[v]
=
k
return
new_dict
# Good
a
=
{
'a'
:
1
,
'b'
:
2
,
'c'
:
3
,
'd'
:
4
}
def
reverse_dict(a):
k
=
a.keys()
v
=
a.values()
new_dict
=
dict
(
zip
(v, k))
return
new_dict
|
合并list相邻项 。
1
2
3
|
a
=
[
1
,
2
,
3
,
4
,
5
,
6
]
list
(
zip
( a[::
2
], a[
1
::
2
] ))
>>> [(
1
,
2
), (
3
,
4
), (
5
,
6
)]
|
5.变量值交换 。
1
2
3
4
5
6
|
# Bad
tmp
=
a
a
=
b
b
=
tmp
#Good
a, b
=
b, a
|
6.在循环中获取索引(数组下标)?
1
2
3
|
a
=
[
8
,
23
,
45
,
12
,
78
]
for
index, value
in
enumerate
(a):
print
(index , value)
|
7.如何在只用一行捕获多个异常?
1
2
3
4
|
try
:
pass
except
(ExceptionA,ExceptionB,.....) as e:
pass
|
8.把列表分割成同样大小的块?
1
2
3
|
a
=
[
1
,
2
,
3
,
4
,
5
,
6
]
list
(
zip
(
*
[
iter
(a)]
*
2
))
>>> [(
1
,
2
), (
3
,
4
), (
5
,
6
)]
|
9.如何查找列表中某个元素的下标?
1
2
3
|
a
=
[
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
]
a_i
=
a.index(a)
>>>
0
|
10.如何快速反转字符串?
1
2
3
4
5
6
7
8
|
#Bad
a
=
'Python is a powerful languange.'
list_a
=
list
(a)
list_a.reverse()
re_a
=
''.join(list_a)
#Good
a
=
'Python is a powerful languange.'
re_a
=
a[::
-
1
]
|
1
2
3
4
5
6
7
|
x
=
2
if
1
< x <
3
:
print
(x)
>>>
2
if
1
< x >
0
:
print
(x)
>>>
2
|
12.优雅的打开文件 。
平时在使用类似文件的流对象时,使用完毕后要调用close方法关闭。with…as语句提供了一个非常方便的替代方法:open打开文件后将返回的文件流对象赋值给f,然后在with语句块中使用。with语句块完毕之后,会隐藏地自动关闭文件.
1
2
|
with
open
(
'nothing.txt'
,
'r'
) as f:
f.read()
|
13.和你的内存说再见 。
crash = dict(zip(range(10 **0xA), range(10 **0xA))) 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我! 。
原文链接:http://www.cnblogs.com/Lands-ljk/p/5746837.html 。
最后此篇关于你所不知道的Python奇技淫巧13招【实用】的文章就讲到这里了,如果你想了解更多关于你所不知道的Python奇技淫巧13招【实用】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我有一堆 php 脚本计划在 CentOS 机器上的 cron 中每隔几分钟运行一次。我希望每个脚本在启动时自我检查它的前一个实例是否仍在运行,如果是则停止。 最佳答案 我这样做是为了管理任务并确保它
是否有 bash 命令、程序或 libusb 函数(尽管我没有找到)来指示 USB 设备的 OUT 或 IN 端点是什么? 例如,libusb_interface_descriptor(来自 libu
我如何知道 NSTextField 何时成为第一响应者(即当用户单击它来激活它时,但在他们开始输入之前)。我尝试了 controlTextDidBeginEditing 但直到用户键入第一个字符后才会
我怎么知道我的代码何时完成循环?完成后我还得再运行一些代码,但只有当我在那里写的所有东西都完成后它才能运行。 obj.data.forEach(function(collection) {
我正在使用音频标签,我希望它能计算播放了多少次。 我的代码是这样的: ; ; ; 然后在一个javascript文件中 Var n=0; function doing(onplaying)
我正在尝试向 Package-Explorer 的项目上下文菜单添加一个子菜单。但是,我找不到该菜单的 menuid。 所以我的问题是如何在 eclipse 中找到 menuid? 非常感谢您的帮助。
我有一个名为“下一步”的按钮,它存在于几个 asp.net 页面中。实际上它是在用户控件中。单击“下一步”时,它会调用 JavaScript 中的函数 CheckServicesAndStates。我
我正在尝试在 Visual Studio 中使用 C++ 以纳秒为单位计算耗时。我做了一些测试,结果总是以 00 结尾。这是否意味着我的处理器(Ryzen 7-1800X)不支持 ~1 纳秒的分辨率,
我有一个自定义 ListView ,其中包含一些元素和一个复选框。当我点击一个按钮时。我想知道已检查的元素的位置。下面是我的代码 public class Results extends ListAc
如何在使用 J2ME 编写的应用程序中获取网络运营商名称? 我最近正在尝试在 Nokia s40 上开发一个应用程序,它应该具有对特定网络运营商的独占访问权限。有没有这样的API或库? 最佳答案 没有
我使用服务器客户端组件,当在此组件的 TransferFile 事件中接收文件时,我使用警报消息组件。所以我希望,如果用户单击警报消息,程序将继续执行 TransferFile 事件中的代码,以在单击
如果我创建一个类A具有一些属性,例如 a, b, c我创建对象 A x1; A x2; A x3; ... A xN 。有没有办法在同一个类中创建一个方法来检索我创建的所有对象?我想创建类似 stat
我正在制作一个应用程序,其中包含相同布局的 81 个按钮。它们都被称为我创建的名为“Tile”的对象。问题是这些图 block 存储在数组中,因此我需要知道以 int 格式单击了哪个按钮才能调用图 b
UIProgressView有这个setProgress:animated: API。 有没有办法确切知道动画何时停止? 我的意思是这样的? [myProgress setProgress:0.8f
我正在使用两个 jQuery 队列,我希望其中一个队列在另一个队列完成后出队。我怎么知道第一个是否完成?我应该使用第三个队列吗?! 这是我所拥有的: var $q = $({}); $q.que
jQuery 中有没有一种方法可以知道是否至少有一个复选框已被选中? 我有一个包含很多复选框的表单,每个复选框都不同。 我需要一种 jQuery 的方式来表达这样的内容,这就是逻辑: If at le
给定 2 个选择 100 50 100 在这两种情况下,我都想在 .example 中获取数字,使用相同的选择器或者以某种方式知道 .no-text 和 之间的区别。带文字 执行
我在我的应用程序中使用 System.ComponentModel.BindingList 作为 DataGridView.DataSource。该列表非常大,需要几秒钟才能绘制到 DataGridV
我想知道用户在 Android 中选择的默认键盘。我知道我可以使用 InputMethodManager 访问已启用的输入法列表,但我想知道用户当前使用的是哪一个。 到目前为止,我已经尝试获取当前的输
我是一名优秀的程序员,十分优秀!