您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:在python中实现导入一个需要传参的模块

51自学网 2021-10-30 22:40:52
  python
这篇教程在python中实现导入一个需要传参的模块写得很实用,希望能帮到您。

最近跑实验,遇到了一个问题:

由于实验数据集比较多,每次跑完一个数据集就需要手动更改文件路径,再将文件传到服务器,再运行实验,这样的话效率很低,必须要专门看着这个实验,啥时候跑完就手动修改运行下一个实验。我个人无法忍受这样低效率,就想能不能有什么解决的办法。

我们期望的解决办法是通过命令行传参来解决这个问题,因为接下来是需要编写shell脚本来批量运行实验,如果用输入语句的方式显得太笨拙。

在编写实验代码的时候,我将所有的参数集中到一个py文件中,这样便于后期的维护,现在的问题就是需要通过命令行传参的方式改变该文件中的某些值。

关于传参,python中提供了argparse这一模块。通过这个模块 就能很快的实现命令行传参的功能。

下面举个例子:

文件test1.py

import argparsefrom 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

运行:

我们可以通过改变命令行的参数来改变这个name的值,其实关于这一点也比较好理解,我们可以想成python将这三份代码拼接在一起,再一起执行。

这样就实现了我刚才想要的功能。

补充:python调用模块时传参出错的解决方案

首先定义了一个Login模块

传参是两个:username,password

#coding=utf-8def login(self,username,password):    driver=self.driver    self.driver.implicitly_wait(30)#不加等待会出错    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中调用该模块:

#coding=utf-8from selenium import webdriverimport unittest,timefrom public import Loginclass 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")#传参是这两个        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()

可是运行后发现出错:

明明传参是"jinbian3333","jinbian76",为什么登录信息是图中呢?

回头查看被调用模块,

按我理解就是 加了" " 就不是变量了,是常量了, 你调用了该模块,即使传参 它还是按照模块本身的设置:“username”"password"运行

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。如有错误或未考虑完全的地方,望不吝赐教。


详细总结Python类的多继承知识
PyCharm 安装与使用配置教程(windows,mac通用)
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。