GeorgeYang'Blog

my technology blog

你所不知道的python特点及语句

阅读:262 创建时间:16-02-02 00:57:34 tags:



1.自定义可选参数

方法1:自定义可选参数

 def function(arg1="",arg2=""):
     print "arg1: {0}".format(arg1)
     print "arg2: {0}".format(arg2)

 function("Hello", "World")
 # prints args1: Hello
 # prints args2: World

 function()
 # prints args1:
 # prints args2

方法2:元组实现,类似java func(Object arg...)

 def foo(*args): # just use "*" to collect all remaining arguments into a tuple
     numargs = len(args)
     print "Number of arguments: {0}".format(numargs)
     for i, x in enumerate(args):
         print "Argument {0} is: {1}".format(i,x)

 foo()
 # Number of arguments: 0

 foo("hello")
 # Number of arguments: 1
 # Argument 0 is: hello

 foo("hello","World","Again")
 # Number of arguments: 3
 # Argument 0 is: hello
 # Argument 1 is: World
 # Argument 2 is: Again

使用Glob()查找文件

Glob()可以说是一个更强大版本的listdir()函数(它可以让你通过使用模式匹配来搜索文件)

 #模糊搜索
 import glob

 # get all py files
 files = glob.glob('*.py')
 print files

 # Output
 # ['arg.py', 'g.py', 'shut.py', 'test.py']

多类型搜索

 import itertools as it, glob

 def multiple_file_types(*patterns):
     return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns)

 for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements
     print filename

 # output
 #=========#
 # test.txt
 # arg.py
 # g.py
 # shut.py
 # test.py

调用realpath()函数显示绝对路径

 mport itertools as it, glob, os

 def multiple_file_types(*patterns):
     return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns)

 for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements
     realpath = os.path.realpath(filename)
     print realpath

 # output
 #=========#
 # C:\xxx\pyfunc\test.txt
 # C:\xxx\pyfunc\arg.py
 # C:\xxx\pyfunc\g.py
 # C:\xxx\pyfunc\shut.py
 # C:\xxx\pyfunc\test.py

生成唯一id

1.UUID

 import uuid
 result = uuid.uuid1()
 print result

 # output => various attempts
 # 9e177ec0-65b6-11e3-b2d0-e4d53dfcf61b
 # be57b880-65b6-11e3-a04d-e4d53dfcf61b
 # c3b2b90f-65b6-11e3-8c86-e4d53dfcf61b

2.mac地址+key+data

 import hmac,hashlib
 key='1'
 data='a'
 print hmac.new(key, data, hashlib.sha256).hexdigest()

 m = hashlib.sha1()
 m.update("The quick brown fox jumps over the lazy dog")
 print m.hexdigest()

 # c6e693d0b35805080632bc2469e1154a8d1072a86557778c27a01329630f8917
 # 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

序列号

1.python以前的序列化方法:

 import pickle

 variable = ['hello', 42, [1,'two'],'apple']

 # serialize content
 file = open('serial.txt','w')
 serialized_obj = pickle.dumps(variable)
 file.write(serialized_obj)
 file.close()

 # unserialize to produce original content
 target = open('serial.txt','r')
 myObj = pickle.load(target)

 print serialized_obj
 print myObj

 #output
 # (lp0
 # S'hello'
 # p1
 # aI42
 # a(lp2
 # I1
 # aS'two'
 # p3
 # aaS'apple'
 # p4
 # a.
 # ['hello', 42, [1, 'two'], 'apple']

2.流行的json序列化方法

 import json

 variable = ['hello', 42, [1,'two'],'apple']
 print "Original {0} - {1}".format(variable,type(variable))

 # encoding
 encode = json.dumps(variable)
 print "Encoded {0} - {1}".format(encode,type(encode))

 #deccoding
 decoded = json.loads(encode)
 print "Decoded {0} - {1}".format(decoded,type(decoded))

 # output

 # Original ['hello', 42, [1, 'two'], 'apple'] - <type 'list'="">
 # Encoded ["hello", 42, [1, "two"], "apple"] - <type 'str'="">
 # Decoded [u'hello', 42, [1, u'two'], u'apple'] - <type 'list'="">

字符串压缩

 import zlib

 string =  """   Lorem ipsum dolor sit amet, consectetur
                 adipiscing elit. Nunc ut elit id mi ultricies
                 adipiscing. Nulla facilisi. Praesent pulvinar,
                 sapien vel feugiat vestibulum, nulla dui pretium orci,
                 non ultricies elit lacus quis ante. Lorem ipsum dolor
                 sit amet, consectetur adipiscing elit. Aliquam
                 pretium ullamcorper urna quis iaculis. Etiam ac massa
                 sed turpis tempor luctus. Curabitur sed nibh eu elit
                 mollis congue. Praesent ipsum diam, consectetur vitae
                 ornare a, aliquam a nunc. In id magna pellentesque
                 tellus posuere adipiscing. Sed non mi metus, at lacinia
                 augue. Sed magna nisi, ornare in mollis in, mollis
                 sed nunc. Etiam at justo in leo congue mollis.
                 Nullam in neque eget metus hendrerit scelerisque
                 eu non enim. Ut malesuada lacus eu nulla bibendum
                 id euismod urna sodales. """

 print "Original Size: {0}".format(len(string))

 compressed = zlib.compress(string)
 print "Compressed Size: {0}".format(len(compressed))

 decompressed = zlib.decompress(compressed)
 print "Decompressed Size: {0}".format(len(decompressed))

 # output

 # Original Size: 1022
 # Compressed Size: 423
 # Decompressed Size: 1022

注册Shutdown函数

脚本运行完毕后会执行shutdown函数:

 import atexit
 import time
 import math

 def microtime(get_as_float = False) :
     if get_as_float:
         return time.time()
     else:
         return '%f %d' % math.modf(time.time())
 start_time = microtime(False)
 atexit.register(start_time)

 def shutdown():
     global start_time
     print "Execution took: {0} seconds".format(start_time)

 atexit.register(shutdown)

 # Execution took: 0.297000 1387135607 seconds
 # Error in atexit._run_exitfuncs:
 # Traceback (most recent call last):
 #   File "C:\Python27\lib\atexit.py", line 24, in _run_exitfuncs
 #     func(*targs, **kargs)
 # TypeError: 'str' object is not callable
 # Error in sys.exitfunc:
 # Traceback (most recent call last):
 #   File "C:\Python27\lib\atexit.py", line 24, in _run_exitfuncs
 #     func(*targs, **kargs)
 # TypeError: 'str' object is not callable

else高级用法

1.用于非正常循环结束

 def print_prime(n):
     for i in xrange(2, n):
         # found = True
         for j in xrange(2, i):
             if i % j == 0:
                  # found = False 
                 break
         else:# ==> if has break
             print "{} it's a prime number".format(i)
         # if found:
                   # print "{} it's a prime number".format(i)

 print_prime(7)

 2 it's a prime number
 3 it's a prime number
 5 it's a prime number

2.try except没有出现except

 def my_to_int(str_param):
     try:
         print int(str_param)
     except ValueError:
         print 'cannot convert {} to a integer'.format(str_param)
     else:
         print 'convert {} to integer successfully'.format(str_param)

 my_to_int("123")
 my_to_int("me123")

 123
 convert 123 to integer successfully
 cannot convert me123 to a integer

博客出处

原文: http://python.jobbole.com/84228/

http://python.jobbole.com/84270/