模块化是将程序分解为一个个的模块module,通过组合模块来搭建出一个完整的程序。
有点:便于团队开发,方便维护,代码复用。
在python中一个脚本(.py)文件就是一个模块,创建模块实际上就是创建一个.py文件,可以被其他模块导入并使用。
注:
1 自定义模块的时候要注意命名的规范,使用小写,不要使用大写,不要使用中文,不要使用特殊字符等。
2 不要与内置模块冲突 sys 等。
# 在模块中定义变量
a = 10
b = 20
# 在模块中定义函数
def max(x, y):
"""
加法
:param x:
:param y:
:return:
"""
return x + y
def min(x,y):
"""
减法
:param x:
:param y:
:return:
"""
return x-y
# 在模块中定义类
class calculator: # 定义一个加法计算器
@classmethod #导入计算器模块
def sum(cls,*nums):
res = 0
for i in nums:
res += i
return res
'''
__name__ 属性是模块的内置属性,每个模块中都有该属性,当该
.py文件是主执行文件,直接被执行时,其值为 __main__ ,当该
.py文件是被调用,导入执行文件时,其值为模块名
'''
# print(__name__)# 如果这么直接这么测试,被导入文件执行时,导入文件也会打印该内容
#程序入口,类似于java中的main()方法,只在当直接调用该文件时才会执行,用来执行测试
if __name__ == '__main__' :
print(calculator.sum(1,2,3)) # 只有在当前界面执行才会打印该内容,其他文件中不会执行。
确保和定义模块处于同一个package,然后建立新的文件。
导入模块的2种方式:
方式一:import 包名.模块名 [as 别名] (别名可要可不要)
方式二: from 包名 import 模块名
from 包名.模块名 import 变量|函数|类
注:导入模块的代码可以放在任意位置,但一般都放在程序的开头。
# 方式一,不定义别名
import 模块.定义模块 #导入模块
print(模块.定义模块.a) #调用模块中的变量
print(模块.定义模块.max(6,6)) #调用模块中的函数
print(模块.定义模块.calculator.sum(9,9)) # 调用类
print('*' * 50)
# 方式一 定义别名
import 模块.定义模块 as m # 别名为m
print(m.b)
print(m.min(8,5))
print(m.calculator.sum(6,6,6))
print('*'*50)
# 方式二 普通方式
from 模块 import 定义模块 # 导入模块
print(定义模块.a)# 调用模块中的变量
print(定义模块.max(6,6)) #调用模块中的函数
print(定义模块.calculator.sum(5,55))
print('*'*50)
#方式二 导入模块并传参
from 模块.定义模块 import a,b,max,min,calculator # 导入模块,多个变量\函数\类之间用逗号隔开
#from 模块.定义模块 import * #导入全部参数,不建议这么做
print(b)# 调用模块中的变量
print(min(8,2))#调用模块中的函数
print(calculator.sum(8,8,8))
Python提供了一个强大的标准库,内置了许多非常有用的模块,可以直接使用(标准库是随python一起安装的),不用单独安装。
完整的库及介绍可以见官网:https://docs.python.org/zh-cn/3/library/index.html 如果嫌官方太麻烦,可以看:https://www.cnblogs.com/jiangchunsheng/p/9275881.html,https://www.cnblogs.com/aipiaoborensheng/p/7813087.html
,https://blog.51cto.com/12402007/2164567
这里说明一下 标准库或第三方库的使用方法:
安装第三方库这儿暂时不说,后面有介绍的,只说 如何使用,因为标准库和第三方库使用方法基本上是一样的。(大多数用import,也有少部分用from,其实都一样,只是不同导入方法使用方法不同而已,如datetime用from使用时会方便很多)
格式 : import 库名(文件顶端导入库)
导入以后 : 库名.功能 即可
如:
sys:获取python解析的信息
os:对操作系统进行访问,主要是对目录或文件操作
math:数学运算
random:生成随机数
datetime:处理日期和时间,提供了多个类(dimedelta是处理时间类)
time:处理时间,关于时间加减 可以参考:https://blog.csdn.net/xieganyu3460/article/details/82229039
import sys
import os
import math
import random
#时间库的两种导入方法。用法不一样
#import datetime
#print(datetime.datetime.now()) #import方法导入使用方法
from datetime import datetime,timedelta #为了简便,建议使用这种方式导入时间库
#print(datetime.now()) #from导入使用方法
import time
print(sys.version) #python版本
print(sys.platform) # 系统平台
print(sys.argv) #命令行参数
print(sys.path) #模块搜索路径,包含了python解析器查找模块的搜索路径
print(sys.modules) #显示当前程序中引入的所有模块
print(sys.getdefaultencoding()) #默认字符集
#sys.exit('程序退出(自定义提示内容)') #退出解析器
print('——————————————————————————————————————————————')
print(os.name) #操作系统的类型
print(os.environ) #系统的环境变量
print(os.getcwd()) #当前的目录
print(os.listdir('d:/')) #列出指定目录的内容
print(os.path.exists('d:/newfile')) #判断路径是否存在
#os.system('ping baidu.com') #执行系统命令
print('——————————————————————————————————————————————')
print(math.pi) #获取圆周率
print(math.ceil(3.4)) #向上取整(结果4)
print(math.floor(3.4)) #向下取整(结果3)
print(math.pow(2,3)) #开平方,如这就是2的3次方
print(math.trunc(2.777)) #去尾取整 (结果为2)
print(round(2.777)) #结尾取整(结果为3)
print(round(3.1415925,3)) #四舍五入,保留3位小数
print('——————————————————————————————————————————————')
print(random.random()) # 默认返回[0,1]之间的随机浮点数
print(random.randint(1,101)) #返回1-101 之间的随机整数
print(random.sample([1,2,3,33,44,16,66,7],2)) #在数组中随机返回2个数值
#print(datetime.datetime.now()) #import方法导入使用方法
print(datetime.now()) #默认显示当前时间 年月日,时分秒毫秒
print(datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')) #将datetime转换为指定格式的str,不支持中文。
#如果要支持中文,可以使用占位符的方式实现。
print(datetime.strftime(datetime.now(),'%Y{0}-%m{1}-%d{2} %H:%M:%S').format('年','月','日'))
print(datetime.strptime('2020-04-11','%Y-%m-%d')) # 将str转换为datetime格式
#时间加减,需要另外一个库,格式是这样的: from datetime import datetime,timedelta
print('明天:',datetime.now()+timedelta(days=1)) #timedelta表示两个时间之间的时间差,可以用来进行日间的加减操作
#timedelta(weeks=0, days=0, hours=0, minutes=0, seconds=0, milliseconds=0, microseconds=0, )
# 依次为 "周" "天", "时","分","秒","毫秒","微秒"
print('——————————————————————————————————————————————')
print(time.time()) #返回当前的时间戳
print(int(time.time())) #秒级时间戳
print(int(time.time() * 1000)) #毫秒级时间戳
time.sleep(5) #休眠5秒
PYthon社区提供了大量的第三方模块,使用方式与标准库类似。
安装第三方模块:
1 使用包管理工具:pip (随python一起安装的)
语法:pip install 模块名
使用方法参加:https://jingyan.baidu.com/article/466506583fec5af549e5f825.html
2 使用pycharm 来安装:
方法:file-settings(设置)-Project:python-Project Interpreter
注意要选择当前版本:
问题说明:是因为pychram 安装脚本有问题。
处理方法:退出pycharm,右键pycharm-属性-打开安装位置
打开以后默认在bin目录,返回上一级-打开plugins-python-helpers目录-编辑packaging_tool.py文件
如果找不到这个目录:在安装目录首页搜索:packaging
我的上面是正常的,把你的这2个内容全部删了,替换为
def do_install(pkgs):
run_pip(['install'] + pkgs)
def do_uninstall(pkgs):
run_pip(['uninstall', '-y'] + pkgs)
替换完以后重写打开pycharm并重新安装模块即可。
如果替换为上面的不行则用下面的
def do_install(pkgs):
try:
# import pip
try:
from pip._internal import if __name__ == '__main__':
except Exception:
from pip import if __name__ == '__main__':
except ImportError:
error_no_pip()
return main(['install']+pkgs)
def do_uninstall(pkgs):
try:
#import pip
try:
from pip._internal import main
except Exception:
from pip import main
except ImportError:
error_no_pip()
return main(['uninstall','-y'] + pkgs)
注意格式:如果放进去格式乱了,用其他文件打开,notepad或者pycharm打开把
默认是在python官网下载的模块(如果模块较大,可能会比较慢),可以更改下载源
比如https://pypi.python.org/simple
改成https://pypi.douban.com/simple
百度搜索:echarts
,点击实例,你可以发现一个很骚气的东西
随便点开一个,发现,卧槽,还有代码,如果把这作为背景,这也太帅了把,当然,我臆想的而已,我现在还不知道这能不能作为网页之类的背景呢!!!!
pyecharts是一个用于Echarts图表的类库,便于在Python中根据数据生成可视化的图标,Echarts是百度开源的一个数据可视化JS库,主要用来进行数据可视化。
各种图标使用方式见官方(太炫酷了把):http://pyecharts.org/#/zh-cn/basic_charts?id=funnel%ef%bc%9a%e6%bc%8f%e6%96%97%e5%9b%be
使用前需要注意一个坑!!! 包名和文件名 不能有中文,否则 就会报错!!!
包和类全部无中文!!!
运行无报错以后,在同包下面会生成一个 html结尾的文件。
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("地表最强yy商铺", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render("mycharts.html")
bar.render()
现在运行 自动生成的.html结尾的文件!
就会打开一个网页,里面就是表格信息了!!!!
但是,我第二次弄的时候导包突然报错了!!!
葛优瘫坐在椅子上 深思 …
葛优瘫坐在椅子上 深思 …
突然想到,我包名是pyecharts , 模块是pyecharts。。我from导入的时候会不会系统默认给我导入我创建的这个包了啊???
我把我这个包名改了试试,报错。唉 果然不是这个问题啊!
难道是 文件名有错? demo01和其他包里的重复了? 我又把 文件名后面都加了个test,然后还是不行啊,我以为没生效,重启了软件,还是不行啊。哎 看来真出问题了。
都不行怎么办? 凉拌啊 凉了啊!!! 哎
要不重新导入模块试试,试试把 反正也就这样了!!!
咦? 可以了,我仔细看了一下,卧槽!!!! 就是我之前想的那样,导入的模块系统默认导入同名的包了!! 然后我改了包名,这名字也改了,没注意看啊!! 坑爹啊 坑爹啊!!! 细心点 细心点啊!!!
上诉能正常执行以后,参加:http://gallery.pyecharts.org/#/Map3D/map3d_china_base
这是官方给的 所有代码!!!
随便来几个官网中的代码测试:
demo1: 生成3D柱形图
执行方式,执行该代码就会自动生成一个html的文件,再打开自动生成的html即可
import random
from pyecharts import options as opts
from pyecharts.charts import Bar3D
x_data = y_data = list(range(10))
def generate_data():
data = []
for j in range(10):
for k in range(10):
value = random.randint(0, 9)
data.append([j, k, value * 2 + 4])
return data
bar3d = Bar3D()
for _ in range(10):
bar3d.add(
"",
generate_data(),
shading="lambert",
xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value"),
yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
bar3d.set_global_opts(title_opts=opts.TitleOpts("Bar3D-堆叠柱状图示例"))
bar3d.set_series_opts(**{
"stack": "stack"})
bar3d.render("bar3d_stack.html")
demo2:三维地图
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("中国", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="测试而已,数据没有意义(ccx著)"),
visualmap_opts=opts.VisualMapOpts(max_=500, is_piecewise=True),
)
.render("map_visualmap_piecewise.html")
)