python 高级 单例模式 异常 模块

单例模式是软件开发中一种常用的设计模式,其目的是未来保证系统中一个类只有一个实例。即一个类只有一个对象实例。 
使用python实现单例模式有4种方案: 
1.使用import 
首先编写一个singleton.py的文件

#singleton.py
class Singleton(object):
    def My_singleton():
        pass
mysingleton = Singleton.My_singleton()12345

使用时候直接import

from singleton import mysingleton
class myclass:
    a=1

异常:

Python中使用Try—–except来捕获异常

def(a,b):
    try:
        return a/b
    except Exception as e:
        print(e)

捕捉多个异常:

try:
    #your code
except (ZeroDivisionError,TypeError,ValueError) as e:
    print(e)
    #how to deal

finally

如同其意,最后的操作,这个的好处就在于无论触发异常或者没有触发异常都会执行finally。
最常见的应用情景就是线程锁和进程锁,就算进程或线程执行过程中出现异常,也必须释放锁,否则整个程序就会被锁死在这里了

模块是程序:
  任何python程序都可以作为模块导入;
  通过python IDLE执行保存在文件夹中的文件:
  编辑一个python文件hello.py,保存在文件夹D:\program files (x86)\python3.5下,然后进行下面操作:
    
  这里是告诉编译器,除了从默认的目录中查找外,还要从D:\program files (x86)\python3.5中查找模块;
  生成的.pyc文件是(平台无关的)经过处理(编译)的,已经转换成python能够更加处理的文件,如果再导入相同的模块,导入的是.pyc文件,而不是.py文件;
  如果再次导入,就什么也不会发生了:
    
  这些内容只需要定义一次,所以导入多次效果与导入一次是相同的。
  如果希望重新导入生效,python2中还有另外一种方法:hello = reload(hello),python3已经去掉了该方法。
模块用于定义:
  在模块中定义函数(主要用于代码重用):
  #hello.py 
     def hello():
        print ('hello nannan!!')
  执行:
    
模块被用来定义函数,类和其他一些内容,但是,有时候在模块中需要添加一些检查模块本身是否能正常工作的测试代码。
#hello.py
   def hello():
      print ('hello nannan!!')
#A test
  hello()
如果将其作为模块导入,会出现下面的情况:
    
导入时执行了一遍方法,然后调用时又执行了一遍方法。
可以使用下面的方式解决上面的问题:
   #hello.py
  def hello():
      print ('hello nannan!!')
  def test():
      hello()
  if __name__ == '__main__':test()
然后进行执行:
    


所以得出:


避免导入时执行内容,需要使用变量__name__;
__name__变量的默认值为'__main__';
而在导入模块时,这个值被赋值为模块名,所以在文件中加入代码:if __name__ == '__main__':test(),在非导入模块时,会执行test()方法,将模块进行导入时,name被赋值为模块名,test()方法测试代码将不被执行。
 

猜你喜欢

转载自blog.csdn.net/weixin_43706473/article/details/86018623