欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数的调用def

程序员文章站 2022-06-25 19:20:04
...

背景

之前一直没怎么自己写过函数,后来程序太大了,不用函数分块的话,显得比较乱
问题来了,之前一直停留在理解的层次,只是能够看懂别人写的函数代码,自己亲自动手一写就抓瞎了
昨天晚上反复检查了半天,也没发现问题所在,今天经过师兄的指点,恍然大悟
这个故事告诉我们要是要多多交流,不懂就问,很多时候自己琢磨半天也弄不明白,可能别人指点一下就清楚了。
talk is cheap,show me code

Error : all_opentimes is not defined

定义与调用

#基本的函数框架
def function_1():
	return a
def function_2():
	return b
def function_3():
	return c
if __name__ == '__main__':
	function_1()
	function_2()
	function_3()

上述代码是基本的函数框架,
if name == ‘main’: #这个后面是调用函数的代码行,是主干,依次运行function_1,function_2,function_3
这是一种运行方式

但是我昨天写的代码有点不一样,我的function_2中用到了function_1中的处理结果。但我还是按上述代码写的,自然就运行不了。
需要这样修改

#基本的函数框架
def function_1():
	return a
def function_2():
	a = function_1()
	return b
def function_3():
	return c
if __name__ == '__main__':
	function_1()
	function_2()
	function_3()

需要在function_2中调用function_1,并且需要创建一个变量来储存这个调用值

当然函数还有形参实参的概念,形参就是def function_1() 括号里面的参数,实参是主干中 调用代码行括号里面的参数,比如

#基本的函数框架
def function_1(形参1):
	a = 形参1
	return a
def function_2():
	a = function_1(形参2)
	return b
def function_3(形参3):
	return c
if __name__ == '__main__':
	function_1(实参1)
	function_2(实参2)
	function_3(实参3)

实参是输入的参数,方便我后续随意更改输入参数
形参就是参与这个函数运算的参数,作为一个接口,当没有输入参数时,形参和实参都可以空着

昨日代码

# -*- coding: utf-8 -*-  
import numpy as np
import pandas as pd
import os
from datetime import datetime
import matplotlib.pyplot as plt
import re
import time


def readfile(months,last_days):
	#months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
	#last_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
	t_start = time.clock()  #起始时间,用于监测代码的运行时间
	# months = ['06']
	# last_days = [30]
	for month,last_day in zip(months,last_days):
		path = 'C:\\Users\\hao\\Desktop\\time开窗模型\\源数据\\48NNJZ03_M_2017-{}.xlsx'.format(month) #
		b_1 = pd.ExcelFile(path)
		Sheet_names = b_1.sheet_names
		place_number = 0 #有开窗记录的地点数目
		all_opentimes = [] #所有的开窗时刻记录 
		all_openstates = [] #所有的开窗状态记录
		for Sheet_name in Sheet_names:
			#if (not re.search('卧', Sheet_name) == None) and (not re.search('窗', Sheet_name) == None) and (re.search('阳台', Sheet_name) == None) and (re.search('客厅', Sheet_name) == None) and (re.search('厨房', Sheet_name) == None):			
			if (not re.search('卧', Sheet_name) == None) and (not re.search('窗', Sheet_name) == None) and (re.search('阳台', Sheet_name) == None) and (re.search('厨房', Sheet_name) == None):
				place_number += 1
				print('有开窗记录的sheet数量:%d次'%place_number)
				df = pd.read_excel(path, sheet_name=Sheet_name)
				temp_columns = ['采集时间', '状态']
				df = df[temp_columns].dropna()
				#all_openstates = df['状态'].tolist()
				all_openstates = np.array(df['状态'])
				#print(df)
				for i in range(len(df['采集时间'])):
					q_1 = str(df.iloc[i, 0])[:10]
					q_1 = q_1.split('-')
					#print(q_1)
					q_2 = str(df.iloc[i, 0])[11:]
					q_2 = q_2.split(':')
					#print(q_2)
					q_3 = q_1[0] + q_1[1] + q_1[2] + q_2[0] + q_2[1] + q_2[2]
					#print(q_3)
					all_opentimes.append(q_3)
					#print(all_opentimes)
			print('all_opentimes:%d长度'%len(all_opentimes))
			#return all_opentimes
			#return all_openstates

		#提取天气栏里面的信息
		weather_times,weather_temps = [],[]  #天气栏中的时刻和温度
		df = pd.read_excel(path, sheet_name='天气')
		temp_columns = ['采集时间', '温度(℃)']
		df = df[temp_columns].dropna()
		#weather_temps = df['温度(℃)'].tolist()
		weather_temps = np.array(df['温度(℃)'])
		for i in range(len(df['采集时间'])):
			q_1 = str(df.iloc[i, 0])[:10]
			q_1 = q_1.split('-')
			#print(q_1)
			q_2 = str(df.iloc[i, 0])[11:]
			q_2 = q_2.split(':')
			#print(q_2)
			q_3 = q_1[0] + q_1[1] + q_1[2] + q_2[0] + q_2[1] + q_2[2]
			#print(q_3)	
			weather_times.append(q_3)
		print('weather_times长度%d'%len(weather_times))	
		#return weather_times,weather_temps			
	t_end = time.clock()
	run_time = t_end - t_start
	print('{}函数耗时:%ds'.format('readfile')%run_time)
	#print(all_opentimes)
	return all_opentimes, all_openstates, weather_times, weather_temps 
	#return all_openstates

def dealwithfile():
	t_start = time.clock()
	all_opentimes, all_openstates, weather_times, weather_temps = readfile(months,last_days)
	#(all_opentimes) = read()
	new_temps, new_humidity = [], [] 
	for all_opentime in all_opentimes:
		break_number = 0
		for weather_time in weather_times:
			if (all_opentime <= weather_time) and (break_number == 0):
				new_temps.append(weather_temps[weather_times.index(weather_time)])
				break_number += 1
	print('new_temps长度%d'%len(new_temps))
	if len(all_opentimes) == len(new_temps) + 1: #防止出现最后一次开窗时间比最后一次温度数据时间更晚
		new_temps.append(weather_temps[-1])
	t_end = time.clock()
	run_time = t_end - t_start
	print('{}函数耗时:'.format('find'), run_time)
	return new_temps, new_humidity

def savefile():
	all_opentimes, all_openstates, weather_times, weather_temps = readfile(months,last_days)
	new_temps, new_humidity = dealwithfile()
	df = pd.DataFrame([all_opentimes, new_temps])
	#df = pd.concat
	df.to_excel(r'C:\Users\hao\Desktop\test.xlsx', index=False)


if __name__ == '__main__':
	months = ['06']
	last_days = [30]	
	# readfile(months, last_days)
	# dealwithfile()
	savefile()
相关标签: 报错 def