用python编写一个可以在单独脚本中调用的方法
我正在尝试编写一个可以在不同脚本中调用的方法,但是,我无法以我编写的方式成功调用脚本。这是我试图调用的脚本之一(第二个非常类似:用python编写一个可以在单独脚本中调用的方法,python,Python,我正在尝试编写一个可以在不同脚本中调用的方法,但是,我无法以我编写的方式成功调用脚本。这是我试图调用的脚本之一(第二个非常类似: #!usr/bin/env python import re import urllib from datetime import datetime from datetime import timedelta date = datetime.now() date1 = date + timedelta(days=1) date2 = date + timedel
#!usr/bin/env python
import re
import urllib
from datetime import datetime
from datetime import timedelta
date = datetime.now()
date1 = date + timedelta(days=1)
date2 = date + timedelta(days=2)
class city :
def __init__(self, city_name, link) :
self.name = city_name
self.url = link
self.wind1 = 0
def retrieveTemps(self) :
filehandle = urllib.urlopen(self.url)
# get lines from result into array
lines = filehandle.readlines()
# (for each) loop through each line in lines
line_number = 0 # a counter for line number
for line in lines:
line_number = line_number + 1 # increment counter
# find string, position otherwise position is -1
position2 = line.rfind('<ul class="stats">')
#String is found in line
if position2 > 0 :
self.wind0 = lines[line_number + 1].split('</strong>')[0].split('style="">')[-1]
break # done with loop, break out of it
return ('c.wind0')
filehandle.close()
m1 = city('Mexico City', 'http://www.accuweather.com/en/mx/mexico-city/242560/daily-weather-forecast/242560?day=2')
m3 = city('Veracruz', 'http://www.accuweather.com/en/mx/veracruz/236233/daily-weather-forecast/236233?day=2')
m5 = city('Tampico', 'http://www.accuweather.com/en/mx/tampico/235985/daily-weather-forecast/235985?day=2')
m7 = city('Nuevo Laredo', 'http://www.accuweather.com/en/mx/nuevo-laredo/235983/daily-weather-forecast/235983?day=2')
m9 = city('Monterrey', 'http://www.accuweather.com/en/mx/monterrey/244681/daily-weather-forecast/244681?day=2')
m11 = city('S. Luis Potosi', 'http://www.accuweather.com/en/mx/san-luis-potosi/245369/daily-weather-forecast/245369?day=2')
m13 = city('Queretaro', 'http://www.accuweather.com/en/mx/queretaro/245027/daily-weather-forecast/245027?day=2')
m15 = city('Laz. Cardenas', 'http://www.accuweather.com/en/mx/lazaro-cardenas/239054/daily-weather-forecast/239054?day=2')
cities = []
cities.append(m1)
cities.append(m3)
cities.append(m5)
cities.append(m7)
cities.append(m9)
cities.append(m11)
cities.append(m13)
cities.append(m15)
c、 wind0是通过script2找到的,而所有其他变量都是通过script1找到的。如果我第二次导入script1,我会得到错误:AttributeError:city实例没有属性“wind1”,它没有与script2相关的属性,它与script1相关联。它似乎忽略了我导入的第一个脚本
如有任何建议,将不胜感激。谢谢
更新:
根据你的建议,再加上一些其他的东西,我想出了这个,它工作得非常完美
#!usr/bin/env python
import script1
import script2
wind = script2.getWind()
cities = script.getCities()
for c in cities :
c.retrieveTemps()
for w in wind :
w.retrieveWind()
# iterate over both lists in parallel, zip returns a tuple
for c, w in zip(cities, wind) :
print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,w.wind1)
谢谢大家的帮助!如果是我,我会将第一个文件中的方法复制并粘贴到您现在使用的文件中,因为据我所知,没有办法从不同的脚本调用方法,不确定,也许有,但对我来说最简单的事情是复制并粘贴该方法。希望我有所帮助……)将所有内容设置在a类函数下面,该函数返回
城市
,导入该函数并调用它,将城市
设置为新的局部变量。然后可以运行for循环
免责声明:我根本没有测试这个
步骤1:
def getCities():
m1 = city('Mexico City', 'http://www.accuweather.com/en/mx/mexico-city/242560/daily-weather-forecast/242560?day=2')
m3 = city('Veracruz', 'http://www.accuweather.com/en/mx/veracruz/236233/daily-weather-forecast/236233?day=2')
m5 = city('Tampico', 'http://www.accuweather.com/en/mx/tampico/235985/daily-weather-forecast/235985?day=2')
m7 = city('Nuevo Laredo', 'http://www.accuweather.com/en/mx/nuevo-laredo/235983/daily-weather-forecast/235983?day=2')
m9 = city('Monterrey', 'http://www.accuweather.com/en/mx/monterrey/244681/daily-weather-forecast/244681?day=2')
m11 = city('S. Luis Potosi', 'http://www.accuweather.com/en/mx/san-luis-potosi/245369/daily-weather-forecast/245369?day=2')
m13 = city('Queretaro', 'http://www.accuweather.com/en/mx/queretaro/245027/daily-weather-forecast/245027?day=2')
m15 = city('Laz. Cardenas', 'http://www.accuweather.com/en/mx/lazaro-cardenas/239054/daily-weather-forecast/239054?day=2')
cities = []
cities.append(m1)
cities.append(m3)
cities.append(m5)
cities.append(m7)
cities.append(m9)
cities.append(m11)
cities.append(m13)
cities.append(m15)
return cities
步骤2:
from script1 import getCities
步骤3:
cities = getCities()
for c in cities :
c.retrieveTemps()
print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,c.wind1)
在主脚本中,使用变量
c
引用“风”,然后引用“城市”。如果循环结束,变量c
将引用城市列表中的最后一个城市。因此它没有任何“风”属性 您正在导入city
,但不是cities
。好吧,我更改了脚本以同时导入city和cities,但我遇到了另一个问题,我在原始帖子中重申了这一点。所有优秀编程语言的基本能力都是调用外部方法的能力。这就是导入的全部内容:将外部方法包含到内存中,以帮助执行脚本。事实上,每一种编码语言都不过是一个理解自己语言的引擎,以及该语言作者编写的一系列外部方法,这些方法将高级函数(如Python的lower()
,它将字符串中的所有字母转换为小写)分解为更小的函数,这样您就不必一直自己编写所有代码了。@JWarner112好的,我明白,但我只编写了大约一个月的python,所以我认为这是不可能的,但显然我被证明是错的。。。下次我会记住的,没问题,我的朋友。我们都在学习!我自己一个半月前才开始使用Python,但我已经为此投入了很多时间。此外,这是编程的一个总体概念,而这些概念可能更难掌握。试试codecademypython教程。它的工作并不完美,但你可以编写代码并操作URL来完成这一切:)@JWarner112我每天至少花3个小时,通常是5个或更多时间,我在codecademy中使用了大约44%的python,这是一个很好的网站,目前我正在学习一本名为《python编程绝对初学者》的书,非常好。我建议使用它,因为它教python 3.1.1。还有,我在几年前就开始使用codecade学习java,但几年前我还不懂它,我可能会在以后回到java,我的朋友说他可以教我谢谢!我可以看看。对不起。我是python新手,不知道该怎么做。当我这么做时,它会给我一个下面的错误,行“cities=script1.getCities()”..'NameError:name'script1'没有定义'Oh,我想摆脱script1,只使用getCities()。是的,我不怎么用Python…好的。这就解决了这个问题。然而,我仍然有我在我的原始文章的第2部分相同的错误。我用我在原始帖子中添加的代码调用它:好的,首先,retrieveTemps()返回字符串“c.wind0”。我假设您希望它实际返回self.wind0的值或列表或其他内容。然后,当您在城市中循环时,需要将变量设置为c.retrieveTemps(),否则函数的输出将不起作用。在循环时,您可能希望将c.retrieveTemps()的值附加到列表中。然后可以在打印语句中使用该列表中的值。
cities = getCities()
for c in cities :
c.retrieveTemps()
print(c.name,c.high0,c.low0,c.high1,c.low1,c.weather0,c.weather1,c.wind0,c.wind1)