1. 首页
  2. Python

偷偷地教你一些python运用的小技巧,超级方便的

“u003Cdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002F18123bd1-ce06-478f-a098-589cfe317dcf” img_width=”1024″ img_height=”1024″ alt=”偷偷地教你一些python运用的小技巧,超级方便的” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Ch1u003Eu003Cstrongu003E1. 原地交换两个数字u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003EPython 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Ex, y = 10, 20u003Cu002Fpu003Eu003Cpu003Eprint(x, y)u003Cu002Fpu003Eu003Cpu003Ex, y = y, xu003Cu002Fpu003Eu003Cpu003Eprint(x, y)u003Cu002Fpu003Eu003Cpu003E#1 (10, 20)u003Cu002Fpu003Eu003Cpu003E#2 (20, 10)u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 <a> 和 <b>。u003Cu002Fpu003Eu003Cpu003E一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E2. 链状比较操作符u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E比较操作符的聚合是另一个有时很方便的技巧:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003En = 10u003Cu002Fpu003Eu003Cpu003Eresult = 1 < n < 20u003Cu002Fpu003Eu003Cpu003Eprint(result)u003Cu002Fpu003Eu003Cpu003E# Trueu003Cu002Fpu003Eu003Cpu003Eresult = 1 > n <= 9u003Cu002Fpu003Eu003Cpu003Eprint(result)u003Cu002Fpu003Eu003Cpu003E# Falseu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E3. 使用三元操作符来进行条件赋值u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E[表达式为真的返回值] if [表达式] else [表达式为假的返回值]u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Ex = 10 if (y == 9) else 20u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E同样地,我们可以对类做这种操作:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Ex = (classA if y == 1 else classB)(param1, param2)u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E在上面的例子里 classA 与 classB 是两个类,其中一个类的构造函数会被调用。u003Cu002Fpu003Eu003Cpu003E下面是另一个多个条件表达式链接起来用以计算最小值的例子:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Edef small(a, b, c):u003Cu002Fpu003Eu003Cpu003Ereturn a if a <= b and a <= c else (b if b <= a and b <= c else c)u003Cu002Fpu003Eu003Cpu003Eprint(small(1, 0, 1))u003Cu002Fpu003Eu003Cpu003Eprint(small(1, 2, 2))u003Cu002Fpu003Eu003Cpu003Eprint(small(2, 2, 3))u003Cu002Fpu003Eu003Cpu003Eprint(small(5, 4, 3))u003Cu002Fpu003Eu003Cpu003E#Outputu003Cu002Fpu003Eu003Cpu003E#0 #1 #2 #3u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E我们甚至可以在列表推导中使用三元运算符:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E[m2 if m > 10 else m4 for m in range(50)]u003Cu002Fpu003Eu003Cpu003E#=> [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E4. 多行字符串u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E基本的方式是使用源于 C 语言的反斜杠:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003EmultiStr = “select * from multi_rowu003Cu002Fpu003Eu003Cpu003Ewhere row_id < 5″u003Cu002Fpu003Eu003Cpu003Eprint(multiStr)u003Cu002Fpu003Eu003Cpu003E# select * from multi_row where row_id < 5u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E另一个技巧是使用三引号:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003EmultiStr = “””select * from multi_rowu003Cu002Fpu003Eu003Cpu003Ewhere row_id < 5″””u003Cu002Fpu003Eu003Cpu003Eprint(multiStr)u003Cu002Fpu003Eu003Cpu003E#select * from multi_rowu003Cu002Fpu003Eu003Cpu003E#where row_id < 5u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E上面方法共有的问题是缺少合适的缩进,如果我们尝试缩进会在字符串中插入空格。所以最后的解决方案是将字符串分为多行并且将整个字符串包含在括号中:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003EmultiStr= (“select * from multi_row “u003Cu002Fpu003Eu003Cpu003E”where row_id < 5 “u003Cu002Fpu003Eu003Cpu003E”order by age”)u003Cu002Fpu003Eu003Cpu003Eprint(multiStr)u003Cu002Fpu003Eu003Cpu003E#select * from multi_row where row_id < 5 order by ageu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E5. 存储列表元素到新的变量中u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E我们可以使用列表来初始化多个变量,在解析列表时,变量的数目不应该超过列表中的元素个数:【译者注:元素个数与列表长度应该严格相同,不然会报错】u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003EtestList = [1,2,3]u003Cu002Fpu003Eu003Cpu003Ex, y, z = testListu003Cu002Fpu003Eu003Cpu003Eprint(x, y, z)u003Cu002Fpu003Eu003Cpu003E#-> 1 2 3u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E6. 打印引入模块的文件路径u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eimport threadingu003Cu002Fpu003Eu003Cpu003Eimport socketu003Cu002Fpu003Eu003Cpu003Eprint(threading)u003Cu002Fpu003Eu003Cpu003Eprint(socket)u003Cu002Fpu003Eu003Cpu003E#1- <module ‘threading’ from ‘u002Fusru002Flibu002Fpython2.7u002Fthreading.py’>u003Cu002Fpu003Eu003Cpu003E#2- <module ‘socket’ from ‘u002Fusru002Flibu002Fpython2.7u002Fsocket.py’>u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E7. 交互环境下的 “_” 操作符u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E>>> 2 1u003Cu002Fpu003Eu003Cpu003E3u003Cu002Fpu003Eu003Cpu003E>>> _u003Cu002Fpu003Eu003Cpu003E3u003Cu002Fpu003Eu003Cpu003E>>> print _u003Cu002Fpu003Eu003Cpu003E3u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E“_” 是上一个执行的表达式的输出。u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E8. 字典u002F集合推导u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E与我们使用的列表推导相似,我们也可以使用字典u002F集合推导,它们使用起来简单且有效,下面是一个例子:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003EtestDict = {i: i * i for i in xrange(10)}u003Cu002Fpu003Eu003Cpu003EtestSet = {i * 2 for i in xrange(10)}u003Cu002Fpu003Eu003Cpu003Eprint(testSet)u003Cu002Fpu003Eu003Cpu003Eprint(testDict)u003Cu002Fpu003Eu003Cpu003E#set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])u003Cu002Fpu003Eu003Cpu003E#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E注:两个语句中只有一个 <:> 的不同,另,在 Python3 中运行上述代码时,将 <xrange> 改为 <range>。u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E9. 调试脚本u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eimport pdbu003Cu002Fpu003Eu003Cpu003Epdb.set_trace()u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E10. 开启文件分享u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003EPython 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:u003Cu002Fpu003Eu003Cpu003E# Python 2u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Epython -m SimpleHTTPServeru003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E# Python 3u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Epython3 -m http.serveru003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E11. 检查 Python 中的对象u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E我们可以通过调用 dir() 方法来检查 Python 中的对象,下面是一个简单的例子:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Etest = [1, 3, 5, 7]u003Cu002Fpu003Eu003Cpu003Eprint( dir(test) )u003Cu002Fpu003Eu003Cpu003E[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘delslice’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘getslice’, ‘gt’, ‘hash’, ‘iadd’, ‘imul’, ‘init’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘rmul’, ‘setattr’, ‘setitem’, ‘setslice’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘append’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003Eu003Cstrongu003E12. 简化 if 语句u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cpu003E我们可以使用下面的方式来验证多个值:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eif m in [1,3,5,7]:u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E而不是:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eif m==1 or m==3 or m==5 or m==7:u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E或者,对于 in 操作符我们也可以使用 ‘{1,3,5,7}’ 而不是 ‘[1,3,5,7]’,因为 set 中取元素是 O(1) 操作。u003Cstrongu003E最后:如果你正在学习Python的路上,或者准备打算学习Python、那么小编这套学习教程免费赠送给你喔!绝对零套路 零收费!u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E你正好需要、我正好有、就是这么完美的事情u003Cu002Fpu003Eu003Ch1u003Eu003Cstrongu003E你只需转发本文,然后私信小编“资料”即可马上领取400python学习教程!!u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F6cbf3e8e1b234491b04bdbc53e07158d” img_width=”481″ img_height=”761″ alt=”偷偷地教你一些python运用的小技巧,超级方便的” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:偷偷地教你一些python运用的小技巧,超级方便的

主题测试文章,只做测试使用。发布者:醒百年,转转请注明出处:http://www.cxybcw.com/13680.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code