模块
import导入即执行
a.py中间 import b,那么首先就运行b程序
何时导入何时执行
执行顺序根据import所在位置来确定
重复导入不再执行
只有第一处import XX 才执行这个XX,后面的哪怕是间接导入,也不会再执行了
import new_file
print('hello world')
引用自己,输出的是两次’hello world’
module对象
每个.py文件都是一个module对象
a里面要用b的变量,就要写b.x
为了保证a导入模块b时,b中的代码不被直接执行
需要在代码中加入结构
if __name__=='__main__':
x=add(3,5)
print('执行结果为',x)
如果是独立运行,python给这个name赋值为main
如果是被a导入运行,就赋值为模块名b
module类都有一个属性 name
自己程序里面就不用加b.name
但是在a中 查看 就要写 b.name
__file__可以返回该程序所在的地方
packet(包)
实际上就是整个项目所在文件夹下的一个子文件夹
要调用包里面的文件,就要写成
import mypacket.a
安装matplotlib
安装后还会附带pandas和numpy
import matplotlib.pyplot as plt
#导入模块
plt.rcParams['font.sans-serif']=['Microsoft Yahei']
plt.rcParams['axes.unicode_minus']=False
#设置字体,确保负号正确显示
体重=[10,20,21,33,44,23]
战力=[100,30,222,323,444,12]
#创建横纵坐标列表
size=[]
color=[]
for x in 战力:
size.append(x*2)
for y in 战力:
if y>300:
i='r'
elif y>200:
i='g'
else:
i='b'
color.append(i)
plt.grid()
plt.title('这是一张气泡散点图')
plt.xlabel('这是横轴')
plt.ylabel('这是纵轴')
#加栅格和标题
plt.scatter(体重,战力,s=size,marker='*',c=color)
#调用绘图方法,改变大小,显示为*,红色
plt.show()
#显示
题目一
绘制最基本的散点图,横坐标为身高,纵坐标为体重;
在散点图中添加网格线、横轴说明(比如“身高”)和纵轴说明(比如“体重”);
将该散点图改造为气泡图,使点的大小与体重数值相关;
请将数据直接拷贝到Excel表格中并保存工作簿。然后使用xlwings读取这些数据,并使用matplotlib绘制前述图表。
import xlwings as xw
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Microsoft Yahei']
plt.rcParams['axes.unicode_minus']=False
app1=xw.App()
wb=app1.books.open('E:\拷贝过来的文件\全民一起玩Python\数据源.xlsx')
ws=wb.sheets[0]
身高=ws.range('A2:A6').value
体重=ws.range('B2:B6').value
#给数据
wb.close()
app1.quit()
#创建横纵坐标列表
size=[]
for x in 体重:
size.append(x*x/10)
plt.grid()
plt.title('这是一张Excel引入数据的散点图')
plt.xlabel('这是身高')
plt.ylabel('这是体重')
#加栅格和标题
plt.scatter(身高,体重,s=size)
#调用绘图方法,改变大小,显示为*,红色
plt.savefig('E:/拷贝过来的文件/全民一起玩Python/Python安装/这是我画的图.png')
#保存要放在show之前
plt.show()
#显示
不定长参数传参
列表型
def credit(saving,debt,revenue,car=0,married=False,*house):
#默认值的为可选参数,不然算必须参数,这个顺序很讲究
#先必须再可选,最后给元组
max_loan=saving-debt+revenue*5+car
for h in house:
max_loan+=h
if married==True:
max_loan*=1.2
return max_loan
if __name__ =='__main__':
m=credit(saving=1,revenue=3,debt=2,married=True)
x=credit(1,3,2,False,150,20,30)
#要用数字传参,就要都用数字,要带参数类别,就都要带
print(m,x)
字典型
def 字典怎么传_info(info):
print('客户姓名:',info['name'])
print('客户年龄:',info['age'])
print('客户性别:',info['gender'])
if __name__ =='__main__':
i={'name':'锦到黑','age':21,'gender':'男'}
字典怎么传_info(i)
两者等价
def 字典怎么传2_info(**info):
#两个**是关键
print('客户姓名:',info['name'])
print('客户年龄:',info['age'])
print('客户性别:',info['gender'])
if __name__ =='__main__':
字典怎么传2_info(name='锦到黑',age=21,gender ='男')
#传参方式不同
字典参数要放在元组参数之后
题目二
请编写程序读取某公司各产品线产量报表(点击此处下载),然后为每一个产品(即每一行)生成一张统计图(散点图、柱形图、折线图等),并将所有这些图表都存放到某一文件夹下(文件夹名称位置可自己指定)。
import xlwings as xw
import matplotlib.pyplot as plt
# 下面代码从Excel中读取所有数据(包含表头信息)
app = xw.App()
wb = app.books.open('E:\拷贝过来的文件\全民一起玩Python\MyProject\第四课练习.xlsx')
all_data = wb.sheets(1).range('c3:o12').value
#读一个二维列表
app.quit()
# 设置pyplot的中文兼容性、以及横纵轴标签
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('这是月份')
plt.ylabel('这是产量')
# all_data 中的第一个子列表是表头,
# 其中从第2列开始都是月份名称,对于所有图表都一样,
# 故可以在循环前就一次读出放到变量里随时备用
month_names = all_data[0][1:]
# 从all_data的第二个元素(即产品1)开始逐行读取。
for row in all_data[1:]:
# 当前子列表row的第一个元素是该行第一列的产品名
product_name = row[0]
# 第二个元素开始到最后,是该行各月份产量数据
counts = row[1:]
# 以产品名为本图表标题
plt.title(product_name)
# 以月份名变量为横轴、产量数据为纵轴绘图
plt.bar(month_names, counts)
# 保存图表,以产品名为文件名,png格式
plt.savefig(f'E:\拷贝过来的文件\全民一起玩Python\MyProject/{product_name}.png')
# 清空图表以备下次循环绘图
plt.clf()