【Python技巧系列】argparser处理字典

看scikit-learn的源码时,在benchmark的benchmark_20newsgroups.py(关于20newsgroups数据集看这里)中看到了一个有意思的用法,如下:

 1 import argparse
 2
 3 ESTIMATORS = {
 4     "dummy": DummyClassifier(),
 5     "random_forest": RandomForestClassifier(n_estimators=100,
 6                                             max_features="sqrt",
 7                                             min_samples_split=10),
 8     "extra_trees": ExtraTreesClassifier(n_estimators=100,
 9                                         max_features="sqrt",
10                                         min_samples_split=10),
11     "logistic_regression": LogisticRegression(),
12     "naive_bayes": MultinomialNB(),
13     "adaboost": AdaBoostClassifier(n_estimators=10),
14 }
15
16 parser = argparse.ArgumentParser()
17 parser.add_argument(‘-e‘, ‘--estimators‘, nargs="+", required=True,
18                         choices=ESTIMATORS)
19 args = vars(parser.parse_args())
20
21
22 for name in sorted(args["estimators"]):
23     clf = ESTIMATORS[name]

如果让我实现的话,我多半会这样:

 1 ESTIMATORS = {
 2     "dummy": DummyClassifier(),
 3     "random_forest": RandomForestClassifier(n_estimators=100,
 4                                             max_features="sqrt",
 5                                             min_samples_split=10),
 6     "extra_trees": ExtraTreesClassifier(n_estimators=100,
 7                                         max_features="sqrt",
 8                                         min_samples_split=10),
 9     "logistic_regression": LogisticRegression(),
10     "naive_bayes": MultinomialNB(),
11     "adaboost": AdaBoostClassifier(n_estimators=10),
12 }
13
14 names = []
15
16 for key, value in ESTIMATORS.items():
17     names.append(key)
18
19 for name in sorted(names):
20     clf = ESTIMATORS[name]

这两种方法有什么优缺点呢?第一种的写法,行数多了一两行,不够简洁;第二种写法,虽然“简洁”了,但变量的使用在过程中,在程序主体中,在流程上不够清晰,反观第一种写法,将字典变量作为参数传递给函数,因此整个逻辑就清晰许多。

==================================================================================

argparser本身是python中用来处理命令行参数的一个工具,应用格式见文档。

时间: 2024-10-15 07:09:11

【Python技巧系列】argparser处理字典的相关文章

【Python技巧系列】unittest:python自带测试模块【转载】

****本文转载自http://www.cnpythoner.com/post/303.html**** 1 python unittest单元测试方法和用例 2 3 python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 4 5 先介绍下unittest的基本使用方法: 6 7 1.import unittest 8 2.定义一个继承自unittest.TestCase的测试用例类 9 3.定义setUp和tearDown,在每个测试用例前后做一些辅助工作. 1

【Python技巧系列】条件语句一行实现

发现了一种巧妙的条件语句实现方式:(是在pattern的README中的一个小例子里面看到的) 1 1 if A < 1: 2 2 B 3 3 else: 4 4 C 5 5 6 6 ###can be transformed to 7 7 8 8 A < 1 and B or C 9 9 得益于python灵活的格式转换,  and, or 这些逻辑符号我一直认为计算得到的是布尔值,只能用在判断语句中,比如: 1 if 1 and 2: 2 print 1 3 4 >> 1 5

【Python技巧系列】用parse处理文本

parse是python中的一个文本处理工具包,其中包括 findall(), parse(), format() 等等,  findall() 比较常用(对我来说), format(), parse() 互为逆. 来看看 parse() 的用法:(代码摘抄自文档) 1 >>> from parse import * 2 3 >>> parse("It's {}, I love it!", "It's spam, I love it!&qu

Python学习系列(五)(文件操作及其字典)

Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: 1 #coding:utf-8 2 fn='test1.py' 3 fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py 4 print 'reading pos:',fp.tell() 5 r=fp.read(20) #

(原创)Python字符串系列(1)——str对象

在本博客 <Python字符串系列> 中,将介绍以下内容: Python内置的str对象及操作 字符串的格式化 Python中的Unicode字符串 Python中的正则表达式 re模块 本文将介绍Python内置的 str 类型,列举Python中字符串对象支持的方法,使用这些方法可以实现强大的字符串处理功能. 在Python 2 中,普通字符串与Unicode字符串有着明确的区分,二者都是Python内置的基本类型,例如: >>> type(str) <type '

Python学习系列(四)Python 入门语法规则2

Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, utf8解码成Unicode,再将unicode编码成gbk 对于py3.5 如果utf8>gbk, utf8 直接编码成gbk(中间那一步直接被优化了) 3.很多时候,这个可以直接跳过,只有当编码出下问题的时候,再考虑这个知识点 二.运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算

爱情有36计,不如看我这26条python技巧!

作者 Peter Gleeson 是一名数据科学家,日常工作几乎离不python.一路走来,他积累了不少有用的技巧和tips,现在就将这些技巧分享给大家.这些技巧将根据其首字母按A-Z的顺序进行展示. ALL OR ANY Python之所以成为这么一门受欢迎的语言一个原因是它的可读性和表达能力非常强.Python也因此经常被调侃为“可执行的伪代码”.不信你看: x = [True, True, False]if any(x):    print("At least one True"

python基础系列教程——Python3.x标准模块库目录

python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct:将字节解析为打包的二进制数据 codecs:注册表与基类的编解码器 数据类型 datetime:基于日期与时间工具

Python学习系列(八)( 面向对象基础)

 Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类本身. 2,类的方法:对象也可以使用属于类的函数来具有功能,这样的函数称之为类的方法.域和方法合称为类的属性.类使用class关键字创建,类的属性被列在一个缩进块中. 3,self:类的方法与普通的函数只有一个特别的区别----他们必须有一个额外的第一个参数名称,但是在调用的时候不能为其赋值,Pyt