1. ```
  2. def test1(val):
  3. val[1]=0
  4. print('test1:'+str(id(val)))
  5. b1=[0,1,2,3]
  6. print('b1:'+str(id(b1)))
  7. test1(b1)
  8. print(b1)
  9. Output:
  10. b1:2232273138760
  11. test1:2232273138760
  12. [0, 0, 2, 3]
  13. def test2(val):
  14. val=[0,2,5]
  15. print('test2:'+str(id(val)))
  16. b2=[0,1,2,3]
  17. print('b2:'+str(id(b2)))
  18. test2(b2)
  19. print(b2)
  20. Output:
  21. b2:2232273138824
  22. test2:2232273139144
  23. [0, 1, 2, 3]

python 算法与数据结构

    https://www.ranxiaolang.com/static/python_algorithm/chapter2/section2.html
     https://runestone.academy/runestone/books/published/pythonds/index.html
mysqldiff   python中用来diff 数据库的

https://docs.oracle.com/cd/E17952_01/mysql-utilities-1.5-en/mysqldiff.html
1 单向循环链表 使用上的示例???

log 有 输出到 控制台。

    子主题
[loggers]
keys=root

[handlers]
keys=rootFileHandler, consoleHandler

[formatters]
keys=completeFormatter

[logger_root]
level=INFO
handlers=rootFileHandler, consoleHandler

[handler_rootFileHandler]
class=logging.handlers.RotatingFileHandler
level=INFO
formatter=completeFormatter
args=('log/start.log','a',2000000,10,)

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=completeFormatter
args=(sys.stdout,)

[formatter_completeFormatter]
format=%(asctime)s - %(process)s - %(name)s - %(module)s.%(funcName)s:%(lineno)s - %(levelname)s - %(message)s
# !/home/tops/bin/python
# -*- coding:utf-8 -*-

import logging.config
import os

def get_logger(name=None, save_dir="log"):
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    conf_path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                             "config", "logging.conf")
    logging.config.fileConfig(conf_path)
    return logging.getLogger(name)
             self._logger = get_logger(os.path.join(sys.path[0],self.__class__.__name__))

self._logger.error('MakeResource error: %s' % e.get_error_message())

把 一些常用的 处理 写成 标准函数, 以后直接引用 就可以了,

# !/home/tops/bin/python
# -*- coding:utf-8 -*-

import hashlib
import json
import os

from command_executor import exec_cmd


def check_path(path):
    if not os.path.exists(path):
        raise Exception("the path is not exist, path=%s" % path)


def cal_md5(file_path):
    with open(file_path) as f:
        content = f.read()
        return hashlib.md5(content).hexdigest()


def chkconfig_del(name):
    exec_cmd("sudo chkconfig --del %s" % name)


def load_json_from_file(filename):
    with open(filename, "r") as f:
        content = f.read()
        return json.loads(content)

def dump_json_to_file(dest, rootJson={}):
    with open(dest, "w") as f:
        f.write(json.dumps(rootJson, indent=4))

def get_os_info():
    with open("/etc/issue", "r") as f:
        content = f.read()
        return content.split("\n")[0]
# !/home/tops/bin/python
# -*- coding:utf-8 -*-
import subprocess
from logging_helper import get_logger

logger = get_logger()


def exec_cmd(cmd, throw=True):
    logger.info("Prepare to execute cmd, cmd=[%s]" % cmd)
    p = subprocess.Popen(cmd,
                         shell=True,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    stdout, stderr = p.communicate()
    stdout = stdout.strip("\n")
    stderr = stderr.strip("\n")
    if p.returncode:
        if throw:
            raise ExecCmdException(cmd, p.returncode, stdout, stderr)
    return p.returncode, stdout, stderr


def exec_rpc_cmd(cmd, throw=True):
    """
    exec apsara rpc command
    :param cmd:
    :param throw
    :return:
    """
    return exec_cmd("{} {}".format("/apsara/deploy/rpc_wrapper/rpc.sh", cmd),
                    throw)


class ExecCmdException(Exception):
    def __init__(self, cmd, status, stdout, stderr):
        self.cmd = cmd
        self.status = status
        self.stdout = stdout
        self.stderr = stderr

    def __str__(self):
        return "execute cmd failed, cmd=[%s], status=[%s], stdout=[%s], stderr=[%s]" % (
            self.cmd, self.status, self.stdout, self.stderr)

类库地址

首先使用 sys 下的 path 变量查看所有的 python 路径:
import sys
sys.path
1
2
标准库
lib 目录下(home 目录/pythonXX.XX/lib)
第三方库
在 lib 下的 site-packages 目录下
home 目录/pythonXX.XX/lin/site-packages/

import moudle
module.file
1
2
如:

import theano
theano.file
/home/bigdata/anaconda2/lib/python2.7/site-packages/theano/init.pyc

————————————————
版权声明:本文为CSDN博主「Inside_Zhang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lanchunhui/article/details/70160039

装饰器

def log(func):
    def wrapper(self, *args, **kw):
        self._logger.info("Prepare to test %s,project=%s, _logstore=%s " %
                          (func.__name__, self._project, self._logstore))
        func(self, *args, **kw)
        self._logger.info("Test of %s is over,project=%s, _logstore=%s " %
                          (func.__name__, self._project, self._logstore))

    return wrapper
         https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584
         https://www.runoob.com/w3cnote/python-func-decorators.html

parser.parse_args()

一、介绍
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。
我们很多时候,需要用到解析命令行参数的程序。
二、使用步骤
我们常常可以把argparse的使用简化成下面四个步骤
1:import argparse
2:parser = argparse.ArgumentParser()
3:parser.add_argument()
4:parser.parse_args()
上面四个步骤解释如下:首先导入该模块;然后创建一个解析对象;然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;最后调用parse_args()方法进行解析;解析成功之后即可使用。
三、例子讲解
下面我们通过一个例子来进行讲解说明
我们可以看到上面的第二个步骤,parser = argparse.ArgumentParser()
它的作用就是:当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,会打印这些描述信息,一般只需要传递description参数。
下面会有例子输出,首先给出代码:

#-*- coding: UTF-8 -*-
import argparse   #步骤一

def parse_args():
    """
    :return:进行参数的解析
    """
    description = "you should add those parameter"                   # 步骤二
    parser = argparse.ArgumentParser(description=description)        # 这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,
                                                                     # 会打印这些描述信息,一般只需要传递description参数,如上。
    help = "The path of address"
    parser.add_argument('--addresses',help = help)                   # 步骤三,后面的help是我的描述
    args = parser.parse_args()                                       # 步骤四          
    return args

if __name__ == '__main__':
    args = parse_args()
    print(args.addresses)            #直接这么获取即可。

上面四个步骤已经分别对应上了,当我们在命令行敲入:
python arg.py -h
输出提示为:
如何获得命令参数值。
我们可以直接通过args.addresses获得它的参数值。
当我们敲入python arg.py —addresses this-is-parameter-of-addresses 命令时
会输出this-is-parameter-of-addresses
到这里就总结了argparse模块常见的一些常见的用法。
参考:
http://blog.xiayf.cn/2013/03/30/argparse/
编辑于 2017-08-29
https://zhuanlan.zhihu.com/p/28871131