分析项目的deploy.py实例来学习。
1. OptionParser
片段:
def init_arg_parser(): parser = OptionParser("operation with shark") parser.add_option("-o", "--operation", help="target <operation> to be perform [precheck,checkconfig,sethcpkey,setuvakey,install,uninstall,checkinstall]", ) parser.add_option("-e", "--environment", help="target <environment> to be installed, like 'pro', 'dr', 'dev'...") parser.add_option("-m", "--module", help="target module to be installed,[bin, conf]") parser.add_option("-v", "--version", help="the target version to be installed") parser.add_option("-r", "--release", help="the release number of the RPM package", default="1") parser.add_option("-i", "--base_directory", help="the path of base directory for installation", default="/apps") parser.add_option("-a", "--artifactory", help="nexus or artifactory", default="artifactory") parser.add_option("-b", "--buildnumber", help="build number", default="1") parser.add_option("-p", "--rpm_db", help="rpm db path") parser.add_option("-s", "--source_pkg_path", help="the full path of local package to be installed, or will download from remote by script") parser.add_option("-D", "--debug", help="debug mode", action="store_true") (options, args) = parser.parse_args() return options
参考:
https://blog.csdn.net/lwnylslwnyls/article/details/8199454
2. lambda
片段:
... env = lambda: args.environment if args.environment else _raise_attribute_error("[-e/--environment] is required for operation: %s" % args.operation) version = lambda: args.version if args.version else _raise_attribute_error("[-v/--version] is required for operation: %s" % args.operation) # shark-bin/shark-conf pkg_name = lambda: '%s-%s' % (DEFAULT_APP_NAME, args.module) if args.module else _raise_attribute_error("[-m/--module] is required for operation: %s" % args.operation) rpm_db = lambda: args.rpm_db if args.rpm_db else '%s/%s/' % (args.base_directory, RPM_DB) artifactory = lambda: args.artifactory if args.artifactory else _raise_attribute_error("[-a/--artifactory] is required for operation: %s" % args.operation) buildnumber = lambda: args.buildnumber if args.buildnumber else _raise_attribute_error("[-a/--buildnumber] is required for operation: %s" % args.operation) ...
lambda作为一个表达式,定义了一个全局匿名函数。
lambda的使用大量简化了代码,使代码简练清晰。但这会在一定程度上降低代码的可读性。
lambda存在意义就是对简单函数的简洁表示。
参考: