Python那些事——python的奇技淫巧!

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python
1 p# M7 U2 N3 r2 \2 |
# T' {: A0 X7 k2 E$ j- I, c对于python,我给大家总结了以下几点:
$ L8 J0 H; T4 [6 T" a. jPython 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
; B5 |; m7 u0 Z' k" tPython 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。) a. }0 G+ j1 \

- W& S- {. e6 q3 w: v. ~

    ! }: ?# B3 W/ S8 ~
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    ; u; p  W- P% W8 @7 l
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。% @' D) ?% b& O4 g/ I
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。. M9 n: g! ]  w2 n" V& p( X% ]
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
    ) i3 i6 ^% \; M/ }4 v5 G
在这里,我给大家就分享一个关于Python的奇技淫巧吧!" I2 G: q) \& l% p3 N# d
控制台操作控制台不闪退
7 a8 y8 t; E, L0 q; ?  \) n
1
0 V3 k" v$ F4 p4 k0 D; P
os.system('pause')# T# `6 E4 u% u: N
获取控制台大小: V- ?0 Y" p1 Z# z
13 s- y  m+ r- U) i+ Z
rows, columns = os.popen('stty size', 'r').read().split()
" B8 z4 M  I- Z" O
输入输出控制解决输入提示中文乱码问题0 y" y  b; {  k4 ]- `
1
' A  V' ^3 i6 U4 D
raw_input(unicode('请输入文字','utf-8').encode('gbk'))- Z9 U( |3 i' H
格式化输出. |& k) b6 p9 S0 F0 k
1
! s, I5 d/ S6 ?( n
print a.prettify()
0 i0 v8 T9 `# T
接受多行输入
+ `* `* D- ]% C- B* q
1
/ o. a) \" m& h/ @2+ S) ?; w& ]/ _) @
3/ i& _5 t4 B' p" A
4
7 s9 @! O+ @0 `# M- v- W- U  ^0 I5
: {* L9 r; e3 c. ?- {6$ Q3 s& w4 A' O1 Q3 V  X4 x! d
7/ @; H6 s) r% L) p5 _; X6 Q
81 [( s) k% E  \( U0 Q
9
5 G! e; m) o8 ]5 z6 F) m" N10
6 a) _* }. v: ]11
! [$ j2 ]+ _1 V5 f' y6 ?; k12
  b& N# n; S- a3 b# c+ T; a13
6 Q6 O( z  B9 K14
+ ~9 M/ C! a4 h) m+ |15
7 t( Q8 ~4 h7 p6 A8 j3 ~& U
text=""2 \3 _4 H1 @2 M! m  |7 W+ G
while 1:
2 n2 S, E- f# |7 ]% U4 i0 @9 S data=raw_input(">>")
; _! T' _) s) r; P4 I# C+ ?+ s if data.strip()=="stop":
7 j/ T! n6 D4 Q8 U break
' \6 [# k5 j( L! ~  I! m4 w text+="%s\n" % data
9 Q- o5 d: v) k. U+ g6 Xprint text
1 ~5 @: R$ `5 [: q8 F% @---------------------------$ R: I  X6 l$ w4 k( n5 O- V8 r6 ]
>>1
7 J$ g8 r: A) ]* |# X* e3 O>>2
9 z; `- p! H0 W1 k; o) g>>3
+ U' W$ H$ w/ H8 ^: b; r2 `>>stop* t( o) n9 o0 Y/ o" Q
1$ {) |% \0 n. R9 W% m
2! y+ |( Z3 b0 h  W5 F1 V& ^7 o
3% ~% a; }0 q/ g/ ]' \! }
同行输出
: |: A' R# {& H) T( ?0 ~. z
1; E/ b$ n* D! n8 Y+ G
2
8 G4 \6 W* l- u$ ]; H! }3 q- Y, c; O* G
Print '%s' % a," U4 k" @0 A- E
Print '%s \r' % a0 V+ z/ B0 y( c# O$ n% a/ o( E; |
标准输入输出
! w/ O* R# m& o! Y% y
18 t# D, O+ L  H
2/ X4 _* h3 m9 @" K
sys.stdout.write("input") 标准输入
, Y+ X2 q1 S4 Y5 }+ q" ]sys.stdout.flush() 刷新缓冲区
% u! I; J8 g! E  ^/ k
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)
; z9 h% ^$ @2 }* b$ d
1
% O  p$ a/ @, j: {5 @6 |29 H+ O. d, d+ y; P" L
3, F' v8 R) b3 t8 v0 F% V
41 y3 R1 G& l6 d+ }5 O
WConio.textcolor(WConio.YELLOW)$ T, B  C) E: y  i  K: ?8 Q
print "yellow"! z7 N& Z% b5 i8 t
WConio.textcolor(WConio.BLUE), }8 p: A. V! U2 f: p( ~
print "blue"! ]- @7 _6 W5 M7 l) {7 b
输出颜色控制(全平台)
0 \% L3 j, \% C$ q) g
1
/ R5 U  C, y/ i& L8 k2 @2
  N/ n- t" z% {( q6 ?3
# c  L, F1 ~  s45 Q% h' {1 l( S0 u: p
55 p- ^/ c. c/ x" x2 B5 h2 S
6
" k% g, d& E  f/ E$ G1 Y/ y4 ]7
3 G  _" w3 w. i9 R; w+ `86 O, r* C  c4 y& w1 r' P, S
red = '\033[1;31m'3 }8 n& F3 Q, }7 l7 a+ H8 W
green = '\033[1;32m'" y+ D1 p/ I: ?1 H1 n7 H
yellow = '\033[1;33m') m3 V* t( a  V1 m  U9 Z
white = '\033[1;37m'- \* N% l& Z% y2 @# C
reset = '\033[0m’4 n; i: ~/ K3 D8 @/ `# x3 N$ d0 x
print red+"color is red"+reset- `8 g4 r4 ?4 g1 H" d
print green+"color is green"+reset
: U$ E% d1 Q8 [- m3 m
进度条控制方案一4 s- G  B% `) r2 }; u1 i. {3 b
13 S6 k9 a( Y" H
2
- ?% a- O. ~, N8 D7 O32 N7 f, y( s* t, z  G
4& M  h2 O! d8 z8 V  n' y6 S
5
1 Q/ D8 K2 p' E7 P6
. x, b' i! r( x: @/ M7
" g2 W. W3 T+ H8
; @" ]: a5 F# Q' Y
from __future__ import division8 {0 O/ M9 Z! M; T
import sys,time5 ^0 R( M9 [% n4 @) h4 m) ]) i
j = '#'
2 U+ P/ c/ i% A2 \. B0 L/ T$ ]" G9 Rfor i in range(1,61):
. u3 e4 L6 H: `, u2 z6 X. ^6 k j += '#'
) C( Y, b  b' V  v. l( W. l sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")6 [8 A# ^! _' S# L4 K* ^3 e  w" c
sys.stdout.flush()
) M& [8 [; X1 e* W& z, f time.sleep(0.1)0 U" J& ~/ `, G6 r/ U  u
方案二/ V3 v6 R6 y# ]' S
1
+ n" p5 D4 M! F) N' |2
9 y9 A3 M4 c& F9 T30 V7 b0 A% ~+ E5 Q. s5 d
4* H7 D8 [- V  e0 W* z+ y
5- I3 L0 G' @+ [4 T( }6 B
6  f4 {0 T8 b; ^
import sys
0 t+ u4 V& ^9 ]' l' J4 o0 t* ?import time
0 w! C, M7 x6 V/ l, P3 Hfor i in range(1,61):- [; V- T* t- D3 u) j: f
sys.stdout.write('#'+'->'+"\b\b")
# z- u3 |: G6 d; M8 ?, T sys.stdout.flush()
6 w- |' H* ?6 c; ]7 c1 E time.sleep(0.5)
- S" p+ W- u$ o3 _, f( n% o- j7 J% ]5 p' W
方案三! E4 W4 H/ Z, ^4 n
1
9 Q" e5 I3 V! f  x2
; r# v  M" o6 H6 q8 I- j: k3' ~3 d, n: b5 \. M8 a6 K
42 e# _' d4 Q- J) n  a1 a
5
: _2 H: C" X" h6. \0 p# p* `* j+ T# S9 e( U$ O
7
% C; K7 V. ]( a8 L86 Y" ^5 {8 R& K  g8 N* Q
9
' \8 p8 E* ^4 ?5 B7 ^, f& h, V$ e# C101 @2 t, d* L1 j5 C& s
11
+ {7 R% z" p* U6 p4 w" Y12
( c! p' V0 v/ I5 P% W% D133 ~, R  e: E( D0 ]( c2 f+ F$ F
14+ T$ `: W! S; }7 p+ p! R1 x* Y
15% g1 h3 i+ v# u
164 Z5 y5 i# z) G! ]
17
1 S  o3 q6 S' i# _7 V3 @! l18
% T8 i2 }; {( }6 w- Z19! w( R: H" y; `- y6 G/ m
205 W- w7 t! x7 Y- t: W+ E+ F
21
( E  p- z& _, ^- d4 F6 x0 T22, [$ K  C3 i: c, A6 w
233 d" f. }# z3 M0 @( ^
24
/ j4 X3 `( J2 {1 }( \7 H6 B25
; l( z/ X; p9 C
from progressbar import *8 `. G1 H; T# L1 U/ S
import time/ `3 n  P% ~5 I1 a# h/ E' o
import os
2 V3 s9 ^9 K( |: i/ z+ j+ brows, columns = os.popen('stty size', 'r').read().split() #获取控制台size
' |+ @: N; r0 @0 l* a' Z; l% pconsole_width=int(columns)
/ \8 T5 q; O) M; ?) Wtotal = 10
1 U9 |9 E1 L1 B+ Qprogress = ProgressBar()
( x4 r. ^3 |1 _! z. wdef test():
* k+ [; x+ H! e* D/ w: l: ` ''') H# J& j% [5 Y# p; L. s' ~
进度条函数,记录进度6 S+ M' a' M. O6 b" R0 G0 d+ p
'''  u1 I/ R6 S3 d
for i in progress(range(total)):
1 r4 J0 z* K/ R) i5 Q, z4 C" C test2()9 `6 _/ g. v- \; P
def test2():  m/ S/ o# q% |" m' ^! ^" T
'''
+ y7 U3 u5 ~  g+ g# T5 V9 { 执行函数,输出结果
; L5 ?& @6 l# c& r0 b- F! Q '''
# n! q% I9 [/ L0 \8 i! }0 X- o content="nMask'Blog is http://thief.one"
' r+ u; ~9 O* b: O, g8 k! O sys.stdout.write("\r"+content+" "*(console_width-len(content)))
+ d* p4 \1 x" y$ ]% N time.sleep(1)
* _' @6 R8 n1 U) a9 R1 C7 P sys.stdout.flush()
! n. w. w" ^. N) O- g+ r6 g7 ^+ T: ftest()/ K. u( {; j3 ?* \
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径
/ @" S8 m$ \" W3 }& g
1
% D5 a5 w" Y; w  X+ x2  S" C! `# c1 ?& p" H& m
from distutils.sysconfig import get_python_lib
: f! H9 T1 y- O; u' j! Z& g3 Bprint get_python_lib
- J2 R5 N! Y- {/ h/ f* _
获取当前时间
' U, a# A' k7 B
1
$ g" L$ t2 X7 `% Y! c3 W2
  X0 c) }- D. {# q, W4 I1 y' v3
, z9 a8 @; ~+ y6 K4) L" {# h, C3 B
c=time.ctime()# P# e/ m! A' s# k
#自定义格式输出
# ]9 {2 ^- i' _- _8 q; fISOTIMEFORMAT=’%Y-%m-%d %X’- ?, r% x5 |& c) Q4 A" W
time.strftime( ISOTIMEFORMAT, time.localtime() )8 C" c  ^5 V' f5 ^3 i: x8 H, C
查看系统环境变量5 [& B' T% E' e3 s6 l
1
# q8 W" i/ p7 B; D0 k7 L+ c9 R
os.environ["PATH"]
. b: V* Z' b% |5 Y, N
获取系统磁盘! X3 }  `1 V2 u! D, h! p
18 D* R* K- W0 c: k- b  m4 o
os.popen("wmic VOLUME GET Name"): g6 \3 {3 z5 T$ R6 _2 d2 G6 h4 r
获取当前路径(包括当前py文件名)1 I9 }; j5 z1 c
1
3 g7 f: K: z3 W! F& Z+ K
os.path.realpath(__file__)5 y/ i9 Q* |( ]& X" @7 r) V
当前平台使用的行终止符
$ V. ~! Y! ^! G  q
1
. ?0 m6 k: J" R# Z; a4 V' |; b7 [
os.linesep; o% \% W# j4 M+ Z* F
获取终端大小1 z4 m. b" [( K4 ~1 m8 w% t
1
  r+ J4 i( E- t! d6 p' F! `2: J  Z: B4 ^1 M" w- g6 O
3. L8 t4 L% }, [$ g! b+ r
rows, columns = os.popen('stty size', 'r').read().split()
. D3 D/ i7 Q& \& U0 B#python3以后存在可以使用os
; V+ M8 H' o9 a  ]# @8 A7 }# jos.get_termial_size()
4 n& v; A( W! @) }' E0 w
退出程序1 I, S  E; u, j4 j* O; y, E: }) v
    ; C) o1 R. z1 C
  • return:返回函数的值,并退出函数。$ O  d- k% S' n0 I5 E% M
  • exit():直接退出。
    # R1 Z8 z9 K/ A
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。$ p$ i7 I. u2 y$ {
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序), c+ {' l# z5 }4 _) J  s& y
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序): K( A# a' i: J' `
网络操作域名解析为ip
0 v! a" r7 M$ j+ Z6 T7 q
1- @1 l$ J/ c5 p3 P
ip= socket.getaddrinfo(domain,'http')[0][4][0]0 ]! U3 {" e/ h. {
获取服务器版本信息
7 }4 d( Z# N3 q# P7 o
1
# {0 ?: X$ k1 j& C4 X4 e2
% v4 o3 l. T* ]1 @3. t/ O; [0 L% ?) O
sUrl = 'http://www.163.com'
$ m: _2 e+ `7 G( r& xsock = urllib2.urlopen(sUrl)
. n& o: f+ ~6 N2 e1 n5 X% csock.headers.values()& l- Z5 M& ~5 u* S# r
文件操作输出一个目录下所有文件名称
- r+ [5 t) u) |0 r
1
* u/ I+ ]/ M2 [* B8 ?2
/ Q9 v! S1 L: a$ S6 B6 ?% }3
4 T8 G/ O3 ^) o& F1 q9 i* O3 [* C4( d6 @2 q2 Y9 |  a* C
56 R7 V/ ^$ U1 y/ i; C* R
6* r& Z& z  M& ^4 n! v! G% T  L2 {
7  V5 G6 z9 A4 }* A; J7 i& W7 P
88 G% u( C  f! P* e. _7 K
def search(paths):
/ i8 p, f8 C$ m& N* _# z; y if os.path.isdir(paths): #如果是目录; {3 d3 `, k) N1 C5 a" A1 _9 I; T, V* T
files=os.listdir(paths) #列出目录中所有的文件. H! b8 }4 m$ j+ N# p  A. g
for i in files:5 e& G- j1 |$ ]. A- _0 Z9 O- Z
i=os.path.join(paths,i) #构造文件路径
  C( D$ u5 Q2 Y search(i) #递归* {* v' C9 R; l8 r/ U+ t5 r' U
elif os.path.isfile(paths): #如果是文件: G; m# V  d! S- o& @) \' [2 |) c
print paths #输出文件名* F3 O- L0 m3 \* ]- n2 K' V
文件查找' p. i/ _9 U5 _- A
1+ D  B9 Q8 B$ A% d/ q: S. E
2
) v7 _2 f9 c& _- Q) K3
+ {7 t1 i( [9 k2 f# p* ^4
* s. f0 A) H' y5
! p& k# n) U+ M7 g% l, m/ ~6* F+ k: Q/ Z' T& @4 Y+ s
import glob( B0 L- [* W7 Z& `, A6 T) f
print glob.glob(r"E:/*.txt") #返回的是一个列表
4 X6 }; K/ P: g2 ?0 {% I; c2 D查找文件只用到三个匹配符:”*”, “?”, “[]“
5 z, u1 A9 e% T: ^7 N”*”匹配0个或多个字符;
3 |8 T4 G2 u. T3 N+ Z& `& i% w”?”匹配单个字符;
3 N: e4 ^  A: p1 e  \) Y9 O- V”[]“匹配指定范围内的字符,如:[0-9]匹配数字。3 Y% O7 p+ p1 Y( e
查找指定名称的文件夹的路径! k) U+ x+ R5 T+ ^' @' p- j
13 g- s, g: D! ~2 {; O
2
8 M3 T7 t; M9 g- y% Y: Z+ M9 p3
; o) V3 O. I, \! J! S' n: `. x4/ j$ V+ r/ S( r; d$ z$ b% D  z9 U
5
; ]  _5 T. B  s) e  A1 {: @6
, T! o/ k# w7 k3 E7, i0 T# i8 t; _' ]# K6 Y
8
6 n" P; h" S7 H; p/ I' ~9
4 q1 V  H, ^" ?4 y+ a; _% s10  {3 W1 t' l3 [$ j% o* C9 @( m
11
. e' w1 L' e9 L# F9 ~' E12$ e! H" R* D) l
13
# J2 v. E% d& r1 j: k5 i9 w148 j3 C5 r: U4 H8 h$ e0 U
15% G5 S( p2 s6 M. x4 {" Y, B
16
4 \3 o4 S: w8 V( ^" _17
9 |9 ~: O) @& Q
def search(paths,file_name,tag,lists):: E5 n! S4 u' ^$ j
if os.path.isdir(paths): #如果是目录
2 a9 E; s, g# u" l if file_name==tag: #如果目录名称为tag
( Z2 Y+ r! a' x& y/ p, t1 V lists.append(paths) #将该路径添加到列表中
  ]9 q1 B% H" S- g7 F, U else: #如果目录名称不为tag. x1 x' _2 n" V
try:
9 L$ J* Z6 R' u6 L! N8 O! r! h: l9 P files_list=os.listdir(paths) #列出目录中所有的文件8 h) \3 J* ~4 K/ t# }
for file_name in files_list:
3 z& F- q* ~7 z0 [ path_new=os.path.join(paths,file_name) #构造文件路径
) Z6 _8 \) b# C. N8 `- _: U1 Y search(path_new,file_name,tag,lists) #递归
+ o: b+ Y" A7 x( `. O- `8 B8 s except: #遇到特殊目录名时会报错
% A' [5 P+ Y) y2 e8 V pass
) u! b3 M, B0 t+ Y# t  | elif os.path.isfile(paths): #如果是文件
) s  r) q$ e  G( {$ x$ h pass( t+ ~5 [! X% r3 Y$ S7 y
return lists
) u( c, h, ?0 S0 {+ F
数据操作判断数据类型
9 ^) i# n- P7 g2 z& J
1, D+ c1 h/ U6 i: Z, Q. D
isinstance("123",(int,long,float,complex). E+ _0 I/ v7 [" X2 k7 H) ^
字符串(string)去掉小数点后面的数字* m) V  x6 E/ r' }9 I& q: Z" V& m; w
18 R9 }7 a- _8 E% @0 M8 e  Q
2+ ]9 M. h# M; h8 p5 d& G. u2 ]/ g
a=1.213112 r+ ]6 k' H0 S. s& b" p
b=Int(math.floor(a))
- a1 {% h& j9 k+ E
字符串倒置
& ~! W/ D7 y" l8 p; |
1" Y5 E! |: l8 {/ Q: m* z% e
2
+ ?  M0 B# M5 R8 U. X2 `5 H( v3 l
>>> a = "codementor"
( s9 P7 S% I3 D& k" U* p>>> a[::-1]
  \; H# X8 o$ ]8 R# V5 R
字符串首字母变大写' y; |8 V3 J# n, L
1
, q' c, H  N0 C! A2 h( Y! h, o* a2
. q$ }3 P8 J" q3 Y. S. R, \. m39 W) |0 A  i. P' [% j
info = 'ssfef'4 E+ O% D; H. Y' o4 U, E
print info.capitalize()
% m2 G; L* N7 K) Dprint info.title()3 H( i) ^& h% ]5 e: f' [# U
返回一个字符串居中,并使用空格填充至长度width的新字符串。
& t/ ]. ~6 {: J6 f9 E
1
2 t) W0 _- ~/ x9 g9 d7 l2 j
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。+ d4 X# s6 }. g$ P4 ?
列举所有字母
( C7 K  d8 \6 }& U) O  t6 O
1
( l9 C0 h, e/ i22 o9 e( E0 {% A+ n7 J* b
3
: m& k$ x! ^% P3 _% _% ~
print string.ascii_uppercase 所有大写字母, Z4 {: @/ I1 q, c# C% s
print string. ascii_lowercase 所有小写字母) A' ]  [* D! ^) o8 b1 {% e$ l; h3 z
print string.ascii_letters 所有字母(包括大小写)8 E& G/ b2 z6 K0 F& t) ]5 P) R1 l
列表(list)列表去重
- {  z( m' I9 {# J" ]/ D
1! R" a/ k' s& t
2
8 k# ?8 Z+ K: m% P
ids = [1,4,3,3,4,2,3,4,5,6,1]
4 T/ M- P) B: }2 J* Fids = list(set(ids))
4 }& @+ C$ ?! |, z1 {
列表运算+ U7 C8 z- }/ f" V
1
+ j4 z" k, w  C21 t0 ]6 s3 `& V4 j
3* U2 z7 |) h% M( e/ V2 p" y
44 }& C) R% n- G/ \! Q3 Z
5
; b7 ]+ k) `  l. H3 V
a=[1,2,3]3 [+ r& r# ]- \  r, a- h0 d! Q
b=[3,4,5]; b8 G( }# j' V) W) b0 ?, S
set(a)&set(b) 与; l% t# y) k+ ?+ Y8 @  A' H8 @
set(a)|set(b) 或+ u7 w+ {( r  \
set(a)-set(b) 非  p8 O' a. n7 g& u) n
单列表元素相加  n* C1 B' x- G4 F: `% \
17 f" C$ r6 t( i: s# k* _
2: Z' S, N  B3 \3 r" O3 I, E
3
0 E/ q4 X' v. X1 N$ S. w$ J
a = ["Code", "mentor", "Python", "Developer"]
7 G( O$ E7 t$ L3 J3 b5 X2 I& ?! |0 ]>>> print " ".join(a)
9 N$ l' F: P* o; z: S7 vCode mentor Python Developer
. b+ a/ `8 F& ~
多列表元素分别相加: Z& e6 V6 ^& {2 n, g
1) ~" J1 g) O2 K1 E
2" U" B1 ~! {. `+ f
3. F2 U5 [  }3 t& r
4& i9 B3 Z& F9 y! g" J
54 [, F+ E7 \% l5 _1 q
6
/ ?5 @8 ?9 e: ^2 A7. B. K: H% p8 r3 N
8
- H, S' v+ |- k1 a) ^
list1 = ['a', 'b', 'c', 'd']
. G, R' U5 V% y: o* t5 ~3 ?list2 = ['p', 'q', 'r', 's']
+ q) V+ x* o% H>>> for x, y in zip(list1,list2):
  a7 c; P4 S1 y) A0 V" v print x, y
  J9 x, {) }2 G. hap
. C" `. l2 e* @* @" W( pbq, A9 z+ k9 d9 m, O/ e
cr
' `5 R4 H: _) ~ds6 K) ^2 n  W2 C0 K* ?* [) m3 R5 n! U  s) i
将嵌套列表转换成单一列表
" G" x& T5 W( M1 I
1
7 P; q' K# L7 I6 u# z# o  D* |' `2
# Y3 l, S& u/ ~3" \, r1 F! f( Q. U
4& S% B- t! c6 R: `
a = [[1, 2], [3, 4], [5, 6]]
- P* @" |8 ~  T! ?& f' `>>> import itertools
+ z; d) Q3 T' b7 I>>> list(itertools.chain.from_iterable(a))
7 C0 M4 G' m9 f& \[1, 2, 3, 4, 5, 6]
; @: i! r. f# Z& M( d. R  o3 \
列表内元素相加- R$ h  k+ r7 p4 L
1
$ m" \) K: q6 j/ ?2! ]1 e  K" v) n- u6 ]/ e( X- g
a=[1,2,3](数字)  c7 C! H8 p. d: Y
sum(a)3 n: j  k9 a9 {5 a2 S
产生a-z的字符串列表( H0 K1 i/ |2 D+ h5 V
1
- p. B, k5 A+ T. ^; ]3 z
map(chr,range(97,123))
6 M4 `# W1 u8 g5 Q0 Z( F* W
列表复制
6 O0 b7 N% f: M, g
1
5 v9 u7 ^3 O& _' h" X2
- Z8 N2 o$ b  n/ w9 A& X3
+ o6 h8 c, C/ y1 T* I6 v4 D  M
a=[1,2,3]
# @( y' n+ ]4 {b=a% [! ~3 p- @/ A7 f& H
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。9 c/ }) G& T) D- r3 h: m2 f
列表解析if+else配合列表解析9 e+ K! e4 Y& h% t  h
1( \2 w$ C, ~9 o8 S8 B+ Y! |& q4 n( u% \
[i if i >5 else -i for i in range(10)]
, D) a9 x7 e. u8 l  Z5 }; P7 z
字典操作(dict)筛选出值重复的key' X* i, o1 J4 N3 a
1
. W/ u* |3 Z) P: @2
: a! h& v  @) t% t% e3- r4 O8 p; W) V
4. ?8 H; C& l; H4 N
55 W! Y* A: S; |4 d
6) D+ Q! f6 M8 P3 H. [
list1=self.dict_ip.items()   e1 k5 ?- p, @# b0 J9 P) E6 z- D+ {# l$ ~
ddict=defaultdict(list)3 I% T! |+ K$ {; t& `/ e
for k,v in list1:
& ?/ H# X) D% X; h9 j ddict[v].append(k)
! m& m! W: m1 \+ e list2=[(i,ddict) for i in ddict if len(ddict)>1]1 L' b. f; ~. {
dict_ns=dict(list2)
2 v9 B. V: X- k3 d: X% d
字典排序(py2)
3 \* H% q& y7 w+ D& c9 n; @5 d
1! [  J2 H6 i9 z% R& m# a7 h
2
% i+ E4 [" G) |2 s
file_dict={"a":1,"b":2,"c":3}
2 f2 z; e7 Z3 f$ nfile_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。
) ~. t; ]& [) Y
模块操作导入模块时,设置只允许导入的属性或者方法。
0 O# I3 w& f; g9 x2 L$ \# Y8 W" N
1
+ A* R8 O# c5 K3 e$ B2/ {( `! b: P; q9 [+ [' y
3* y. V9 b, F* O. d) a" O
4
3 ~/ G/ l- c, h% E$ I4 C8 i& a! E5
3 ?9 P8 ~* `) J; \7 V$ W9 ?2 w2 e% Z6; I) W  }2 P4 u, u4 |4 C- h
73 O5 V0 P7 _* e1 t9 S6 r3 B" a
8
( C- L5 I1 W, f1 B# L9
" j( ]2 Y( K& Y! Y. m" I" R4 F109 M+ g2 u4 l* ?; h  L7 J! H' b9 M
fb.py:
# L% c, v2 O3 q' u- o! I; i" I-----------------------% w/ n  d0 C' c
__all__=["a","b"]
! y2 ~8 o0 q) k' e! _/ L, p  x% Ga="123"
# g/ h! x* T; Ic="2345"! S+ C3 X5 r- S- H. z
def b():
' C3 Q( l3 S' j3 [% {: L print “123”
6 i$ A' K1 ~; d& ~-----------------------  c' ?2 a3 }8 t! `, a
from fb import *
" l& w- q8 G. J( L$ H1 C可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。
; o! g# V* }; R" S* N" J" l
导入上级目录下的包
/ M% Y5 ~  u& r- R' @3 U! S
1
, u+ X' P6 E, P+ [+ @2
: R$ K- Q( W+ {2 ?- d3 H5 m: M2 O
sys.path.append("..")1 U  s" s  ~0 w
from spider.spider_ import spider_; X3 h" |9 U/ R, X3 ?+ L
导入外部目录下的模块
# L1 i: }* x. |7 s
14 ^$ e+ H1 Q2 [8 _- k
需要在目标目录下创建__init__.py文件,内容随便。( h) v! i1 V, B& ~; G
增加模块属性
8 t( G4 u" i  [7 f* `0 v
1/ J$ x. }3 Y4 d, Y$ H4 t
2% w; ~/ `( y4 y" w
3
5 X, G9 N6 K: x/ g! r) G4
6 i2 L5 y, ]: \, D% \" B
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。5 C7 T4 C& F. d( A& X: Y* q
a.py:" g6 K$ S. j5 H5 T# C$ g. m) ~
#! -*- coding:utf-8 -*-5 b* \+ M. u: y) V- L1 [' K
__author__="nMask"! u& v! ]. c5 p
然后当我们导入a这个模块的时候,可以输出dir(a)看看; R( J$ z7 U, I8 Z( l( D$ f  D1 Z. J
1; e( Z; `7 |; L; A; _
2
* X2 |8 ~/ N( u) ~% l$ A  b4 K5 z  k3
( q2 R& d% U% Q7 M49 D1 |3 o, ~4 P8 m
59 M" V1 f# z# ?6 j6 n
>>> import p' N. z3 L( X3 t
>>> print dir(p)7 x- U3 q4 p  Q* f) G/ f
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']6 I8 m+ M! _) E8 t) x/ X
>>> print p.__author__
" ?0 Q) Z1 Q, ?2 I3 }7 N; R7 vnmask* M2 q- z- k  v$ L* m" _8 F
动态加载一个目录下的所有模块2 V% l: l4 U8 d0 z6 @" w% H# r
1
( }/ W8 G0 B- T; \( N2
1 `$ t7 G3 U4 b" K6 Q1 \3. s% {- }( W( g5 J
4
0 a+ a7 Q6 F8 ?: \: H- }50 X- u7 z" n% E5 ^2 O% |
6" I8 ~4 G; m1 u6 e$ {
76 X" t! s/ J/ D0 \, t* h0 c
8
7 {( t1 {  r# J+ X" }  l9
+ p$ G4 V2 Q) ^6 `0 q# q10
% t' g2 }, f1 w3 G% J11
; L) A* r, ]* z7 F- x
目录:
4 F; R( P" p. I3 j6 i4 h---test$ D0 p7 D* J) h& f4 t
----a.py8 M% y( \1 U+ n+ O+ E
----b.py/ N) q2 g- }, [7 H$ H
---c.py
) {$ P# K4 K$ Sc.py导入test下面的所有模块:7 @3 B) a2 m8 b' h5 |! y
for path in ["test"]:
: H4 G" F% t: V$ `) T for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):
* B. J2 E! ?4 A if i!="__init__" and i!=".DS_Store": ##排除不必要的文件
7 ^- }) b1 E. D import_string = "import path+"."+i+"
: q, a8 X" g) c# b exec import_string #执行字符串中的内容
2 ^7 v1 m! Y' i& \4 g
函数操作装饰器函数输出当前时间装饰器* N' \/ ]1 y. x& M) o: a( r. j7 _
13 t; S# o/ g6 n9 F6 ^# B' U+ y$ Q# \/ ~
2+ i, h/ W- ~1 Y6 a! e9 A# S
3
  @$ m6 g! T9 W6 u( y48 e- u* D* ]* A6 P
5% C( w% Q7 L4 j3 b
def current_time(aclass):2 w0 Q4 o  G$ S2 p6 l: w0 n
def wrapper():# _3 p1 x8 N9 X8 r1 V' E1 `
print "[Info]NowTimeis:",time.ctime()
0 u) b0 O) X* L$ Y0 C5 e return aclass(): q6 d: I& \# }! x7 j
return wrapper* `. y9 A! I$ L* Z# M
itertools迭代器6 f6 A3 h: W4 B  t1 A8 J7 s
1' L% I! y4 e! s; N+ S2 V5 d2 t
2
& L# L" \/ u6 z. \, e3' I# U3 ~4 f# o; I
p=product(["a","b","c","d"],repeat=2)
3 ~. }+ N* ^: U. {" {$ g) w----, U) q8 B6 m1 k4 d' E# s: M- n
[("a","a"),("b","b")......]/ u, z2 Z( R4 S7 i. O
reduce函数函数本次执行的结果传递给下一次。, n9 x5 `1 P$ Q. V' n. I8 B
1
5 @% z+ k" ~2 Z' `, i$ H2
8 z$ `  F  @  h- [% ?% L38 ]$ u, k9 X! m+ h
4! H2 h6 i% I9 K; B$ q$ _) M+ P# K
def test(a,b):
. K/ f2 D, h; N( y, [* h  D: ]7 `" I return a+b$ v; r" n" u. B% [8 h; s
reduce(test,range(10))
  g( ^! h6 V. Z& H结果:从0+1+2......+9
3 s" [2 x& P* Q  z! B, f$ C
) T" h, ~4 y1 Q9 I
如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

精彩评论19

fabao 发表于 2017-12-31 08:34:59 | 显示全部楼层
好尴尬,没人看嘛?
回复

使用道具 举报

cck123 发表于 2017-12-31 08:38:55 | 显示全部楼层
货太干了,值得收藏
回复

使用道具 举报

assdsss 发表于 2017-12-31 08:41:46 | 显示全部楼层
不错不错,高级技能!
回复

使用道具 举报

oLjwRgTm 发表于 2017-12-31 08:44:50 | 显示全部楼层
毕竟能静下心来好好学习的人真是不多
回复

使用道具 举报

ASUKI 发表于 2017-12-31 08:48:35 | 显示全部楼层
这是写控制台的语句吗
回复

使用道具 举报

bigocean 发表于 2017-12-31 08:51:42 | 显示全部楼层
写得不错!
回复

使用道具 举报

qXwqtnuK 发表于 2017-12-31 08:54:38 | 显示全部楼层
小编加油    是不是怀疑没过审核
回复

使用道具 举报

vsCnfaOT 发表于 2017-12-31 08:58:32 | 显示全部楼层
内容很老了,也谈不上奇巧,都是手册上内容。递归查找文件那个直接用os.walk或os.path.walk要省事多了。
回复

使用道具 举报

6363 发表于 2017-12-31 09:02:14 | 显示全部楼层
奇淫技巧吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图