实惠的Python功效和特点,效能和特点

亚洲必赢官网 1

您需求明白的、有用的 Python 作用和特征,python特点

 在应用Python多年过后,作者偶尔开采了一部分大家过去不驾驭的成效和特色。一些方可说是卓殊有用,但却未有足够利用。思索到那一点,小编编辑了有个别的您应该通晓的Pyghon功效特色。

在利用Python多年现在,笔者有时候开采了有的大家过去不理解的职能和特征。一些得以算得十分有用,但却绝非充裕利用。想念到这点,小编编辑了部分您应当精通的Python功用特色。

实惠的Python功效和特点,效能和特点。 

 带率性数量参数的函数

  你可能曾经知道了Python允许你定义可选参数。但还有一个措施,能够定义函数放4数量的参数。

  首先,看上边是三个只定义可选参数的例子

亚洲必赢官网 2

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:

亚洲必赢官网 3

 

  今后,让大家看看怎么定义一个足以接受任意参数的函数。我们选拔元组来贯彻。

亚洲必赢官网 4

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

亚洲必赢官网 5

 

带放四数量参数的函数

亚洲必赢官网 6

在行使Python多年现在,小编有时开掘了部分我们过去不知道的机能和特征。一些可以算得相当有用,但却尚无充足利用。记挂到那或多或少,作者编辑了一部分你应当领会的Python作用特色。

 使用Glob()查找文件

  诸多Python函数有着长且全部描述性的名字。然而命名叫glob()的函数你恐怕不通晓它是干吗的唯有您从别处已经深谙它了。

  它像是3个越来越强硬版本的listdir()函数。它能够让你通过使用情势相配来查找文件。

亚洲必赢官网 7

import glob 



# get all py files 

files = glob.glob('*.py') 

print files 



# Output 

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

亚洲必赢官网 8

 

  你能够像上面那样查找八个文件类型:

亚洲必赢官网 9

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

亚洲必赢官网 10

 

  假若你想赢得每种文件的相对路线,你可以在重回值上调用realpath()函数:

亚洲必赢官网 11

import 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

亚洲必赢官网 12

 

你只怕早就知晓了Python允许你定义可选参数。但还有三个方法,能够定义函数自便数量的参数。

在应用Python多年过后,作者偶尔开采了部分大家过去不知晓的效能和特色。一些方可说是相当有用,但却不曾充裕利用。思考到那或多或少,笔者编辑了1部分您应该通晓的Python成效特色。

亚洲必赢官网,带大肆数量参数的函数

您恐怕已经驾驭了Python允许你定义可选参数。但还有三个方式,能够定义函数大肆数量的参数。

首先,看上面是3个只定义可选参数的事例

亚洲必赢官网 13

 

今昔,让大家看看怎么定义二个得以承受放肆参数的函数。大家应用元组来落成。

亚洲必赢官网 14

 

 调试

  上边包车型地铁例证使用inspect模块。该模块用于调节和测试目的时是万分实惠的,它的功效远比这里描述的要多。

  那篇小说不会覆盖那几个模块的各类细节,但会议及展览示给您有的用例。

亚洲必赢官网 15

import logging, inspect 



logging.basicConfig(level=logging.INFO, 

    format='%(asctime)s %(levelname)-8s %(filename)s:%(lineno)-4d: %(message)s', 

    datefmt='%m-%d %H:%M', 

    ) 

logging.debug('A debug message') 

logging.info('Some information') 

logging.warning('A shot across the bow') 



def test(): 

    frame,filename,line_number,function_name,lines,index=\ 

        inspect.getouterframes(inspect.currentframe())[1] 

    print(frame,filename,line_number,function_name,lines,index) 



test() 



# Should print the following (with current date/time of course) 

#10-19 19:57 INFO     test.py:9   : Some information 

#10-19 19:57 WARNING  test.py:10  : A shot across the bow 

#(, 'C:/xxx/pyfunc/magic.py', 16, '', ['test()\n'], 0)

亚洲必赢官网 16

 

率先,看上面是一个只定义可选参数的例证

带放四数量参数的函数

动用Glob()查找文件

基本上Python函数有着长且具备描述性的名字。不过命名字为的函数你大概不驾驭它是干吗的唯有你从别处已经深谙它了。它像是三个更有力版本的函数。它可以令你通过选拔方式匹配来寻觅文件。

亚洲必赢官网 17

 

你能够像上边那样查找四个文件类型:

亚洲必赢官网 18

 

只要您想得到各类文件的绝对路线,你能够在再次回到值上调用函数:

亚洲必赢官网 19

 

 生成唯壹ID

  在多少情状下你需求生成三个唯1的字符串。作者看来众多少人利用md5()函数来到达此目标,但它的确不是以此为目标。

  其实有五个名称叫uuid()的Python函数是用以这一个目标的。

亚洲必赢官网 20

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

亚洲必赢官网 21

 

  你只怕会注意到,纵然字符串是唯一的,但它们背后的多少个字符看起来很一般。那是因为变化的字符串与Computer的MAC地址是相挂钩的。

  为了缩小重复的图景,你能够动用那七个函数。

亚洲必赢官网 22

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

亚洲必赢官网 23

 

亚洲必赢官网 24

您可能曾经知道了Python允许你定义可选参数。但还有三个措施,能够定义函数自便数量的参数。

调试

下边的事例使用模块。该模块用于调节和测试目标时是分外管用的,它的效力远比这里描述的要多。

那篇小说不会覆盖这一个模块的各种细节,但会展现给你有的用例。

亚洲必赢官网 25

 

 序列化

  你已经须要将三个复杂的变量存款和储蓄在数据库或文本文件中吗?你不要求想1个怪诞的艺术将数组或对象格转化为式化字符串,因为Python已经提供了此功能。

亚洲必赢官网 26

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']

亚洲必赢官网 27

 

  那是2个原生的Python连串化方法。可是近几年来JSON变得流行起来,Python加多了对它的支撑。未来您能够利用JSON来编解码。

亚洲必赢官网 28

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'="">

亚洲必赢官网 29

 

  那样更紧密,而且最关键的是如此与JavaScript和不少任何语言包容。可是对于复杂的靶子,其中的部分新闻恐怕有失。

明天,让大家看看怎么定义2个可以承受任性参数的函数。我们应用元组来兑现。

首先,看下边是一个只定义可选参数的例证

变动唯壹ID

在有些情况下你需求生成三个唯一的字符串。笔者见到许多人使用md伍()函数来到达此目标,但它确实不是以此为目标。其实有二个名叫uuid()的Python函数是用以那些目的的。

亚洲必赢官网 30

 

您或然会小心到,即便字符串是举世无双的,但它们背后的多少个字符看起来很一般。那是因为变化的字符串与Computer的MAC地址是相挂钩的。

为了削消肉复的景况,你能够行使那四个函数。

亚洲必赢官网 31

 

 压缩字符

  当提及收缩时我们屡见不鲜想到文件,比如ZIP结构。在Python中得以减少长字符,不涉及其余档案文件。

亚洲必赢官网 32

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

亚洲必赢官网 33

 

亚洲必赢官网 34

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: 

序列化

你已经需求将三个繁杂的变量存款和储蓄在数据库或文本文件中呢?你无需想一个古怪的艺术将数组或对象格转化为式化字符串,因为Python已经提供了此功能。

亚洲必赢官网 35

 

那是1个原生的Python系列化方法。然则最近几年JSON变得流行起来,Python增多了对它的支撑。以往您能够应用JSON来编解码。

亚洲必赢官网 36

 

这么更紧凑,而且最关键的是如此与JavaScript和大多别样语言包容。不过对于复杂的对象,在那之中的部分音信只怕丢掉。

 注册Shutdown函数

  有可模块叫atexit,它可以令你在脚本运转完后立马推行一些代码。

  假让你想在本子实施落成时度量一些标准数据,比方运行了多久:

亚洲必赢官网 37

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

亚洲必赢官网 38

 

   打眼看来一点也不细略。只须求将代码增加到剧本的最尾部,它就要剧本结束前运维。但假若脚本中有一个沉重错误恐怕脚本被用户终止,它或然就不运营了。

  当您使用atexit.register()时,你的代码都将试行,不论脚本因为何来头甘休运作。

选拔 Glob() 查找文件

现今,让我们看看怎么定义2个方可承受大4参数的函数。我们利用元组来促成。

减去字符

当谈到缩减时大家常常想到文件,比如ZIP结构。在Python中能够收缩长字符,不关乎任何档案文件。

亚洲必赢官网 39

 

 结论

  你是还是不是察觉到那些不是广为人知Python特性很有用?请在商酌处与我们大饱眼福。多谢你的阅读!

Python
作用和特征,python特点
在运用Python多年之后,笔者偶尔开采了某个大家过去不知道的成效和特性。一些方可说是…

基本上Python函数有着长且富有描述性的名字。可是命名称为glob()的函数你也许不亮堂它是怎么的只有您从别处已经熟稔它了。

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  

注册Shutdown函数

有可模块叫,它可以令你在脚本运营完后眼看施行一些代码。

倘令你想在本子施行完毕时衡量一些原则数据,举例运转了多久:

亚洲必赢官网 40

 

不明看来很简短。只需求将代码增添到剧本的最底部,它将要本子结束前运营。但如若脚本中有二个致命错误或许脚本被用户终止,它可能就不运转了。

当您选择atexit.register()时,你的代码都将进行,不论脚本因为啥原因结束运营。

亚洲必赢官网 41

它像是二个更加强有力版本的listdir()函数。它能够让您通过采纳形式相配来找出文件。

应用Glob()查找文件

结论

你是否察觉到这几个不是广为人知Python个性很有用?请在商议处与大家分享。多谢你的开卷!

亚洲必赢官网 42

大概Python函数有着长且具备描述性的名字。不过命名字为glob()的函数你只怕不知底它是为什么的唯有你从别处已经深谙它了。

您能够像上面那样查找四个文件类型:

它像是一个更结实大版本的listdir()函数。它能够让你通过运用方式相称来寻找文件。

亚洲必赢官网 43

import glob     # get all py files  files = glob.glob('*.py')  print files     # Output  # ['arg.py', 'g.py', 'shut.py', 'test.py']  

一旦您想获取每种文件的相对路线,你能够在再次回到值上调用realpath()函数:

您能够像上边那样查找多少个文件类型:

亚洲必赢官网 44

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()函数:

上边包车型地铁例证使用inspect模块。该模块用于调节和测试目标时是相当管用的,它的效益远比这里描述的要多。

import 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  

那篇小说不会覆盖这几个模块的各类细节,但会呈现给您有的用例。

调试

亚洲必赢官网 45

下边包车型客车例证使用inspect模块。该模块用于调试目标时是格外实用的,它的成效远比这里描述的要多。

变化唯一 ID

那篇作品不会覆盖那几个模块的每种细节,但会议及展览示给你某些用例。

在多少情形下您须要生成一个唯1的字符串。笔者见状众四个人利用md伍()函数来落成此目标,但它的确不是以此为目的。

import logging, inspect     logging.basicConfig(level=logging.INFO,      format='%(asctime)s %(levelname)-8s %(filename)s:%(lineno)-4d: %(message)s',      datefmt='%m-%d %H:%M',      )  logging.debug('A debug message')  logging.info('Some information')  logging.warning('A shot across the bow')     def test():      frame,filename,line_number,function_name,lines,index=\          inspect.getouterframes(inspect.currentframe())[1]      print(frame,filename,line_number,function_name,lines,index)     test()     # Should print the following (with current date/time of course)  #10-19 19:57 INFO     test.py:9   : Some information  #10-19 19:57 WARNING  test.py:10  : A shot across the bow  #(, 'C:/xxx/pyfunc/magic.py', 16, '', ['test()\n'], 0)  

实质上有二个名字为uuid()的Python函数是用以那个目标的。

变化唯1ID

亚洲必赢官网 46

在多少情形下您供给生成2个唯一的字符串。小编看来众多少人利用md伍()函数来完结此目标,但它的确不是以此为目标。

你大概会专注到,即使字符串是并世无双的,但它们背后的几个字符看起来很相像。那是因为变化的字符串与Computer的MAC地址是相关联的。

其实有1个名称为uuid()的Python函数是用于这些目标的。

为了减小重复的景况,你能够运用那多少个函数。

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  

亚洲必赢官网 47

你大概会小心到,即便字符串是天下无双的,但它们背后的几个字符看起来很相似。这是因为变化的字符串与Computer的MAC地址是相交换的。

序列化

为了削控食复的景观,你能够选择那多少个函数。

你早已必要将2个复杂的变量存款和储蓄在数据库或文本文件中吗?你无需想叁个稀奇奇怪的法门将数组或对象格转化为式化字符串,因为Python已经提供了此功用。

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  

亚洲必赢官网 48

序列化

那是1个原生的Python类别化方法。不过近年来JSON变得流行起来,Python加多了对它的支撑。未来您能够运用JSON来编解码。

你已经需求将八个犬牙相错的变量存款和储蓄在数据库或文本文件中呢?你无需想贰个奇怪的措施将数组或对象格转化为式化字符串,因为Python已经提供了此意义。

亚洲必赢官网 49

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']  

那般更紧凑,而且最首要的是那样与JavaScript和多数别的语言包容。可是对于复杂的靶子,个中的有的音讯大概丢掉。

那是一个原生的Python连串化方法。不过近年来JSON变得流行起来,Python加多了对它的支撑。现在你能够使用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'="">  

当谈到缩减时我们平日想到文件,举例ZIP结构。在Python中能够减弱长字符,不关乎任何档案文件。

那样更紧密,而且最重大的是这般与JavaScript和重重别的语言包容。然则对于复杂的对象,在那之中的壹部分新闻大概丢掉。

亚洲必赢官网 50

调整和减弱字符

注册 Shutdown 函数

当聊起缩减时大家平日想到文件,比如ZIP结构。在Python中能够减小长字符,不关乎任何档案文件。

有可模块叫atexit,它能够令你在脚本运转完后即时试行一些代码。

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函数

亚洲必赢官网 51

有可模块叫atexit,它能够令你在脚本运维完后马上实行一些代码。

暧昧看来相当的粗略。只需求将代码增多到剧本的最底部,它就要剧本结束前运营。但一旦脚本中有1个沉重错误只怕脚本被用户终止,它可能就不运转了。

要是你想在本子试行完结时衡量一些条件数据,比方运营了多久:

当您利用atexit.register()时,你的代码都将实施,不论脚本因为何来头甘休运营。

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  

不明看来很简短。只要求将代码增添到剧本的最尾部,它就要本子甘休前运转。但万1脚本中有2个致命错误只怕脚本被用户终止,它大概就不运维了。

当你选用atexit.register()时,你的代码都将举办,不论脚本因为啥原因甘休运营。

结论

您是不是开掘到那三个不是广为人知Python特性很有用?请在争辩处与我们享受。多谢您的翻阅!

【编辑推荐】

网站地图xml地图