我們?cè)谑褂胮ython模塊的時(shí)候有沒(méi)有想過(guò)使用這些模塊的方法需不需要傳參?需要傳參的模塊要怎么傳參又該如何實(shí)現(xiàn)?今天小編就帶來(lái)一篇怎么在python中實(shí)現(xiàn)導(dǎo)入一個(gè)需要傳參的模塊的文章,希望可以幫到各位需要的小伙伴。
最近跑實(shí)驗(yàn),遇到了一個(gè)問(wèn)題:
由于實(shí)驗(yàn)數(shù)據(jù)集比較多,每次跑完一個(gè)數(shù)據(jù)集就需要手動(dòng)更改文件路徑,再將文件傳到服務(wù)器,再運(yùn)行實(shí)驗(yàn),這樣的話效率很低,必須要專門看著這個(gè)實(shí)驗(yàn),啥時(shí)候跑完就手動(dòng)修改運(yùn)行下一個(gè)實(shí)驗(yàn)。我個(gè)人無(wú)法忍受這樣低效率,就想能不能有什么解決的辦法。
我們期望的解決辦法是通過(guò)命令行傳參來(lái)解決這個(gè)問(wèn)題,因?yàn)榻酉聛?lái)是需要編寫(xiě)shell腳本來(lái)批量運(yùn)行實(shí)驗(yàn),如果用輸入語(yǔ)句的方式顯得太笨拙。
在編寫(xiě)實(shí)驗(yàn)代碼的時(shí)候,我將所有的參數(shù)集中到一個(gè)py文件中,這樣便于后期的維護(hù),現(xiàn)在的問(wèn)題就是需要通過(guò)命令行傳參的方式改變?cè)撐募械哪承┲怠?/p>
關(guān)于傳參,python中提供了argparse這一模塊。通過(guò)這個(gè)模塊 就能很快的實(shí)現(xiàn)命令行傳參的功能。
下面舉個(gè)例子:
文件test1.py
import argparse
from argparse import RawTextHelpFormatter
parse = argparse.ArgumentParser(description="The parameters for the feature select method", formatter_class=RawTextHelpFormatter)
parse.add_argument('name', type = str)
args = parse.parse_args()
name = args.name
文件test3.py
import test1
str = test1.name + 'asdasdasd'
文件test2.py
import test3
print test3.str
運(yùn)行:
我們可以通過(guò)改變命令行的參數(shù)來(lái)改變這個(gè)name的值,其實(shí)關(guān)于這一點(diǎn)也比較好理解,我們可以想成python將這三份代碼拼接在一起,再一起執(zhí)行。
這樣就實(shí)現(xiàn)了我剛才想要的功能。
補(bǔ)充:python調(diào)用模塊時(shí)傳參出錯(cuò)的解決方案
首先定義了一個(gè)Login模塊
傳參是兩個(gè):username,password
#coding=utf-8
def login(self,username,password):
driver=self.driver
self.driver.implicitly_wait(30)#不加等待會(huì)出錯(cuò)
driver.switch_to.frame(0)
driver.find_element_by_class_name("dlemail").clear()
driver.find_element_by_class_name('dlemail').send_keys("username")
driver.find_element_by_class_name('dlpwd').clear()
driver.find_element_by_class_name('dlpwd').send_keys("password")
driver.find_element_by_id("dologin").click()
def logout(self):
driver=self.driver
driver.find_element_by_link_text(u"退出").click()
driver.quit()
在Test.login中調(diào)用該模塊:
#coding=utf-8
from selenium import webdriver
import unittest,time
from public import Login
class TestLogin(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url = "http://www.126.com/"
self.verificationErrors = []
def test_login(self):
driver=self.driver
driver.get(self.base_url)
Login.login(self,"jinbian3333","jinbian76")#傳參是這兩個(gè)
text=driver.find_element_by_id("spnUid").text
self.assertEqual(text,"jinbian3333@126.com")
Login.logout(self)
def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors)
if __name__ == '__main__':
unittest.main()
可是運(yùn)行后發(fā)現(xiàn)出錯(cuò):
明明傳參是"jinbian3333","jinbian76",為什么登錄信息是圖中呢?
回頭查看被調(diào)用模塊,
按我理解就是 加了" " 就不是變量了,是常量了, 你調(diào)用了該模塊,即使傳參 它還是按照模塊本身的設(shè)置:“username”"password"運(yùn)行
以上就是怎么在python中實(shí)現(xiàn)導(dǎo)入一個(gè)需要傳參的模塊的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持W3Cschool。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。