zoukankan      html  css  js  c++  java
  • Python 基础5 模块

    模块 Module:
      什么是模块
        模块是一个包含有一系列数据,函数,类等组成的程序组;
        模块是一个文件,模块文件名通常以‘.py’结尾;

    模块的作用:
      1.让一此相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰;
      2.模块中的变量,函数和类等可提供给其它模块或程序使用;
    模块的分类:
      1.内置模块(builtins)在解析器的内部可以直接使用;通常是c语文写的,执行效率高;
      2.标准库模块,安装python时已经安装具可直接使用;import copy;
      3.第三方模块(通常为开源),需要自己安装;pip3 install tensorflow安装第三方库
      4.用户自己编写的模块(可以作为其它人的第三方模块);

    模块的导入 import:
      import 语句
      语法:import 模块名1 [as 模块新名1],模块名2[as 模块新名2],...  

      作用:将一个模块整体导入到当前模块中;

      属性用法:
        模块名.属性名
        help(obj) 可以查看模块的文档字符串;

     1 示例:
     2     import math   #导入数学模块
     3     help(math)  查看模块里文档
     4     >>> math.factorial(5)    #阶乘函数
     5     120
     6     >>> math.log(1024,2)    #2 ** 10  = 1024  #求次方数
     7     10.0
     8     >>> math.sqrt(4)    #平方根
     9     2.0
    10     >>> math.sqrt(16)
    11     4.0
    12     >>> math.pi        #
    13     3.141592653589793
    14 
    15     import sys, os   #导入sys和os模块
    16     import copy as cp    #导入copy模块,并对copy模块重新命名为cp新简单名字,方便自己调用
    17     >>> L = [1,2,3,4]
    18     >>> l2 = cp.deepcopy(L)
    19     >>> id(l2)
    20     2289561136072
    21     >>> id(L)
    22     2289558822024

    from import 语句:
      语法:
      from 模块名 import 模块属性名 [as 属性新名1],模块属性名2 [as 属性新名2]
      作用:
        将某模块的一个或多个属性导入到当前模块的作用域;

    1     示例:
    2           from math import pi
    3           from math import sin
    4                   from math import factorial as fac

    from import * 语句
      语法:
        from 模块名 import *
      作用:
        将某模块的所有属性导入到当前的模块;

    示例:
        from math import *
        s = sin(pi/2)

    模块被导入,只执行一次,就会被加载到字典中,再执行导入时,去字典中找,发现有对应的模块键,就不再在执行。
      import sys
      sys.modules 查看已导入模块的字典

    模块的导入语句:
    import xxx 官方优先使用
    from xxx import yyy 
    from xxx import *
    导入语句实质是 在本地创建变量来绑定模块或函数或数据;

    包的相对导入:
        指包内模块的相互导入;
      语法:
        from 相对路径包或模块 import 属性或模块
        或
        from 相对路径包或模块 import *
      说明:
        包的相对导入不能用于Import xxx语句中
      相对路径:
        . 代表当前目录
        .. 代表上一级目录
        ... 代表上级二级目录
        .... 以此类推
        注:相对导入时不能超出包的外部

      包的加载路径:
        同模块的加载路径搜索:
        1.搜索当前路径;
        2.搜索sys.path给定的路径;

    dir() 函数:
        dir([对象]) 返回一个字符串列表
      作用:
        1、如果没有参数调用,则返回当前作用域内所有变量的列表;
        2、如果给定一个对象作为参数,则返回这个对象所在变量(属性)列表;
          a. 对于一个模块,返回这个模块的全部变量;
          b.对于一个类对象,返回类对象的所有变量,并递归基类对象的所有变量;
          c.对于其它对象,返回所有变量、类变量和基类变量

    • 数学模块 math: 文档参见: math.e 自然对数的底e math.pi 圆周率pi math.ceil(x) 对x向上取整,比如x=1.2,返回2 math.floor(x) 对x向下取整,比如x=1.2,返回1 math.sqrt(x) 返回x的平方根 math.factorial(x) 求x的阶乘 math.log(x[, base]) 返回以base为底x的对数, 如果不给出base,则以自然对数e为底 math.log10(x) 求以10为底x的对数 math.pow(x, y) 返回 x**y (x的y次方) math.fabs(x) 返回浮点数x的绝对值 角度和弧度degrees互换 math.degree(x) 将弧度x转换为角度 math.radians(x) 将角度x转换为弧度 三角函数 math.sin(x) 返回x的正弦(x为弧度) math.cos(x) 返回x的余弦(x为弧度) math.tan(x) 返回x的正切(x为弧度) math.asin(x) 返回x的反正弦(返回值为为弧度) math.acos(x) 返回x的反余弦(返回值为为弧度) math.atan(x) 返回x的反正切(返回值为为弧度)
    • 系统模块 sys: 此模块都是运行时系统的信息 系统模块 sys sys.path 模块搜索路径,path[0] 是当前脚本程序的路径名,否则为''; sys.modules 已加载模块的字典; sys.version 版本信息字符串; sys.version_info 版本信息的命名元组; sys.platform 操作系统平台名称信息; sys.argv 命令行参数 argv[0] 代表当前脚本程序路径名; sys.copyright 获得Python版权相关的信息; sys.builtin_module_names 获得Python内建模块的名称(字符串元组); 标准输入输出时会用到: sys.stdin 标准输入文件对象,多用于input(); sys.stdout 标准输出文件对象,多用于print(); sys.stderr 标准错误输出文件对象, 用于输出错误信息; sys模块的方法: sys.exit([arg]) 退出程序,正常退出时sys.exit(0); sys.getrecursionlimit() ; sys.getrecursionlimit() 得到递归嵌套层次限制(栈的深度); sys.setrecursionlimit(n) 得到和修改递归嵌套层次限制(栈的深度); 自定义模块: 示例见: mymod.py #自定义模块 test_mymod.py #导入并测试模块

    import 语句搜索模块的路径顺序:
        1. 搜索程序运行时的路径(当前路径)
        2. sys.path 提供的路径
        3. 搜索内置模块
      #为sys.path 列表添加一个路径
        sys.path.append('/home/tarena') #解决方案

    模块的加载过程:
      在模块导入时,模块所有语句会执行;
      如果一个模块已经被导入,则再次导入时不会重新执行模块内的语句;

    模块的重新加载:
      import mymod
      import imp
      imp.reload(mymod)   #重新加载mymod模块

    模块被导入和执行的过程:
        1.先搜索相关路径 找模块(.py文件)
        2.判断是否有此模块对应的.py文件,如果.pyc文件比.py文件新(时间戳),则直接加载.pyc文件(python3的缓存文件 字节码);
        3.否则用模块.py文件生成.pyc并加载执行;

    pyc模块的编译:compile
      编译 解释执行
      mymod.py --------------> mymod.pyc------------------------>python3
      编译成python3可快速执行的.pyc文件,python3在解析成CPU可运行的指令;

    模块的文档字符串:
        模块内第一个没有赋值给任何变量的字符串为文档字符串;

    模块的__doc__属性:help(mymod)
        用于绑定模块文档字符串;
    模块的__file__属性:dir(mymod)    mymod.__file__
        用于绑定模块对应.py文件路径;
    模块的__name__属性:
        用来记录模块的自身的名字;
    __name__作用1.记录模块名
          2. 判断是否为主模块
    __name__说明1. 当此模块作为主模块(也就是第一个运行的模块)运行时,__name__绑定'__main__'; 
          2. 当此模块不是主模块时,__name__绑定模块名(文件名去掉.py后缀);
    模块的__all_列表:
        模块中的__all__列表是一个用来存放可导出属性的字符串列表;
    __all__作用:
        限定当用from xxx import * 语句导入时,只导入__all__列表内的属性;
    示例:mymod4.py
    #__all__列表限定其它模块在用from mymod4 import * 导入时只导入‘myfun1’, 'myfun2','name1'
    只需要在模块内定义__all__,即可实现;
    __all__ = [‘myfun1’, 'myfun2','name1']
    
    模块的隐藏属性:
        模块中以'_' 开头的属性,在from xxx import * 导入时将不被导入,通常称为隐藏属性;
    #mymod6.py
    var = 100
    def print_var():
        print('var = ', var)
    def set_var(n):
        global var
        var = n
    
    #test_mymod6.py
    from mymod6 import var
    from mymod6 import print_var
    from mymod6 import set_var
    
    var = 200    #赋值只能改变本模块内的全局变量
    print_var()    #100
    set_var(300)
    print_var()    #300
    • 随机模块 random: 作用: 用于模拟或生成随机输出的模块 随机模块 random 说明:random模块是用于模拟或生成随机输出的模块. import random as R R.random() 返回一个[0, 1) 之间的随机实数,包括0,不包括1 R.uniform(a,b) 返回[a,b) 区间内的随机实数 R.randrange([start,] stop[, step]) 返回range(start,stop,step)中的随机数 R.choice(seq) 从序列中返回随意元素 R.shuffle(seq[, random]) 随机指定序列的顺序(乱序序列) R.sample(seq,n) 从序列中选择n个随机且不重复的元素 R.getrandbits(nbit) 以长整型的形式返回用nbit位来表示的随机数 R.seed(a=None) 用给定的数a设置随机种子,不给参数a则用当前时间设置随机种子
     1 import random
     2 
     3 # print(random.random()) #生成0到1之间的小数
     4 # print(random.randint(1,8)) #包括8
     5 # print(random.choice(['hello',4,[1,2]])) #随机选择1个元素
     6 # print(random.sample(['hello',4,[1,2]],2))   #从序列中选2个
     7 # print(random.randrange(1,5))    #不包括5
     8 # print(chr(90))    #将90数字转换为ascii码的字母
     9 
    10 #生成5位的随机验证码,要包含字母与数字
    11 def v_code():
    12     code=''
    13     for i in range(5):
    14         add=random.choice([random.randrange(10),chr(random.randrange(65,91))]) 
    15         code+=str(add)
    16     print(code)
    17 
    18 v_code()

    包(模块包) package:
        包是将模块以文件夹的组织形式进行分组管理的方法;
      作用:
        将一系列模块进行分类管理,有利于访问命名冲突可以在需要时加载一个或部分模块,而不是全部模块;

    包示例:test_mypack.py
        mypack/
            __init__.py
            menu.py
            games/
                __init__.py
                contra.py
                supermario.py
                tanks.py
            office/
                __init__.py
                execl.py
                word.py
                powerpoint.py
    创建命令:
        mkdir mypack
        cd mypacd
        touch __init__.py menu.py
        mkdir games office
        cd games
        touch __init__.py contra.py supermario.py tanks.py
        cd ../office
    
    #test_mypack.py    
    import mypack          #导入mypack包
    import mypack.games     #导入mypack里的games子包
    import mypack.menu     #导入mypack里的menu模块
    #
    mypack.menu.show_menu()    #调用menu.py里的show_menu函数

    __init__.py文件:
        __init__.py是常规包内必须存在的文件
        __init__.py 会在包加载时被自动调用;
      __init__.py作用:
        编写此包的内容
        在内部填写包的文档字符串

    包的导入语法:
        #同模块的导入规则相同
        import 包名 [as 包别名]
        import 包名.模块名 [as 模块新名]
        import 包名.子包名.模块名 [as 模块新名]

        from 包名 import 模块名 [as 模块新名]
        from 包名.子包名 import 模块名 [as 模块新名]
        from 包名.子包名.模块名 import 属性名 [as 属性新名]

        from 包名 import *
        from 包名.子包名 import *
        ......

    模块的导入语句:
        import xxx 官方优先使用
        from xxx import yyy
        from xxx import *

    包__init__.py 内的__all__列表:
        作用:
          用来记录此包中有那些包或模块需要在from xxx import * 语句导入时被导入;
        说明:
          __all__列表只在from xxx import * 语句中起作用;只导入__all__列表内的模块;

    回顾
    模块:
    1. sys模块  sys.version_info   sys.version
          sys.modules  已加载的模块的字典
          sys.path  (模块或包的搜索路径)
          sys.platform  平台
          sys.argv 命令行参数
          sys.exit() 退出程序
    random模块:生成随机数或随机事件相关的
    2.自定义模块
        文件名(模块名).py
      导入语句:
        import 语句    from import 语句,from import *语句
    3.查找.py的顺序:1.当前路径,2.sys.path,3.内建模块;
    4.模块的属性:
        __doc__属性(绑定文档字符串的)
        __file__属性(绑定当前模块的路径)
        __name__属性(绑定模块名的,如果是主模块绑定'__main__'__all__列表:作用限制from import *语句导入时,只能导入该模块__all__列表内的属性;
    5.模块的隐藏属性:以'_'开头的全局变量名(变量/函数名/类名),在from import *语句导入时,不被导入。
    包:
    1. 包是整理模块用的;常规包内必须有:__init__.py(代表的是包,import mypack 实际执行的是mypack/__init__.py)    init:initializition
    2.包的导入:
        import 语句,   from import 语句,  from import *语句
     1 #F:PythonLocal	mooc.cnpython.1py_day13_exercise
     2 # 1.模拟'斗地主'发牌,54张,
     3 # 花色: 
     4 #     黑桃('u2664'),梅花('u2667'),方块('u2666'),红桃('u2665')
     5 # 大小王
     6 # 数字:  A~10JQK
     7 # 1)生成54张牌
     8 # 2)三个人玩牌,每人发17张,底牌留三张
     9 #     输入回车,打印第1个人的17张牌
    10 #     输入回车,打印第2个人的17张牌
    11 #     输入回车,打印第3个人的17张牌
    12 #     输入回车,打印3张底牌
    13 
    14 #games_toudizhu.py
    15 import random
    16 #花色列表
    17 huase = ['u2664','u2667','u2666','u2665']
    18 #数字列表
    19 number = ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
    20 #定义排序规则
    21 d = {}
    22 def dict_d():
    23     for x in range(1,13):
    24         d[str(number[x])] = x
    25     d[''] = 17
    26 
    27     d[2] = 15
    28     d['A'] =14
    29 
    30 #生成54张牌
    31 def shengcheng(x,y):
    32     pai = ['大王', '小王']
    33     for k in x:
    34         for j in y:
    35             pai.append(str(k) + str(j))
    36     return pai
    37 
    38 #发牌并对发的牌排序
    39 def fapai():
    40     pailx = shengcheng(huase, number)
    41     random.shuffle(pailx)    #乱序
    42     while True:        #循环发牌
    43         n = input(':')
    44         if len(pailx) >= 17:    #判断剩余牌数
    45             if not n:
    46                 one = random.sample(list(pailx), 17)
    47                 print(sorted(one, key=lambda x:(d[x[1:3]] if str(x) != '大王' or str(x) != '小王' else d[x]), reverse=False))
    48                 pailx = set(pailx) - set(one)
    49                 print(len(pailx))
    50         elif len(pailx) >= 3:
    51             if not n:
    52                 dipai = random.sample(list(pailx), 3)
    53                 pailx = set(pailx) - set(dipai)        #补集
    54                 print(dipai)
    55         else:
    56             break
    57 
    58 print('1.生成的54张牌为:', shengcheng(huase, number))
    59 dict_d()
    60 print(d)
    61 print('2.发牌:',)
    62 fapai()
    63 
    64 
    65 ##或poke.py
    66 # kinds = ['u2664','u2667','u2666','u2665']
    67 # print('kinds=', kinds)
    68 # L = [['A'] + [str(x) for x in range(2,11)] + list("JQK")]
    69 # print('L=', L)
    70 # poke = ['大王', '小王']
    71 # for k in kinds:
    72 #     for n in L:
    73 #         poke.append(k + n)
    74 # print('新买的牌', poke)
    75 
    76 # poke2 = list(poke) #复制一份
    77 
    78 # import random
    79 # random.shuffle(poke2)
    80 # input()
    81 # print('第1个人的17张牌:',poke2[:17])
    82 # input()
    83 # print('第2个人的17张牌:',poke2[17:34])
    84 # input()
    85 # print('第3个人的17张牌:',poke2[34:51])
    86 # input()
    87 # print('3张底牌:',poke2[51:54])
  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/pineliao/p/12097956.html
Copyright © 2011-2022 走看看