美文网首页
python杂记

python杂记

作者: Sl0wDive | 来源:发表于2021-02-26 10:24 被阅读0次

    一种设定全局参数的方法
    import argparse

    之后def个 get param的函数 或者不定义函数也行
    def get_param():
    parser = argparse.ArgumentParser(description='help info') #这里应该随便写
    parser.add_argument('--lr',default=0.1,type=float)
    parser.add_argument('--num_epochs',default=5,type=int)
    parser.add_argument('--batch_size',default=512,type=int)
    args = parser.parse_args()
    之后调用的时候就
    args = get_param()
    lr = args.lr
    num_epochs = args.num_epochs
    batch_size = args.batch_size


    python class类

    首先注意 定义class 时 定义的名字 首字母大写 不带括号 但带冒号
    但凡def的时候 括号内第一个写self
    可以(也可以不def init
    def init(self,a,b,c):
    self.a = ..
    self.b = ..
    self.c = ..
    联想到做算法题时 会用到这个 就是a b c参数可以在下面的程序中用到


    python 变量四种作用域 以及 global 关键字

    L : local 局部作用域
    举例:

    def f():
        x = 2
        return x  
    x属于L
    

    E : enclosing 嵌套的父级函数的 局部作用域
    举例:

    def f1():
        x = 5
        def f2():
            print(x)
        return f2  
    x属于E 可以理解为x不仅作用于f2 还作用于f2之上的f1 范围更大一点
    

    G : global 全局变量 就是模块级别定义的变量
    举例:

    x = 22
    def f():
        x = 2
        return x 
    print(x) > 22 : x属于G 即全局的变量 不在函数的内部
    

    B : built-in 系统固定模块里面的变量
    B在程序中 很少见 也管不了
    四者的执行顺序是 L E G B 即由内而外

    为什么需要global关键字:
    看以下的程序:

    x = 5
    def add():
        x = x + 1
        return x
    

    这样执行肯定报错 因为函数中的x没有定义
    所以

    x = 5
    def add():
        global x 
        x = x + 1
        return x
    

    这样就能正常运行
    不过话说 上面的那个例子 括号里传递 x 参数就解决了。。
    这个global只能用在函数中啊
    像是 下面这种运行会出错。。

    x = 5
    global x 
    def add():
        x = x + 1
        return x
    

    if name == 'main'

    https://www.zhihu.com/search?type=content&q=python%20name%20main
    我理解的是 不会出大问题 别人不会跑不通
    因为有些情况 自己写的一份python会作为一个模块 在其他py文件中进行调用
    假如我写了一份文件 qkx.py

    如果不带 if name main 的话 
    import qkx  此时__name__的值是qkx   print(__name__) > qkx
    如果不带 if name main 的话 
    import qkx  此时__name__的值还是__main__  print(__name__) > __main__
    
    __name__这个东西暂且不管 貌似python中一直存在  且可以打印出来 print(__name__)
    

    python与mysql的交互

    参考
    https://zhuanlan.zhihu.com/p/84504148?utm_source=wechat_session&utm_medium=social&utm_oi=638746686156181504&utm_campaign=shareopn


    使用logging模块代替print

    首先 logging模块有5个level
    分别是 debug info warn error critical

    debug:查看程序运行的信息
    info:查看程序是否如预料执行的信息
    warn:意料之外的,但不影响程序运行
    error和critical:一些比较严重的问题
    
    import logging 
    logging.basicConfig(level=logging.DEBUG , format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S') 
    注意 level参数调用时要大写
    logging.debug("Hello")
    

    一个完整的例子

    import logging;
    
    def loggingDemo():
        logging.info("You should see this info both in log file and cmd window");
        logging.warning("You should see this warning both in log file and cmd window");
        logging.error("You should see this error both in log file and cmd window");
        logging.debug("You should ONLY see this debug in log file");
        return;
        
    def initLogging(logFilename):
        logging.basicConfig(
                        level    = logging.DEBUG,
                        format   = 'LINE %(lineno)-4d  %(levelname)-8s %(message)s',
                        datefmt  = '%m-%d %H:%M',
                        filename = logFilename,
                        filemode = 'w');
        # define a Handler which writes INFO messages or higher to the sys.stderr
        console = logging.StreamHandler();
        console.setLevel(logging.INFO);
        # set a format which is simpler for console use
        formatter = logging.Formatter('LINE %(lineno)-4d : %(levelname)-8s %(message)s');
        # tell the handler to use this format
        console.setFormatter(formatter);
        logging.getLogger('').addHandler(console);
     
    if __name__=="__main__":
        logFilename = "qkx_logging_demo.log";
        initLogging(logFilename);
        loggingDemo();
    

    python sys

    sys.argv是获取运行python文件的时候命令行参数
    有 qkx.py 文件如下:

    import sys
    a = sys.argv[0]
    print(a)
    

    返回 qkx.py

    若是

    import sys 
    a = sys.argv[1]
    print(a)
    

    之后 若是在 cmd中 运行 qkx.py boy ,则会返回boy

    这一点有啥用呢。。
    可以在命令行里直接给参数,不需要打开脚本改,比较方便?

    呃。还是不太明白实战中的最大作用 遇到再说吧


    ipynb 转 py

    jupyter nbconvert --to python qkx.ipynb
    

    相关文章

      网友评论

          本文标题:python杂记

          本文链接:https://www.haomeiwen.com/subject/gsrkfltx.html