打赏

Python基础(19)——time random等常用模块和包

系统 if __name__ =='__main__':

if __name__ =='__main__':print(__name__) 结果是__main__

所以很多程序主程序会判断是不是脚本是直接在系统运行的,如果是被调用的那么name并不是等于main,区别是不是被调用if __name__ =='__main__': 下面一般接的是测试代码

查询tag的状态使用

一般用tag=True    tag=Flase 来标志循环的状态,查找 找到了状态变True  进入循环,结束的时候标志变为Flase ,这种方法很普遍

 eval可以直接运算字符串中的计算,还能提取字符串中的结构,例如字典列表。经常使用的是input输入的最后都是字符串,需要解释这些字符串中的各种结构

程序的解耦

就是把分功能的部分,单独出来做成个函数

模块

 一个py文件就是一个模块,一个复杂的程序应该是多个py文件也就是模块组成的,这样条例更清晰,更容易维护。import time 就是导入time的py文件

模块有三种:

  1、标准库模块

  2、第三方模块,需要从外部下载安装

  3、根据需求自定义的模块

文件目录:package 包的意思,是用来组织相同类型功能的模块的,里面会有个__init__.py文件,同时避免了重名的模块,而directory就是我们理解的文件夹

import  实际上就是执行了一遍模块内的函数,所以如果模块内用逻辑执行的输出也会被执行出来,但这些输出一般都是放在主函数,所以模块通常都是为了实现某种功能  2、import引用模块名字在本文件中使用  pycharm会把自己定义的一些模块标红,不用管他  

from 文件名 import 函数 这种也是先执行一遍文件里所有的函数,再引用调用的函数

from 文件名 import  函数(*)    就可以直接调用函数       *  代表所有函数 ,这种方式不推荐,因为容易有重名的关系但是不报错,会造成函数的重新定义,函数被覆盖

import引用模块路径:

  import sys

  print(sys.path)   这里有import 搜索的路径,除此之外的文件都找不到会报错,执行文件的时候他自己的路径会自动放入path中,只认识自己的路径,想当于只有一个入口,只有一个路径,其他地方的引用会报错。

  path是个列表可以添加路径

  那么在执行文件的自路径下的模块——》from 文件夹 import 模块   这样可以引用模块    (一般bin文件就是整个程序的入口,也就是路径的初始点)

  form 包.包.包  import py文件              包内的py文件引用            import 的必须是py文件 import就是执行__init__,所以唯一不支持的调用方式是import 文件夹 

 if __name__ ==‘ __main__ ‘   如果是系统下程序执行就会等于main   如果是被引用的程序  name就是 被引用的路径 ,反应的是被调用的情况  ,通常下面用来写测试代码,因为单独执行的时候会调用代码,除了主函数,其他的模块都是被调用的,所以用来当前函数结果的测试;另外在主函数中main()函数写到这里面保护,如果不写的话容易造成嵌套调用。

import搜索路径是按列表的路径顺序,如果出现重名的模块,那么路径近的优先被调用。另外pycharm会自动添加上一层的路径信息到path中

内置模块:

time模块   import time   

  和sys,os等内部封装的模块,并不存在于lib中,比较特殊,lib中也带里一些py文件,是另一种安装时候带的py模块,所以当前路径下如果有和这些lib文件夹内的py文件重名的时候会出现报错

  time.time()时间戳 从1970年1月1日0点凌晨 到现在一共多少秒   ,一般用来计算

  

import time

print(time.time())

#1562635150.3265276

 

  time.localtime()  时间对象,结构化时间   print(time.localtime()) 当地时间     结果:time.struct_time(tm_year=2019, tm_mon=7, tm_mday=9, tm_hour=9, tm_min=20, tm_sec=9, tm_wday=1, tm_yday=190, tm_isdst=0)    wday 周一是0,周二1   yday这一年过了多少天

  print(time.localtime().tm_wday)    直接输出结果:1

  time.gmtime()世界标准时间 结构化对象时间    Timestamp--->struct_time

  time.mktime(结构化时间) 转换成时间戳    struct_time--->Timestamp

  

  最常用的将结构化时间转换为字符串时间 strftime("%Y-%m-%d  %X",time.localtime())中间的格式是可以自定义的,后面接结构化的时间,   显示结果      2019-07-09 10:35:38

  将字符串时间转换结构化时间  time.strptime("2019:12:24:17:40:36","%Y:%m:%d:%X")  后面的结构必须和前面一一对应

  固定的给定格式转换   时间戳 到固定字符串time.ctime()      Tue Jul  9 11:09:43 2019         结构化时间 到  固定格式字符串 time.asctime()       

  另外 import  datetime                 datetime.datetime.now()      会输出好看一点的格式   2019-07-09 11:12:08.761414    看起来符合日常习惯

random模块

import random           

  random.random()       0-1的随机浮点数  0.6858580750192156

  randomint(1,6)            1-6包含6的随机整数

  randrange(1,3)             不包括3  1-3随机整数

  choice([1,2,3])                 随机选一个

  sample([1,2,3],2)    随机选两个

  uniform(1,3)                 任意范围浮点数

  shuffle 打乱排序,洗牌的时候可以用

a = [1,2,3,4,5,6]
random.shuffle(a)
print(a)

验证码练习题

import random

def v_code():

    ret = ''

    for i in range(5):
        num = random.randint(0,9)
        alf=chr(random.randint(65,122))
        s=str(random.choice([num,alf]))
        ret+=s
    return ret

其中chr 是利用数字转换成大小写的字母  , 得到5位的大小写字母和数字的随机验证码

  

       

 

posted on 2019-07-07 11:05  大有哥  阅读(135)  评论(0)    收藏  举报

导航