zoukankan      html  css  js  c++  java
  • python 模块

    Python模块

      模块是一个包含一系列数据、函数、类等组合的程序组,可以供给其他模块或文件使用

      模块名、函数名、变量名必须是标识符,

      模块是一个文件,模块文件名通常以.py结尾

    模块的分类:

      内建模块(builtins)    在解析器内可以直接使用

      标准库模块,    安装python时已安装且可以直接使用

      第三方模块(通常开源)    需要自己安装

      用户自己编写的模块(可以作为其他人的第三方库)

    pip安装第三方库

    moudle_name:是对应的模块名;请自行更换为自己需要更新的模块名

    安装对应的模块:     pip install moudle_name

    忽略已经安装的库,进行安装: pip install moudle_name --ignore-installed

    查看所有可更新的模块:  pip list --outdated

    更新所有的模块:       pip-review --local --interactive

    更新某一个模块:     pip install --upgrade module_name

    指定镜像源更新模块    pip install moudle_name -i https://pypi.douban.com/simple

    pip国内的一些镜像

    临时更改镜像

    可以在使用pip的时候在后面加上-i参数,指定pip源 
      pip install moudle_name -i https://pypi.tuna.tsinghua.edu.cn/simple

    永久更改镜像

    linux:

    修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:

    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple

    windows: 

    直接在user目录中创建一个pip目录,如:C:Usersxxpip,在pip 目录下新建文件pip.ini,内容如下

    或者按照网友的建议:win+R 打开用户目录%HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件, 内容如下

    [global]
    timeout = 6000
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = pypi.tuna.tsinghua.edu.cn

    调用模块

    引用模块: import module1,module2...

    调用模块:模块名.函数名

    语法:

      import 模块名1 [as 模块1新名],[模块名2 as 模块2新名]

    from...import... 语句  from fib import fibonacci  #导入fib模块中的fibonacci函数,所以只能调用math函数里面的fibonacci函数

    from...import * 语句  把一个模块里的所有内容导入到当前命名空间,直接调用函数就行,不用模块.函数,一般不建议使用

    input(prompt)——以字符串的方式获取用户输入

    bytes(string,encoding[,errors])——对指定的字符串进行编码,并以指定的方式处理错误

    help([object])——提供交互式帮助

    round(number[,ndigits])——四舍五入为指定的精度,正好为5时舍入到偶数

    内建模块————数学模块 math

    cmath.sqrt(number)——返回平方根,可用于负数

    abs(number)——返回指定值的绝对值

    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[,z]) 返回 x**y%z (x的y次方对z求模的结果)
    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的反正切(返回值为为弧度)

    内建标准库模块——时间模块  time

    计算机元年是从1970年1月1日0时开始的,此时时间为0,之后每过一秒时间+1(UTC时间),比中国时间晚8个小时

    注:CST为中国标准时间(China Standard Time UTC +8:00)

    函数名描述
    time.time() 返回从计算机元年至当前时间的秒数的浮点数(UTC时间为准)
    time.sleep(miao) 让程序按给定secs秒数的浮点数睡眠一段时间
    time.asctime([tuple])

    将9个元素时间元组转换为(美国时间格式

    Wed Jul 18 13:21:58 2018

    不给参数返回当地当前时间(美国时间格式)

    time.mktime(tuple) 将本地9个元素日期时间元组转换为UTC时间(秒)
    time.gmtime(miao)

    用给定秒数转换为UTC表达的9元素时间元组
    (缺省返回当前时间元组)(不写参数时,返回当前时间元组)

    time.struct_time(tm_year=2018, tm_mon=7, tm_mday=18, tm_hour=13, tm_min=9, tm_sec=41, tm_wday=2, tm_yday=199, tm_isdst=0)

    time.localtime(miao)

    返回9个元素的时间元组,缺省时默认返回本地的当前时间       

    将UTC秒数时间转换为日期元组(以本地时间为准)

     1 import time
     2 print(time.asctime())   #Wed Jul 18 21:19:10 2018
     3 # test2: time.loaltime() 本地时间
     4 t1 = time.localtime()
     5 print(t1)#time.struct_time(tm_year=2018, tm_mon=7, tm_mday=18, tm_hour=21, tm_min=20, tm_sec=47, tm_wday=2, tm_yday=199, tm_isdst=0)
     6 
     7 #test3: time.gmtime() 格林威治标准时间
     8 t2 = time.gmtime()
     9 print(t2)#time.struct_time(tm_year=2018, tm_mon=7, tm_mday=18, tm_hour=13, tm_min=21, tm_sec=58, tm_wday=2, tm_yday=199, tm_isdst=0)
    10 
    11 #test4: 按time_struct,人工指定时间结构元组
    12 t3 = (2018,7,18,21,25,23,0,0,0)
    13 print(t3)#(2018, 7, 18, 21, 25, 23, 0, 0, 0)
    14 print(time.asctime(t3))#Mon Jul 18 21:25:23 2018
    15 
    16 t4 = time.mktime(t3)
    17 print(t4)   # 1531920323.0
    时间模块

    内建标准库模块———系统模块   sys

    sys模块的属性

    属性描述
    sys.path 模块搜索当前脚本程序的路径名,否则为 ''(空)
    sys.modules 已加载模块的字典
    sys.version 版本信息字符串
    sys.version_info 版本信息的命名元组
    sys.platform 操作系统平台名称信息
    sys.argv 命令行参数 argv[0] 代表当前脚本程序名 **.py
    sys.copyright 获得Python版权相关的信息
    sys.builtin_module_names 获得Python内建模块的名称(字符串元组)

     内建标准库模块——随机模块   random

      用于生成随机输出

    函数名描述
    R.random() 返回一个[0, 1) 之间的随机实数
    R.uniform(a,b) 返回[a,b) 区间内的随机实数,区间可以不是整数
    R.randrange([start,] stop[, step]) 返回一个range(start,stop,step)中的随机数
    R.choice(seq) 从序列中返回随机选取一个数
    R.shuffle(seq[, random]) 指定序列(sep)随机的打乱顺序
    R.sample(seq,n) 从序列(sep)中选择n个随机且不重复的元素

    模块包——paockage

      包就是文件夹,是包的文件夹必须存在__init__.py文件,通常放包的文档字符串,该文件的内容可以为空__int__用于标识当前文件夹是一个包,__init__会在包加载时自动调用,有利于防止命名冲突,可以在需要时加载一个或部分模块而不是全部模块

    举个栗子:

    test.py
    package_runoob
    |-- __init__.py
    |-- runoob1.py
    |-- runoob2.py
    

    package_runoob/runoob1.py

    1 def runoob1():
    2    print "我是模块1"

    package _runoob/runoob2.py

    1 def runoob1():
    2    print "我是模块2"

     在 package_runoob 目录下创建 __init__.py,有这个文件证明package_runoob是一个模块包

    4 if __name__ == '__main__':
    5     print '作为主程序运行'
    6 else:
    7     print 'package_runoob 初始化'

     然后我们在 package_runoob 同级目录下创建 test.py 来调用 package_runoob 包

    4 # 导入 Phone 包
    5 from package_runoob.runoob1 import runoob1
    6 from package_runoob.runoob2 import runoob2
    7  
    8 runoob1()
    9 runoob2()

     以上实例输出结果:

    package_runoob 初始化
    I'm in runoob1
    I'm in runoob2

    包的导入

     #import 语句

       import 包名 [as 包新名]

       import 包名.模块名 [as 模块新名]

       import 包名.子包名.模块名 [as 模块新名]

     #from import语句

       from 包名 import 模块名 [as 模块新名]

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

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

       from 模块名 import 函数名  (不用写模块名.函数名)

     # from import *语句

       from 模块名 import*  (不用写模块名.函数名)

       from 包名 import *

       from 包名.模块名 import *

    导入包时搜索路径的顺序:

      1、搜索程序的当前路径

      2、sys.path 提供的路径

    __init__.py内的__all__列表

      作用:用来记录此包中有哪些子包或者模块在用from import* 语句时被导用

      说明:__all__列表只对 from xxx import *语句起作用

    包的相对导入是指包内模块的相互导入

      语法:

        from 相对路径包或模块 import 属性或模块名
        from 相对路径包或模块 import *

      相对路径:

      .代表当前目录

      .. 代表上一级目录

      ... 代表上二级目录

      .... 以此类推

      注:相对导入时不能超出包的外部

    python一般默认是绝对路径导包的

    搜索路径

    当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

    • 1、当前目录
    • 2、如果不在当前目录,sys.path提供的路径,sys.path是一个列表,里面放着都是模块的搜索路径,
    • 3、如果都找不到,Python会察看默认路径,也就是内建模块。UNIX下,默认路径一般为/usr/local/lib/python/。

    模块搜索路径存储在sys模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

    python的环境变量(就是路径)  set PYTHONPATH=c:python27lib;

    模块的加载过程

      1、在模块导入时,模块的所有语句都会执行一边

      2、如果模块已经导入那么在此导入不会重新执行模块内的语句

    模块导入和执行的过程

      1、先搜索相关的路径,找到模块名.py

      2、判断是否由此模块对应的.pyc文件。如果.pyc文件比.py文件新,则直接加载.pyc文件

      3、否则用模块.py文件,生成.pyc文件,并加载执行

    pyc python的编译
             编译        解释执行
    mymod.py --------> mymod.pyc --------> python3

     

    模块的预置属性

      模块的__doc__属性绑定此模块的文档字符串    print(__doc__)  #我是文档字符串

      模块的__file__属性记录模块对应的文件路径名     print(__file__)      #D:/Users/Never/PycharmProjects/Tedu/day13/练习.py

      模块的__name__属性 用来记录模块自身名字    print(__name__)  #'__main__'

         用处:1、记录函数名

            2、用来判断是否为主模块

        说明:1、当此模块为主模块(也就是第一个运行的模块时)运行时,__name__绑定的是__main__

           2、当此模块不是主模块时,而是被其他模块导入时,此时__name__绑定模块名

    模块的属性调用时,就不需要使用模块名.属性

    模块的__all__列表

      模块中的__all__列表是一个用来存放可导出属性的字符串列表

    作用:当用from 模块名 import * 语句导入模块时,只导入__all__列表里面的属性(注意是模块名不是包名)

    bk.py文件

    # __all__属性只对 from import * 语句有效
    __all__ = ['hello1', 'name1']
    
    def hello1():
        print("1")
    
    def hello2():
        print("2")
    
    def hello3():
        print("3")
    
    name1 = 'aaaaaa'
    name2 = 'aaaaaa'

    wo.py文件

    from bk import*
    hello1()
    print(name1)

    模块的隐藏属性  模块中以‘_’开头的属性,在from 模块名 import *或者from...import...导入时,将不被导入,通常称这些属性为隐藏属性

    reload()函数

    当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。

    因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下:

      import imp

      imp.reload(module_name)

    在这里,module_name要直接放模块的名字,而不是一个字符串形式,也不是字符串名。

    help(obj)函数可以查看模块的相关文档字符串

    dir( )函数:返回的是一个列表,容纳了括号中模块包含的所有变量、函数和模块

     1 import math
     2 content = dir(math)
     3 print(content)
     4 '''
     5 ['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
     6 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
     7 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
     8 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
     9 'sqrt', 'tan', 'tanh']
    10 '''
    11 
    12 dic()
    dic()

    在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的路径

    globals()和locals()函数

    根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。

    如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。

    如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。

    两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

    多模块项目设计时,不要用global定义全局变量,可以用函数传参传入全局变量,全局变量写在main模块里面,然后main()调动主模块

    如果实在没办法,可通过stdu.name = 2类似的方法把模块studname值调过来

  • 相关阅读:
    通过shell脚本排查jar包中类冲突
    批量复制及执行命令shell脚本
    java String hashCode遇到的坑
    hive常用命令
    hadoop-2.10.0安装hive-2.3.6
    centos7安装mysql-5.7.28
    centos7安装mysql-5.5和mysql-5.6
    centos7搭建hadoop2.10高可用(HA)
    centos7搭建hadoop2.10完全分布式
    kafka(一)-为什么选择kafka
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/9313616.html
Copyright © 2011-2022 走看看