python学习笔记:sys、random模块、模块相关知识、包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WilliamCode/article/details/85222143

#sys模块中常用的属性
1、version:python版本
2、version_info:返回描述python版本的元组,可以直接用于判断python版本
3、platform:操作系统版本
    win10 64位下,返回字符串"win32"
4、path:python的文件搜索路径,后面会用到
5、argv:命令行调用python脚本时输入的参数,用于命令行操作时输入参数
6、builtin_module_names:内置模块的名字列表

#sys模块中的常用方法
1、exit:退出程序最安全可靠的方式,exit(0)代表正常退出;用ctrl+d可以退出,其代表读入结束;quit()也可以退出
2、getrecursionlimit:获取递归限定
3、setrecursionlimit:设定递归深度

#自定义模块并导入
1、模块名必须符合变量名命名规则,模块的文件名为:模块名.py
2、在导入自定义模块时,会导入模块的代码,然后根据代码创建变量
3、使用方法和系统内建模块使用方法完全一致

#模块路径的搜索顺序
1、当前工作路径(程序运行时所在的路径) Q:是当前工作路径呢还是源文件所在路径
2、sys.path所提供的路径
3、系统内置模块

可以调用sys.path.append()函数将模块所在路径导入到系统路径中
    
#模块的加载过程:模块导入时,其所有语句会执行;当重复导入时,不会重新执行模块内的语句

#重新加载模块:当加载之后修改了模块的源文件时,需要重新导入才能生效
    import imp
    imp.reload(module_name)

#模块的module属性
      1、__name__:绑定模块名称的字符串
    当此模块作为主模块时,__name__绑定'__main__';否则math.__name__ = 'math',sys.__name__ = 'sys',这些属性是系统自行生成的
    可以同于判断模块是被导入还是被执行
      2、__file__:绑定模块的源文件路径
      3、__all__列表:存放可导出属性的字符串列表
    当from xxx import * 时,只是导入__all__内的属性及方法,系统不会自动生成,需要自行定义。用于当使用from xxx import *是,只能导入部分函数与属性
      4、__doc__:模块和属性、函数的文档字符串

#模块的隐藏模块
    模块中以_开头的变量为模块的隐藏属性,在使用from xxx import *时不会被导入

#python执行过程
    先搜索路径打开模块
    判断是否有模块对应的.pyc文件,如果.pyc文件比.py文件新,则直接加载.pyc文件
    否则,用模块编译成mymod.pyc然后在python解释执行器中执行        

#random模块函数import random as R
    R.random():返回[0,1)之间的随机实数,用它乘以整数可以得到n以内的随机数
    R.uniform(a,b):返回区间[a,b)区间内的实数
    R.randrange([start,]end[,step])
    R.choice(iterable):从可迭代对象中随机抽取一个元素
    R.shuffle(seq[,random]):随机指定序列顺序
    R.sample(population,k):从population中随机获取k个元素,返回列表;速度及其快速,推荐使用
    R.getrandbits(n):获取一个每个位都是随机0、1的n位二进制数
    R.seed(a=None):设置随机种子,如果随机种子一定,则谁中是一定的

#练习题:模拟斗地主发牌
    import random
    l = list()
    def fapai():
        global l
        l = [x+1 for x in range(54)]
        random.shuffle(l)
    
    def dayinpai(i):
        #print((i-1) // 13)
        #return 
        if i == 53:
            print("xiaowang",end=' ')
            return 
        elif i == 54:
            print("dawang",end=' ')
            return 
        elif (i-1) // 13 == 0:
            print("\u2660",end='')
        elif (i-1) // 13 == 1:
            print("\u2663",end='')
        elif (i-1) // 13 == 2:
            print("\u2665",end='')
        elif (i-1) // 13 == 3:
            print("\u2666",end='')
    
        if (i-1)%13+1 == 11:
            print("J",end=' ')
        elif (i-1)%13+1 == 12:
            print("Q",end=' ')
        elif (i-1)%13+1 == 13:
            print("K",end=' ')
        else:
            print("%d"%(((i-1)%13)+1),end=' ')

    def myprint(x):
        def fn():
            for i in range((x-1)*17+1,x*17+1):
                dayinpai(l[i])
        fn()
    

    fapai()
    str1 = input()
    myprint(1)
    str1 = input()
    myprint(2)
    str1 = input()
    myprint(3)

    #用random.shuffle()函数对列表进行随机打乱
    
#包(模块包)    package
    将模块以文件夹形式进行分组管理的方法
#包的导入
    import package_name [as new_name]
    import package_name.sub_package_name.module_name [as new_name]
    from package_name import module_name [as new_name]
    from package_name.module_name import variable_name [as new_name]
    
    #导入包内所有包和模块    
    from package_name import *
    from package_name.module_name import *

#__init__.py
    是常规包内必须存在的文件,会在包加载时自动调用
    作用(通常这样用):
    在内部填写文档字符串
    在__init__.py文件内加载包所依赖的包或模块
    无论以什么方式导入包,都会运行上一级所有包的__init__.py文件

#__init__.py内的__all__列表
    作用:用于记录此包中有哪些模块需要导入,需要自行创建
    用from xxx import *时,只查找__all__列表中的模块或者子包

#当在子模块中调用父包中的函数时,用相对导入
    .表示本级目录
    ..上级目录
    ...上两级目录
    以此类推

#包的加载
    1、可以将路径添加到sys.path中
    2、可以将此包安装到sys.path指定路径中


 

猜你喜欢

转载自blog.csdn.net/WilliamCode/article/details/85222143