Python 学习需要知道的小技巧!**
1,Python 提供了一个直观的一行代码赋值与交换变量的方法:
**x,y=10,20
print(x,y)
x,y=y,x
print(x,y)
#1 (10, 20)
#2 (20, 10)**
2,链状比较操作符,比较操作符 的聚合是另一个有时很方便的技巧
n=10
result=1<n<20
print(result)
#True
result=1>n<=9
print(result)
#False
3,使用三元操作符来进行赋值,三元操作符是if-else语句也就是条件操作符的一个快捷方式
x=10 if(y==9) else20
上面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。
x = (classA if y == 1 else classB)(param1, param2)
def small(a, b, c):
return a if a <= b and a <= c else (b if b <= a and b <= c else c)
print(small(1, 0, 1))
print(small(1, 2, 2))
print(small(2, 2, 3))
print(small(5, 4, 3))
#Output
#0 #1 #2 #3
4,多行字符串
基本方式源于C语言的反斜杠:
multistr=“select*from muti_row
where row_id<5”
print(multistr)
select * from multi_row where row_id < 5
另外一个是三个引号:
multiStr = “”“select * from multi_row
where row_id < 5"”"
print(multiStr)
#select * from multi_row
#where row_id < 5
#5,存储列表元素到新的变量中
testlist=[1,2,3]
x,y,z=testlist
print(x,y,z)
#1,2,3
#6,打印引入模块的文件路径
如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:
import threading
import socket
print(threading)
print(socket)
#<module ‘threading’ from ‘D:\Python\lib\threading.py’>
#<module ‘socket’ from ‘D:\Python\lib\socket.py’>
#7 ,交互环境下的“_”操作符
这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。
2 + 1
3_
3print _
3
“_” 是上一个执行的表达式的输出。
#8,字典、集合推导
与我们使用的列表推导相似,我们也可以使用字典/集合推导,它们使用起来简单且有效,下面是一个例子:
testDict={i:ii for i in range(10)}
testSet={i2 for i in xrange(10)}
print(testDict)
print(testSet)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
#9,调试脚本
我们可以在模块的帮助下载Python脚本中设置断点,例子:
import pdb
pdb.set_trace()
我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。
#10开启文件分享
Python允许运行一个HTTP服务器从根路径共享文件,下面是开启服务器的命令:
Python -m http.server
上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。
#11,检查Python中的对象
我们可以通过调用dir()方法检查Python 的对象,例子:
test=[1,3,5,7]
print(dir(test))
[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘gt’, ‘hash’, ‘iadd’, ‘imul’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘rmul’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
#12简化if语句
我们可以使用下面的方式来验证多个值:
if m in [1,3,5,7]: 而不是if m1or m3orm5orm7:
或者,对于 in 操作符我们也可以使用 ‘{1,3,5,7}’ 而不是 ‘[1,3,5,7]’,因为 set 中取元素是 O(1) 操作。
#13组合多个字符串
test=[‘I’,‘Like’,‘Python’,‘automation’],我们从上面给出的列表元素新建一个字符串:
print(‘ ’。join(test))
#I Like Python automation
#14翻转字符串,列表的方式
testlist=[1,2,3]
testlist.reverse()
print(testlist)
#[3,2,1]
#在一个循环中翻转并迭代输出
for element in reversed([1,2,3])
print(element)
3
2
1
#一行代码翻转字符串
“Test Python”[::-1]
输出为 “nohtyP tseT”
使用切片翻转列表
[1, 3, 5][::-1]
上面的命令将会给出输出 [5,3,1]。
#15婉转枚举
使用枚举可以在循环中方便找到当前的索引:
testlist=[10,20,30]
for i,value in enumerate(testlist):
print(i,’:’,value)
#1-0 : 10
#2-1 : 20
#3-2 : 30
#16在Python中使用枚举量
我们可以使用下面的方式来定义枚举量:
class Share:
Circle,Square, Triangle,Quadrangle=range(4)
print(Shapes.Circle)
print(Shapes.Square)
print(Shares.Quadrangle)
#1-> 0
#2-> 1
#3-> 2
#4-> 3
#17.从方法中返回多个值
并没有太多编程语言支持这个特性,然而 Python 中的方法确实(可以)返回多个值,请参见下面的例子来看看这是如何工作的:
function returning multiple values.
def x():
return 1, 2, 3, 4
#Calling the above function.
a, b, c, d = x()
print(a, b, c, d)
#-> 1 2 3 4
贴士#19. 使用 * 运算符(splat operator)来 unpack 函数参数
- 运算符(splat operator)提供了一个艺术化的方法来 unpack 参数列表,为清楚起见请参见下面的例子:
def test(x, y, z):
print(x, y, z)
testDict = {‘x’: 1, ‘y’: 2, ‘z’: 3}
testList = [10, 20, 30]
test(*testDict)
test(**testDict)
test(*testList)
#1-> x y z
#2-> 1 2 3
#3-> 10 20 30
贴士#20. 使用字典来存储选择操作
我们能构造一个字典来存储表达式:
stdcalc = {
‘sum’: lambda x, y: x + y,
‘subtract’: lambda x, y: x - y
}
print(stdcalc’sum’)
print(stdcalc’subtract’)
#1-> 12
#2-> 6
贴士#21. 一行代码计算任何数的阶乘
Python 2.x.
result = (lambda k: reduce(int.mul, range(1,k+1),1))(3)
print(result)
#-> 6
Python 3.x.
import functools
result = (lambda k: functools.reduce(int.mul, range(1,k+1),1))(3)
print(result)
#-> 6
贴士#22. 找到列表中出现最频繁的数
test = [1,2,3,4,2,2,3,1,4,4,4]
print(max(set(test), key=test.count))
#-> 4
贴士#23. 重置递归限制
Python 限制递归次数到 1000,我们可以重置这个值:
import sys
x=1001
print(sys.getrecursionlimit())
sys.setrecursionlimit(x)
print(sys.getrecursionlimit())
#1-> 1000
#2-> 1001
请只在必要的时候采用上面的技巧。
贴士#24. 检查一个对象的内存使用
在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:
在 Python 2.7 中
import sys
x=1
print(sys.getsizeof(x))
#-> 24
在 Python 3.5 中
import sys
x=1
print(sys.getsizeof(x))
#-> 28
贴士#25. 使用 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。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。
【译者注:在我的 win10 python2.7 中上面的结果是:
#In Python 2.7 win10
#1-> 896
#2-> 1016
所以,这种比较方式是不那么让人信服的,使用 slots 主要是用以限定对象的属性信息,另外,当生成对象很多时花销可能会小一些,具体可以参见 python 官方文档:
The slots declaration takes a sequence of instance variables and reserves just enough space in each instance to hold a value for each variable. Space is saved because dict is not created for each instance. 】
贴士#26. 使用 lambda 来模仿输出方法
import sys
lprint=lambda *args:sys.stdout.write(" ".join(map(str,args)))
lprint(“python”, “tips”,1000,1001)
#-> python tips 1000 1001
贴士#27. 从两个相关的序列构建一个字典
t1 = (1, 2, 3)
t2 = (10, 20, 30)
print(dict (zip(t1,t2)))
#-> {1: 10, 2: 20, 3: 30}
贴士#28. 一行代码搜索字符串的多个前后缀
print(“http://www.google.com”.startswith((“http://”, “https://”)))
print(“http://www.google.co.uk”.endswith((".com", “.co.uk”)))
#1-> True
#2-> True
贴士#29. 不使用循环构造一个列表
import itertools
test = [[-1, -2], [30, 40], [25, 35]]
print(list(itertools.chain.from_iterable(test)))
#-> [-1, -2, 30, 40, 25, 35]
贴士#30. 在 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
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- List item
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎