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

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python2 {% Z# j" e3 ?% b+ n2 Z9 u  G3 W! Q
1 P( a. x* x. ^0 j( Q4 Q. W
对于python,我给大家总结了以下几点:& U/ A/ x6 _" n9 D. u
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。- Z# \$ O; O0 c# t3 U; n) P
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
1 ~# q1 F$ `3 W6 w
  S7 L, z2 E; s/ V8 j

    8 J: w* Z. w  K( o$ M; e2 Q, l  J$ V
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。6 F2 q4 L6 [& h
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。3 Y6 X2 g& Y  p9 G/ u
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。; @, T# [0 `: M4 Q' H) D$ B& R; O
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
    1 t; P* S6 z, w! B+ u6 R8 X9 N  y
在这里,我给大家就分享一个关于Python的奇技淫巧吧!+ K* L2 u; g& |% ]' @; f* X
控制台操作控制台不闪退
% X4 q* M$ |% q1 h
1
- b  k7 Z+ y+ F+ W2 P) A" t
os.system('pause'); ^. G% r- N9 j. ~% J# m" |0 }
获取控制台大小. n- }! ~' _+ G) H; g7 z
1
$ Z; j! l  m6 @  E- W$ q% v/ f6 e
rows, columns = os.popen('stty size', 'r').read().split()
) R; U3 a6 F6 E
输入输出控制解决输入提示中文乱码问题3 J/ x1 u" J% h
1
+ w. L- W1 m: H& b5 `
raw_input(unicode('请输入文字','utf-8').encode('gbk'))
& J: m8 M0 a* S" f' s1 b- _# ^1 B
格式化输出
# W% C5 I6 K9 z
1, k+ O1 d: |) `- @8 M
print a.prettify()
) j/ g+ q/ D! m9 n
接受多行输入* q6 A' ~: p% j; T. l
1& b$ m+ b% n  {
20 M" E( @0 m! W, q2 s
3" D  n. i4 Z4 a& N6 {4 P
4
: E; B4 {5 u3 z6 r3 I7 s: z5
' F" C6 l/ v$ Q7 }; N& X6 d+ V6
# q& }. V* [; p4 L( ^7 N$ I4 L; `7" N' A# S: H$ [5 r2 m" c8 A
8
0 C! E" y# D  {% f: t+ n/ S9
- C* A8 }  C# W- T0 j( F4 M/ l" m; ~10" n. b7 E  y# g
11
0 `2 y3 P4 f2 H, J" t& Z125 s. Q1 v5 w& [9 m) D
13
( i; P! {- v0 R14
& I$ B- A- O# q' r3 W1 X  ?: t15; t6 ^& M2 L- g3 j1 p7 U( G
text=""
8 W6 z, q& F. H- S- j. Ywhile 1:. _* C4 B  s' R3 }! c
data=raw_input(">>")
! @1 _/ Q$ O& K+ |3 Q if data.strip()=="stop":
: o# c* g) J; E3 E7 P8 ]+ ^: Y6 T break% I8 i7 ^- V% O  l/ s
text+="%s\n" % data
1 c! H1 t: W( y; Rprint text
; M, j+ r. j  h& W" m---------------------------
% e9 z9 Q, n  l. g, I>>16 z) z4 S7 N5 m$ `& c
>>22 A7 @+ u0 a3 [! n3 L. a2 m
>>3
( [5 C, b0 i7 k8 P2 P5 s>>stop* _0 _" W% d4 A! a; U& ~$ R: K. W
11 O. D% R7 |' Y6 g8 Y* f% ?
2
, V% ^7 n: B1 P2 n- o6 G7 J3! ~- y+ q( W$ @- d/ _- |0 [
同行输出4 h  k, Y' w* Q1 ^
18 I2 b' d( u9 k4 n3 e
2( c( M+ n7 F+ c/ U" I. }2 q5 ?
Print '%s' % a,9 g, \. b; G( h
Print '%s \r' % a# x2 k3 q$ ~. p8 h8 L! R8 ?
标准输入输出+ [8 C$ s, ^9 {' b- }+ n' N; o
1
5 i+ F6 g# K" o1 a' m2) B! ~! J$ ~/ U% U3 E
sys.stdout.write("input") 标准输入9 Q+ `3 I7 T; J- q) I4 H
sys.stdout.flush() 刷新缓冲区* @* _) j. s6 G" c/ p! Z  e
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)
& N# e& u- M" g; |
1
1 y( ^- U! f% X' |3 L, _29 ?* y4 p( l! V- @. x  J8 P6 M
3
" I6 i9 `1 p5 d# M4
; `! S" h4 t& m
WConio.textcolor(WConio.YELLOW)8 x: `& R" @) ]+ o# Y
print "yellow") D' y1 q4 e2 a0 o  R4 C9 O8 ^
WConio.textcolor(WConio.BLUE)) R+ o( g# v: V# _
print "blue"6 h6 z) Q2 c# |4 a  @
输出颜色控制(全平台)0 x* y+ J! G: \% u- d& l
1" M4 d" W% o( J: b8 _" s
20 A+ W9 I8 i/ \' r
3
1 Z4 ~. }! P+ L, e) L4
0 K$ Q/ }& |' O0 ]1 |* g5& x2 h% m8 S$ C; J6 W6 k+ Y) M- O
6
8 C: Z1 g2 F- W5 S+ Q$ O7
+ Z: v8 Y" o3 Y7 D( B% k8" p# y1 U& `& z! K
red = '\033[1;31m'
) ^/ k; I/ x2 O, E  x+ ygreen = '\033[1;32m'
% H3 e+ p. E8 u" x/ o5 i! F$ hyellow = '\033[1;33m'
0 x8 e* u$ x8 L* S! iwhite = '\033[1;37m'
- D# i0 N9 E2 yreset = '\033[0m’% Q: h4 {) _/ k+ |2 a: h1 K7 ~
print red+"color is red"+reset# X6 c1 z. u1 u9 B2 \. [) e% o) j
print green+"color is green"+reset9 r( P* L$ _$ n+ [4 n# }9 _
进度条控制方案一
( j8 M! ^+ L4 y9 ?; ~5 r
1
% F/ y2 \5 D7 O( t1 V5 t2
5 {- \! x; P& r$ d) W9 g' k& Y4 Y3
( |# r. p% c; U5 g; m$ {1 V4
: h, l- [0 w, q$ A9 s" g3 R7 S, H5: v6 [/ Z# ^! v- D' B6 |; v
6
+ R. S% ^% e1 C$ |# V9 E72 W9 L/ \' k$ p) X; L
8: Z6 ^2 }" h( _  u
from __future__ import division
* Z$ M* V) [$ X5 mimport sys,time
6 C) T' ^+ i8 ]0 r; r. Xj = '#'
- i3 M5 P: r- wfor i in range(1,61):5 i8 D9 H+ Z! M6 v
j += '#'' W( N0 p" K; G" m' }2 Q9 P0 ]& g; Q
sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")$ h, p  y, `2 D+ C( H' U( C
sys.stdout.flush()
, t2 y4 q! N1 N9 `! R# N time.sleep(0.1)
, {0 F; p( t- I
方案二1 A0 v( u4 d  {
1& B- ~7 \& O2 s0 T  u' |/ ]
2
$ B, ~+ e5 @! O3
8 r, D6 {% [9 e8 g0 N" T$ f& ]4
- ]. Y% S, a7 P  o! Q) b5
4 B( |! |) g+ Z) O% j. n" i6
% L8 x, x7 ^; {9 ]
import sys
9 _) o; w0 d$ ~# M' s; |import time
/ ?: l7 I" I: I% h/ Vfor i in range(1,61):( u+ Q- x! X7 @2 H
sys.stdout.write('#'+'->'+"\b\b")
3 E1 A. m5 w9 ~+ J) | sys.stdout.flush(), l' U( `  j$ m
time.sleep(0.5)) C  {4 p8 K' U0 w* S+ |$ u, [5 C9 O
方案三) ~# `' N2 L2 E
1
: t4 N  G( r# [* v4 z2: u/ [5 Y7 C( O3 m  j) M
3  v0 p0 ]5 Q8 }2 k- ?/ Q' z
4* T; p$ I0 P3 V  v' P. Z8 p5 b
5
/ a( X0 M. r" m5 a8 ?0 E6 h6( y# F  J0 B$ g0 [
7
: V5 v% _7 z1 N, K' x* \( c8
7 z* d8 y( [. [" ?. F7 E9
7 ~6 N; k8 y  s( V: s108 n. }7 C3 E6 j2 y8 k- k
11% O( I& w, B5 ^/ h1 J
125 X1 ?+ {2 G, k% c7 c; {9 X
13
) r( m$ y, s1 ^# q( x4 |14
( V- V" m. z7 J15
; K- K9 J  t0 a# S4 B16- D- Y2 t6 d/ Z; k2 p6 ~  b
175 a4 p5 h4 Z: {) j" f' A
18" h: x' C4 u$ z" \, \0 t
193 D! y- @2 \# B4 e8 Q
20$ g0 L4 v0 y" f' }& w6 W( u
215 y& k0 i2 j6 _, E. k
22# Z2 z6 g! {5 }3 ~( v
23) Y9 U" A! }( I. O; Z: k
24' M# ?! l; j# N' R8 l6 P
25" G' e+ j' P: `2 W% @, M
from progressbar import *; `3 B7 N# c" U/ @6 E. u
import time
4 n- x  o8 N1 B, N. ]import os
) Y- d' H  p% R  p' grows, columns = os.popen('stty size', 'r').read().split() #获取控制台size 6 N0 l, c0 Q9 S4 n- n4 e- M3 j
console_width=int(columns)
  R+ f& c9 O! g+ o( Btotal = 10
9 D6 C( [/ F' G8 a# J5 Rprogress = ProgressBar()
5 F! ~# w7 \* b! u( Tdef test():( v% b7 m' J4 R8 n8 X' H! O1 k( b6 ^
'''
$ w6 ~; c  u1 j# J/ B% N' e% _ 进度条函数,记录进度
2 G' i. W3 y$ }' D. V( r$ c) z '''
3 s3 x/ o  Q8 t  |3 z for i in progress(range(total)):8 z% G, Z! `' j5 Y1 D
test2(); V# e9 ~4 W4 E4 }0 v7 b2 C
def test2():
6 _& u* N9 F% k4 r8 L* O '''
( q) p5 {0 |+ A 执行函数,输出结果! p2 g4 e' d3 m+ Q% {3 P  @
'''
- O$ A  v; N5 r( V( |' o& q: Y* n6 o content="nMask'Blog is http://thief.one"' Y2 D0 q' f2 R/ E( I7 |
sys.stdout.write("\r"+content+" "*(console_width-len(content)))/ |- {7 n1 t2 N* @
time.sleep(1)' r$ f" i! Y, J# D/ L! \
sys.stdout.flush()
9 X, c! \/ s3 z% utest()
; X! }" B3 q: l. n/ k# [
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径
4 Q3 a( x; w5 y  I
1& d4 Q  q1 I8 `, r
2
$ ~: h, n; i  v+ b6 [
from distutils.sysconfig import get_python_lib
9 H' `/ ?4 J! `: {print get_python_lib: a8 I* G) |# m9 ^3 v
获取当前时间
- `1 K* i1 `' Q1 C9 U# l
1
7 C6 {+ H& X9 _/ Y% z! C1 Z3 q+ |2/ x. r+ ^/ K" l2 A
3
  y/ L, d0 W( W4
0 ~! F; B! Y% C1 c) {  ~
c=time.ctime()
$ W! Z" H1 S2 `& T) E  A#自定义格式输出
  O2 J6 z7 y# v' q" G& N" F1 fISOTIMEFORMAT=’%Y-%m-%d %X’
8 Y. d, P; Y& N$ K7 u% C- htime.strftime( ISOTIMEFORMAT, time.localtime() )* G" e& m$ G8 p4 X1 j  C, \
查看系统环境变量8 T; ]' t! e, w/ F, x9 Q
18 E) ~$ F0 L( p: T! l5 u/ H$ p+ m
os.environ["PATH"]* H2 R7 A1 Z0 ~" X, o
获取系统磁盘
$ Q/ o& P0 I5 R/ E# W" {
1# |* x1 S) ?9 S2 e5 t* `4 q/ c
os.popen("wmic VOLUME GET Name")
4 `2 T6 J8 p+ p" {
获取当前路径(包括当前py文件名); m, z3 s6 X  s) t
1
% y) K, S5 `$ a+ r8 v: u
os.path.realpath(__file__)- Z4 f" p/ f# }" M; W- w* {
当前平台使用的行终止符( V6 M1 W% D, y! S7 P
1
  w% y% i8 X' N! W9 \
os.linesep. F/ |* n( y4 W- u4 n
获取终端大小0 r0 c/ ^3 J8 @; N
1
" h7 G7 z$ q7 P; g2. x8 t1 r& R0 D0 N/ W4 ]4 {
35 m% S& K+ O+ C0 Q
rows, columns = os.popen('stty size', 'r').read().split()
9 i! B# T8 m* N) W7 Z#python3以后存在可以使用os
) s! {8 p' r* I8 xos.get_termial_size()
  l# e- p% ?! ?' K. ?
退出程序
% R: Q3 O. X4 K; [

    % B1 O+ }3 d1 f1 L/ c5 i- o
  • return:返回函数的值,并退出函数。
    * y& I* n+ S0 R: {5 @
  • exit():直接退出。7 C' C2 Y+ Z4 X' D
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。0 A1 L$ l5 {7 W- I
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)* W& W: `2 ?' H+ n7 b/ U
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序), t# O5 A4 D3 P% l
网络操作域名解析为ip1 Z, O% o9 E- V, f9 M) s& e$ @1 G! h" }
1
3 W4 ^) j! ?8 C3 X% d. ^6 a
ip= socket.getaddrinfo(domain,'http')[0][4][0]1 j5 D- [  `1 O
获取服务器版本信息
. T& H1 `3 C0 h, ~% {7 a! V  {
1
- y+ G8 o! v: e$ v- E2
' l* S( ]9 u3 f, Z- R) [5 Q3
1 n+ r/ b$ r+ F3 e( I
sUrl = 'http://www.163.com'4 O: E* b: O0 [4 V0 p
sock = urllib2.urlopen(sUrl)$ E6 g! I- q. P) L
sock.headers.values()
- ]( b: @- i% R) A3 p# {
文件操作输出一个目录下所有文件名称
/ V2 F6 \8 r! k: U& `. n; x
1& b8 V/ {! S. N
23 O6 E+ ]( i& ?3 p( f9 j
33 C; _$ I1 r6 d
4  l0 E) J& j/ U
5* }1 Z  r9 n* @% N* g
6
5 [3 c0 y& S! ]! V. m7$ J$ W7 u0 K$ q$ ~0 n
8
9 y8 s  b. o1 M9 X. P6 M7 K
def search(paths):/ S# E+ V2 n( v! o" x: a
if os.path.isdir(paths): #如果是目录
6 _+ J: }6 _: a" ^/ Z1 N7 r files=os.listdir(paths) #列出目录中所有的文件
6 ~5 Q; r; X2 @ for i in files:  Z6 t8 ?1 x. s
i=os.path.join(paths,i) #构造文件路径
- Q5 S! a3 f4 \8 q& @ search(i) #递归! O. S& ^  p/ N# @4 ?  u
elif os.path.isfile(paths): #如果是文件
0 E1 p6 {0 f9 x# Q# S0 f* Z" l print paths #输出文件名
6 R7 v/ G( l0 q% U
文件查找: ?7 v) S2 _* ^& h5 G
1  e  o" ~# n8 T" P$ }; d+ d
26 P0 @. _! J5 N5 b3 W' Q; C
3- U9 E" G+ d6 Z; t
43 _) _' h+ D4 k, p  Q! \
5
: O# b9 h; V! g. C% Q5 a/ X6$ `5 G& Y" g  e0 z9 k
import glob
! H9 p5 |4 `8 O0 lprint glob.glob(r"E:/*.txt") #返回的是一个列表  m' ~+ t( _1 \
查找文件只用到三个匹配符:”*”, “?”, “[]“9 Y1 N: [8 Y0 y3 v3 v; G2 U" r
”*”匹配0个或多个字符;
1 r# B5 z* R! e  s& g$ U! u”?”匹配单个字符;& x; a, P- \3 H2 T$ q: }
”[]“匹配指定范围内的字符,如:[0-9]匹配数字。
- i3 x# D' V$ R5 H$ T7 E
查找指定名称的文件夹的路径% A, _: E& F8 Y7 [* S( `
1
) G, c% R* U. S7 F1 F6 o8 x  ?29 B; @, ~9 ?; _1 A* {2 |0 k( k- J% C
3: ^  M0 b  ]9 y1 T; M* n( f
41 A9 T; S- C/ x- e
5
- `7 _0 `& W0 a  o- z4 u6
; Z3 Z5 a1 i2 t* j4 b7 Z" I" @7 b7
* T! L( i6 D) i  a1 Y3 h8
! X" X9 B8 f7 ~# \3 A6 S0 v% d9
8 u+ a7 G! t, H! e& M104 s) O, }) r% q9 a/ q
11
% B7 y. P1 ^; U' x! Y1 o12
6 B! ?5 I( B" Q; @! Q6 L13( C/ E) N/ L. e9 B, g! U2 W9 G
14
+ t& t$ N3 B) u1 e15
2 ?' W( T  H4 i7 F0 R* x0 J5 B166 i- o4 o" N3 g7 R
17% d5 `: i/ U8 y' C
def search(paths,file_name,tag,lists):
. c  ~, s; S3 n; w: n3 g if os.path.isdir(paths): #如果是目录/ z7 N: w( y0 \
if file_name==tag: #如果目录名称为tag$ P( r; A; f7 P) v, D4 u
lists.append(paths) #将该路径添加到列表中* {$ c" G1 C+ o! Y3 I
else: #如果目录名称不为tag
& p4 u" T" r2 K/ M1 q+ K try:
) c, }+ w" i2 i# i. ^% i. G files_list=os.listdir(paths) #列出目录中所有的文件9 s( v% V  \" s' U4 j- I
for file_name in files_list:
0 s, R% j2 Q" @ path_new=os.path.join(paths,file_name) #构造文件路径
2 w# I2 [( O6 D# ]1 l/ D3 E search(path_new,file_name,tag,lists) #递归: l8 p$ o4 `2 Z' o
except: #遇到特殊目录名时会报错
& ^! o' j' H- I7 K pass$ {. w% i4 ~$ l
elif os.path.isfile(paths): #如果是文件, E6 K; L4 W  X: Q
pass
0 s* B7 B( o( j; d5 X return lists
& v# \3 h" Z) A7 }! T
数据操作判断数据类型+ _2 z( {$ D- N1 c9 Q7 u  W
15 m' K- Z7 q. u" `, m
isinstance("123",(int,long,float,complex)
% x2 U$ Y- G; T& f6 F$ Y
字符串(string)去掉小数点后面的数字1 u+ u$ j5 n0 Z( I% L
1" s9 b+ N( g2 U  S2 K3 |
21 F( P2 o& A3 M
a=1.21311
; ^3 l- N; y' H6 Pb=Int(math.floor(a))4 {8 R4 F! H. \: d. O
字符串倒置
1 w2 x6 T( \4 m/ D
1; ^3 r6 Z6 {: q1 S- X9 c, X
2
6 J2 f5 X5 D( E5 C
>>> a = "codementor"6 W5 q: }$ T: @$ M3 T( ~
>>> a[::-1]4 I" I7 S, r; p
字符串首字母变大写1 w* U  F! j0 \7 N
1% _/ O  i& h; j9 L3 _
2) r3 \: m3 r, @* ]5 o8 P/ ^; A
31 d- U! y3 d, J
info = 'ssfef'
/ W3 z# F' I5 J) H8 jprint info.capitalize()
* Q6 T6 \& T! }6 X) n$ J4 g( Kprint info.title(); m7 Y* i# ~! A0 _: j1 ^0 I
返回一个字符串居中,并使用空格填充至长度width的新字符串。/ J  [- {2 M  a7 e6 h
1* s; S+ l8 a  X0 S  H. E" r
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。; m* N0 s; W& |! U/ f. P
列举所有字母5 J, n6 Q$ z! k, k% K. f! g" x1 x4 T
17 ?& @7 ]. t3 O1 ?# S' m0 D. O8 X
2
& o  Q) r* P$ K4 \; z9 N6 n3
+ ~% s( }, A! u& n5 v  v. n# M
print string.ascii_uppercase 所有大写字母
; z7 l1 k+ O2 U# k; z+ Fprint string. ascii_lowercase 所有小写字母
7 m& W( ?- V8 f8 ]print string.ascii_letters 所有字母(包括大小写)  ]# O+ x3 U7 R  U  P, F
列表(list)列表去重
" F: }4 D! a3 [! e$ y( d: V/ B
1, p3 Q: X# d, ^2 Y  L: z0 ]
23 v1 ?: e; W+ L9 K
ids = [1,4,3,3,4,2,3,4,5,6,1]
$ W/ M/ v: j% e3 `3 c( @2 D2 X  F! aids = list(set(ids))- ?/ F, `  _9 l8 ]3 v! N' F
列表运算/ ^( T! H5 z7 y1 j7 M4 Z
14 q% t/ g5 h/ H
2: V  s2 s3 y, b; V$ x& P2 a
3# D& X9 w2 |) O$ T$ J0 t# ~
4- o/ M/ x  u# k5 E( R! y; U& V
5
, n" X  y$ k  n8 G3 z1 y
a=[1,2,3], w  \2 b, {) n- H* W
b=[3,4,5]
8 H6 z/ X0 @, D; Dset(a)&set(b) 与
; l  i0 n2 Q, r2 G2 v( [set(a)|set(b) 或3 b; [- K/ k% v  `( g+ O+ L) z
set(a)-set(b) 非
# k3 v' m: w( A5 P5 S, ]
单列表元素相加, G! z2 a& Y9 b- b
1" C: K0 @: z0 W  H
2/ p2 F, E( h) A  A) a! g% x
3% u4 P9 J" J7 F  c: P" h" p
a = ["Code", "mentor", "Python", "Developer"]
+ S+ a% {: X2 U>>> print " ".join(a)
+ Z+ m: {+ p# r2 e/ @6 rCode mentor Python Developer2 e6 \+ m% ?; _$ L4 e& \" n8 D3 ^
多列表元素分别相加. W+ O7 J5 e' Z0 p
1; [& A0 _: ~* E
2
3 O. n3 t. Z" Z4 s( S& A3
  e& s8 V5 ~. o( T4* `8 I/ x9 \4 t  W1 f7 ^
5( _, w- m1 p7 t. p& N& c" f
6; s9 J4 [/ I! ?1 o  p  m3 R
76 i9 y# g7 c; k$ N* E. d) q
81 _" M3 `  E! [  R. [" D
list1 = ['a', 'b', 'c', 'd']
/ k6 {3 Z( L4 K9 U7 Tlist2 = ['p', 'q', 'r', 's']( N% s2 q' [2 K. M
>>> for x, y in zip(list1,list2):
3 G6 B$ T" {! m! x" _/ K& B1 j print x, y
8 H! b- j& @& Aap
' L" g4 \. \8 j- u. J$ [3 Wbq7 t# k" d1 e3 I% C0 c
cr
' G8 I  y; n& G* J. X& b% P" hds
: u( i2 S: X# c' v7 T* `' Y: g
将嵌套列表转换成单一列表
2 ]' z/ b5 D2 z5 m3 n; P7 ]# T
1. q0 s( o! b! s3 A2 `$ b
2& J0 X" s; Z- a8 j( y
3
( T3 I5 j8 d6 w- S0 K0 s* G4
1 Y) X7 N4 p) \, C
a = [[1, 2], [3, 4], [5, 6]]$ l0 G' K1 A. {1 `' D
>>> import itertools1 i2 w1 |, ]- ?1 F
>>> list(itertools.chain.from_iterable(a))) ]9 `" W" a8 ], p( Y. y. x
[1, 2, 3, 4, 5, 6]
! `5 S  L  W8 |" W
列表内元素相加/ R% i! h2 t  ]& a: Q) A8 R
1+ ]3 l7 A: V" w- {
2, d$ \: W. n, K% ^, u8 d
a=[1,2,3](数字)
4 S& j8 n6 X( y2 `. Z9 b% v  h* o/ @" o5 \sum(a)9 X$ L1 y; x7 R2 i5 y
产生a-z的字符串列表+ m# N$ @: p) E0 h3 e
1
7 Z' p2 ?+ S3 H7 U; V1 {
map(chr,range(97,123))( g# L4 B; N4 n' `+ g& B; N; C$ n5 |
列表复制5 u+ V4 [5 |. s# F9 G% ~
1: P) j- q/ S9 W9 t& u. c4 d$ Q
26 O8 P: @: ?" J
33 e3 `$ I; M4 m3 @. p. \- W
a=[1,2,3]
" f, |- G9 n/ `: x+ jb=a7 ?; J% \9 k6 x9 }$ P5 S+ k) `
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。5 F8 h( u1 i' }+ {- A9 @/ T/ h
列表解析if+else配合列表解析" f; n# ~- a- e4 i3 }/ Q; g
1' a) J5 p3 ?8 b( C6 o
[i if i >5 else -i for i in range(10)]
& Y3 s) f0 N7 f  ^2 _1 l/ K
字典操作(dict)筛选出值重复的key
+ C4 ?4 y- f  E- ^: b2 ^* R8 L
1
7 x4 F  R  D1 j. P2 ~! V28 H7 q6 S( x! q2 D% @
3
8 d: p/ U7 U: w6 {46 C$ Y. W" x" t( D( s7 ^5 ]
5
9 i' \8 i! a: h; o! j/ Y& U6$ @6 s: W; \- E" v% Z
list1=self.dict_ip.items()
/ s3 k' B# A4 q1 v' B9 X ddict=defaultdict(list)
. \$ F  S' T$ ^/ B, b" e for k,v in list1:
. q) B' r: M& |5 z# v' O ddict[v].append(k)
3 w7 ^. L) @% } list2=[(i,ddict) for i in ddict if len(ddict)>1]
8 U$ o& f$ N  e% a0 p* X8 `4 H dict_ns=dict(list2)" v9 y) S2 n8 q( _" V* U
字典排序(py2)5 S' p1 d" K; n, A  ]' y
1
* @/ w2 y8 E# ]7 J* `2% q1 r# m7 O. w
file_dict={"a":1,"b":2,"c":3}, w- K1 D0 u9 D
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。6 l7 m9 x: B8 f: O
模块操作导入模块时,设置只允许导入的属性或者方法。  v0 P2 ^" V$ R; j; |
11 |$ W/ {5 P# a6 f! Z2 N# \: A; D! A
2
* [1 G% v6 b+ n3
6 @  |. I6 e" P; S0 [, ?- h  s4
. z( b% v- H0 E1 ]. g7 I5
4 |& K! @! [9 R6
0 ]  c- r0 ?* V3 @73 x# B, J4 Y3 H" f+ r' o9 Z: c
8
; Y% ]2 X0 r0 k' l  F93 f  b& S2 o; W3 M
10
# b/ \3 k+ }, m5 K
fb.py:
/ }2 l% D9 V2 q-----------------------
0 ~7 w( ~2 f$ M; R9 e__all__=["a","b"]
6 Q% U% ^6 M! T; G+ aa="123"
8 N. B% T6 R0 ic="2345"
3 |2 X- a" V4 `0 Ndef b():
& |% U6 {, m4 r, R! k6 p. { print “123”
. h9 b1 E. L& J* R$ _-----------------------
. ?' l  G  s6 A8 i3 s" ffrom fb import *  A1 W% Z2 H4 ~& O, c6 {  h
可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。
% M5 q& M7 D5 a$ Y$ c
导入上级目录下的包0 O- v. a* ?* s6 J6 ]& ^2 q; q4 l
1
3 R# C/ [" s3 P3 G/ R2 ?2# _; m3 E+ C' v
sys.path.append("..")- h1 l) ^, y* |$ l
from spider.spider_ import spider_" ^  K; d$ J- i5 e: |6 ]2 t
导入外部目录下的模块
7 F) J; M5 o8 ~
1/ p& x9 q$ a0 S4 P* v; A2 l
需要在目标目录下创建__init__.py文件,内容随便。
: k3 a' t4 v6 `; P) x6 F
增加模块属性) S( ?* s/ l5 M" s# z7 e
1
5 P( K; Y# o/ I& Q  S2 E* R2. J3 H9 R9 Y: y6 I7 C( H- ^9 y
3
  F) |& l* i0 c4
" h* A- ]( \& w+ d
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。$ n4 L- ^; g, z
a.py:
; F  o" Q) \, D3 V. V: T$ r! Y9 J- M#! -*- coding:utf-8 -*-
" w# Y" A# |" j- z__author__="nMask"
# o- D% N0 k, b3 @! ^
然后当我们导入a这个模块的时候,可以输出dir(a)看看( a3 l' u% c' e
1
5 x$ h- C! x6 \" \4 K2# g% C5 y% e1 }1 r, J! }0 i+ E
3- C% k% R0 ]) E1 L
4
7 x+ X8 G, m: ^. L: C: K9 ?5% r2 W8 ]+ u' j) j) E
>>> import p
& i9 ~5 n  k; x7 u>>> print dir(p)
2 i! o% O/ O1 ^7 c* D['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']4 V7 L! W5 P5 f7 H
>>> print p.__author__
* v- {& i" l8 d; _0 m0 F( o$ wnmask
' p& S! h$ R& y0 {" s
动态加载一个目录下的所有模块
4 O6 T! v) w3 e4 U3 n+ V0 p* ^
1% n' T) V/ Q. T
2
, G1 H8 n; i1 \2 h" Q; m38 n, y, m6 M8 B2 E2 b, X
46 B: S9 i$ A, ^9 Z9 R* [* F
5" B; |& t2 u1 @
6
! W; x" d, |, v* O; R7
# U- }+ u7 T7 l' Y8; p' m8 H% S1 p) g; c6 n# J% K  S
9$ }" P6 t# C) d8 S& r% ?( h: L
10
) K# Z: ?3 k; c# R% L11
/ Y3 a) x3 O: h8 [& ]* P7 D0 Z
目录:
. J3 t: }* q- O4 A---test( @6 N" h5 g6 A2 d
----a.py
+ _$ n" U0 |( y3 i- H9 w4 B ----b.py9 [' B6 B; P( o+ b/ r( E
---c.py
% M5 ^$ t( }3 |  [! yc.py导入test下面的所有模块:' k$ }- l' |0 w9 U$ ^6 \
for path in ["test"]:9 ^, Y- C9 `5 \/ N
for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):; _! l: f  ?! T* L9 }* |
if i!="__init__" and i!=".DS_Store": ##排除不必要的文件- B- ~" c9 n8 I0 @% W
import_string = "import path+"."+i+"
! p+ m, I9 R$ r" Y  ] exec import_string #执行字符串中的内容4 L# `+ X+ C5 V1 p- j) o
函数操作装饰器函数输出当前时间装饰器8 U5 I, k: o. k4 ~3 N; C4 m$ E
1; W! z" e! G5 S1 T( y
2* X, d9 S! q# o9 v, k1 B( d
32 x& `2 K) ^" w# E3 `3 \6 z1 `: w
4, h1 D& w: w9 r4 r1 f
5+ N( V4 F5 q4 ]3 u
def current_time(aclass):  ^) k* r) e0 l
def wrapper():; J$ m# I* P3 K) [1 a6 u
print "[Info]NowTimeis:",time.ctime()* O% B7 b; _% ]1 k- a: v
return aclass()
8 {) L, z' T6 K+ }( |% E return wrapper  _6 u6 R% J3 B' T$ o
itertools迭代器% Y: o9 B& V' [0 l5 c
18 _" K( `% Z, h- U* {
2: x) e+ J4 V' X  o3 A! @
3
) h) i: r3 y. d0 u7 Z/ A
p=product(["a","b","c","d"],repeat=2): h, Y2 m& i. g
----- P* _" Z3 V* \. \3 v( t
[("a","a"),("b","b")......]$ @4 B0 D' c  f1 t) a
reduce函数函数本次执行的结果传递给下一次。. V% J! b8 [/ X3 W
1
. @3 h: `7 Y* F' M- P: H  M2$ |4 D/ `. U/ N9 l4 g' T- J1 K
3$ C+ ?2 ?1 G5 s; G4 l: {& Z7 ?
4
) X5 n7 z& h1 S2 z' G. q4 z  t& D7 Q
def test(a,b):
2 V* t: e: e1 I- T return a+b
$ @1 O6 t! y3 G6 _reduce(test,range(10))6 ?. f5 ?- |7 ]4 }+ j
结果:从0+1+2......+9
+ m7 Q% D- s# D# L
' K# Y, ~/ n" m  h: O
如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

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

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.|网站地图