• module学习笔记


    详细参看:廖雪峰官方网站

    1、例子引入

      一个.py文件就是一个模块,采用模块便于代码维护

     1 # -*- coding: utf-8 -*-
     2 'a test module'
     3 __author__='rainbow'
     4 import sys
     5 def test():
     6   args=sys.argv
     7   if len(args)==1:
     8     print('Hello,world!')
     9   elif len(args)==2:
    10     print('Hello,%s!' % args[1])
    11   else:
    12     print('Too many arguments!')
    13     
    14 if __name__=='__main__':
    15   test()

    运行结果:

       

    分析:import sys:导入sys模块,sys作为对象指向sys模块,利用sys可以访问sys模块中的所有功能

              第6行:sys模块中的args变量,存储了命令行的所有输入,即可以获取小黑框输入的东西,运行这个hello.py文件一定第一个参数是hello.py,后面可以自己加参数,所以下面if语句可以判断输入元素的个数

             第14行:当采用import hello.py方式时,没有打印,因为此时没有执行test(),必须再采用hello.test()才行

    2、作用域

            在一个模块中定义的变量和函数,如果只想在该模块内部使用,不希望被外部调用,可以采用_xx或__xx这种形式,这种函数或者变量是非公开的(private),不应该被直接引用(不是不能被引用),但是习惯上不要直接引用private的函数或者变量这种形式便于代码封装和抽象,用法如下:

    def _private_1(name):
      return 'Hello,%s' % name
      
    def _private_2(name):
      return 'Hi,%s', % name
      
    def greeting(name):
      if len(name)>3:
        return _private_1(name)
      else:
        return _private_2(name)

         外部只需要greeting函数,不需要了解里面的_private_1和_private_2,所以可以定义为private形式

    3、关于__name__=='__main__'中name的解释

           测试模块nametestmudel.py

    # -*- coding:utf-8 -*-
    #关于__name__=='__main__'中name的测试模块
    'name test module'
    
    def addFunc(a,b):
      return a+b
      
    print('test计算结果:',addFunc(1,1))

        调用模块nametest.py

    # -*- coding:utf-8 -*-
    #关于__name__=='__main__'中name的测试模块的调用模块
    'test'
    
    import nametestmudel
    print('调用本模块执行的结果是:',nametestmudel.addFunc(12,23))

       运行结果:

         

        分析:此时y模块中import 模块x时,先执行了x中的代码,然后在y中也会调用x中的函数,所以两个结果,而且不一样

    当加上if __name__=='__main__'可以看出import时__name__会改变,当直接调用一个模块时,__name__=='__main__',但是当这个模块被import嵌入进其他模块中时,这个模块中的__name__就是这个模块的名字,而不再是__main__。例如以下代码:

    # -*- coding:utf-8 -*-
    #关于__name__=='__main__'中name的测试模块
    'name test module'
    
    def addFunc(a,b):
      return a+b
      
    if __name__=='__main__':
      print('test计算结果:',addFunc(1,1))

       这个代码只是修改了nametestmudel.py的部分代码,增加了if语句,如果直接调用这个nametestmudel.py文件,__name__=='__main__'  。 但是因为nametest.py中import nametestmudel 所以运行nametest.py时,nametestmudel模块中的__name__==nametestmudel

       两个文件再次修改为下面代码:

    # -*- coding:utf-8 -*-
    #关于__name__=='__main__'中name的测试模块
    'name test module'
    
    def addFunc(a,b):
      return a+b
      
    if __name__=='__main__':
      print('test计算结果:',addFunc(1,1))
      
    print('__name__ =',__name__)
    # -*- coding:utf-8 -*-
    #关于__name__=='__main__'中name的测试模块的调用模块
    'test'
    
    import nametestmudel
    print('调用本模块执行的结果是:',nametestmudel.addFunc(12,23))
    print('__name__ =',__name__)

       运行结果:

        

       采用if __name__=='__main__':,当自己是直接调用时,if后面的代码可以执行,当自己被其他模块调用时,if后面的代码不能直接执行,所以这样就可以用来做测试(自己测试一部分的代码,其他程序并不需要做这一部分)

  • 相关阅读:
    Android UI之LinearLayout详解
    在zxing开源项目里,camera.setDisplayOrientation(90)出现错误
    DjangoORM获取值的不同类型
    DjangoORM操作数据库
    Django的URL写法
    创建django项目的基础命令&知识(一)
    python读取EXCEL的某一列,并保存到txt文本中
    后台管理页面基础布局HTML+CSS
    使用yaml格式进行接口测试报错
    常见的sql语句练习
  • 原文地址:https://www.cnblogs.com/rainbowdawn/p/7795667.html
Copyright © 2020-2023  润新知