Python基础——模块

一、模块介绍                                                                                                                                  

  Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。

  文件名就是模块名加上后缀.py,在模块内部,模块名存储在全局变量__name__中,是一个string,可以直接在module中通过__name__引用到module name。

模块分为三种:

  • 自定义模块

  • 内置标准模块(又称标准库)

  • 开源模块

导入模块:

  • import: 使客户端(导入者)以一个整体获取一个模块。

  • from:容许客户端从一个模块文件中获取特定的变量名。

  • reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。

语法:
import module
from module.xx.xx import xx     
from module.xx.xx import xx as rename 
from module.xx.xx import *            #一般不推荐使用


示例:

推荐方法一:

import cal   #当前目录直接调用模块

from my_module import cal     #二层目录调用模块

from web1,web2,web3 import cal      #多层目录调用模块

推荐方法二:
from web1,web2,web3.cal import add


注意:不支持的调用方式
from web1.web2 import web3  #执行__init__文件,唯一不支持的调用方式
print(web3.cal.add(2,6))

模块路径

import sys  
import os
pre_path=os.path.abspath('.../')    
sys.path.append(pre_path)    #添加路径,添加环境变量临时生效
 for i in sys.path: #获取路径,
print(i)

注意:

环境变量:永久生效方法:我的电脑--->系统属性--->环境变量--->Path路径中添加,以";" 分割。


二、包(package)的概念    

  我们先设想一下,如果不同的人编写的模块名相同怎么办?为了避免冲突,Python又引进了按目录  

  来组织模块的方法,称为包(package)。

  假设,如下图,我的两个time_file.py模块名字重名了,但是这两个模块的功能都不相同,如果这两个模块都在同一级目录中,那么我在其他地方要调用这个time_file.py模块,那么这个时候就会发生冲突,

  在这里我们就可以通过包来组织模块,避免冲突。

  

  

  方法是:选择一个顶层包名,引入包以后,只要顶层的包名不与别人冲突,那这个包里面的模块都不会与别人冲突了。

  请注意:每个包目录下来都会有一个__init__.py的文件,这个文件必须是存在的,否则,Python就不把这个目录当成普通目录,而不是一个包,__init__.py可以是空文件,

  也可以有python代码,__init__.py本身就  是一个文件,它的模块命就是对应的包名,它一般做接口文件。

三、time模块  

  时间相关的操作,时间有三种表示方式:

  时间戳   197011日之后的秒,即:time.time()
 
  格式化的字符串 2016-12-12 10:10,  即:time.strftime('%Y-%m-%d')
 
  结构化时间  元组   
  即:time.struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)   
  即:time.localtime()
  
  1.返回当前的时间戳  time.time()
import time
print(time.time())    #当前时间的时间戳
             #1528284151.432538

  2.将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

  time.localtime([secs]) 

print(time.localtime())
print(time.localtime(1528284151.432538))
>>>>
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=19, tm_min=22, tm_sec=31, tm_wday=2, tm_yday=157, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=19, tm_min=22, tm_sec=31, tm_wday=2, tm_yday=157, tm_isdst=0)

   3.gmtime([secs]) 和localtime()方法类似,

   gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time

print(time.gmtime())

>>>>>>
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=11, tm_min=28, tm_sec=2, tm_wday=2, tm_yday=157, tm_isdst=0)

   4.mktime(t) : 将一个struct_time转化为时间戳。

print(time.mktime(time.localtime()))

>>>>
1528284613.0

  5.asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。

   参数为空时,默认为当前时间

print(time.asctime(time.localtime()))
print(time.asctime())

>>>>
Wed Jun  6 19:33:52 2018
Wed Jun  6 19:33:52 2018

   6.ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为

  None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

print(time.ctime())

>>>>>
Wed Jun  6 19:38:34 2018

   7. strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。

  如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。   

print(time.strftime("%Y-%m-%d %X", time.localtime()))

>>>>
2018-06-06 19:41:51

   8 time.strptime(string[, format])

   把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

  在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))

>>>>>
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)

  9.sleep(secs) 线程推迟指定的时间运行,单位为秒。

  10.这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。

  而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。

  而第二次之后的调用是自第一次调用以后到现在的运行时间,即两次时间差。

四、random 模块    (随机数)

 1.random()   用于生成一个0到1的随机符点数: 0 <= n < 1.0

print(random.random())

>>>>>
0.47674138932530974

   2.randint(x,y) 用于生成一个指定范围内的整数

print(random.randint(1,2))     

>>>>
2

   3.randrange()从指定范围内,按指定基数递增的集合中获取一个随机数

print(random.randrange(1,10))

>>>>
8

   4.uniform() 用于生成一个指定范围内的随机符点数

print(random.uniform(1, 10))

>>>>
5.244662335538338

   5.choice() 从序列中随机生成一个随机元素

print(random.choice('nice'))

>>>>
e

   6.shuffle(list)  用于将一个列表中的元素打乱   

li = ['nick','jenny','car',]
random.shuffle(li)            
print(li)

>>>>>
['nick', 'car', 'jenny']

  7.sample()从指定序列中随机获取指定长度的片断

li = ['nick','jenny','car',]    
print(random.sample(li,2))    #从li中随机获取2个元素,作为一个片断返回
>>>> ['jenny', 'nick']

  

验证码实例:

  

def v_code():
    code=''
   # l=[]
    for i in range(4):
        num=random.randint(0,9)
        ALF=chr(random.randint(65,90))
        alf=chr(random.randint(97,122))
        # l.append(num)
        # l.append(ALF)
        # l.append(alf)
        # add=random.choice(l)
        add=random.choice([num,ALF,alf])
        code +=str(add)
    return code
print(v_code())

猜你喜欢

转载自www.cnblogs.com/huiyichanmian/p/9147263.html