一种设定全局参数的方法
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的交互
使用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
网友评论