如何看源码
关注点
- 函数下面的代码注释
- 函数名称及参数
- 返还值
强龙压不过地头蛇
就是说,两个变量同名,一个是局部变量一个是全局变量。
如果调用函数时,那么,同名的变量会引用局部变量。这就是所谓的强龙压不过地头蛇。
global
- 全局变量的声明,放在局部变量中使用
- 但是强烈不建议这么写,容易造成值的混乱
name = "lili"
def haha():
global name
name += name
获取帮助信息
print(help(range))
获取列表索引值
a = [1,4,2,6,9]
for index,i in enumerate(a):
print(index,i)
eval 拖字符串的衣服
比如a = “1+5”
那么,使用eval的话就是直接去掉" "
然后得出6
也就是吧字符串转化成python代码
变量、包、模块。。。
zip()
a = [1,2,3]
b = [3,4,5]
c = list(zip(a,b))
d = dict(zip(a,b))
print(c)
print(d)
判断数据类型
使用pycharm的ctrl+Q
这个操作可以看
看这个函数的简单使用,和各个参数
当然我们也可以在这个函数上面按住CTRL+左键
来跳转到源码这边,看源码的注释
快速导入包名
如果对应着路径将我们自己写好的包导进去是很麻烦的,我们也可以使用pycharm的快捷命令
- 导入有一个快捷见
alt+shfit+enter
- 当然也可以指标悬停,找到对应的选项导入
悬停就会出现如下显示
时间戳的一个使用
- 使用场景就是文件夹的一个命名之类的
ts = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
file_name = 'test_result_{}.htm'.format(ts)
file_path = os.path.join(report_path,file_name)
另一种注解->
以前我看这个符号都不知道什么意思,现在才搞懂
如何看python安装了哪些包
在命令行下运行$ pydoc modules即可查看
当然,还有其他办法,我直接把链接放这里:链接
字典和字符串格式相互转换会出现的坑
- 在我的工作中,就会遇到这类问题,字典转化为字符串就会可以(可以使用str()repr()来转换,但是都会出问题),但是字符串转化为字典就会出问题,不信大家可以看下面的一个例子
a = {
"product_key":"ckot7i80rol8yn9z",
"device_name":"",
"common":{
"business":"yewu1",
"client_type":3,
"test_type":"",
"game_id":"",
"inital_time":"",
"end_time":""
},
"test":{
}
}
b = str(a)
c = repr(a)
d = dict(b)
e = dict(c)
这里就推荐使用json这个库里面的函数来完成
代码如下:
“”“
### 用下面这个方法,就实现了字典数据的存储和保存
### 如果不用下面的方法,不管是python2还是python3都是会出现读取错误的
### 也就是说如果用str(),dict(),repr()互相转换都是会出问题的,在从字符串转到字典的过程会出问题
”“”
print type(a)
b = json.dumps(a) #吧字典转化成字符
print type(b)
c = json.loads(b) #把字符串转化成字典
print type(c)
print c
# print type(b)
for i in range(3):
print i
with open("b.txt",mode="a") as f:
f.write(json.dumps(a))
f.write("\n")
# j+=1
with open("b.txt",mode="r") as f:
for i in f.readlines():
print json.loads(i)
print type(json.loads(i))
接着说上面的json
a = {
"product_key":"ckot7i80rol8yn9z",
"device_name":"",
"common":{
"business":"yewu1",
"client_type":3,
"test_type":"",
"game_id":"",
"inital_time":"",
"end_time":""
},
"test":{
}
}
print type(a) #结果是字典
b = json.dumps(a) #吧字典转化成字符
print type(b) #结果是字符串
c = json.loads(b) #把字符串转化成字典
print type(c) #结果是字典
print c
- 总结一下就是,json.loads 和 json.dunps是最变量进行操作,两个互相逆转。
- load和dump是对文件层面的进行操作,注意,读取json格式,里面也必须是正确的json格式。
曾经看过一篇文章,对我的帮助很大,链接
read(),readline(),readlines()区别与用法
- f.read() 是一次性读取所有的文件,当然也可以根据字节读取,f.read(5),但是一般情况下,不推荐使用这种办法读取数据
- f.readlines 是一行一行的读取,会防止系统的内存不足,只需要使用for循环即可,例子如下。
- f.readline 是一次只读一行数据,这里面又一个指针,每次会从上一次指针停留的位置来读取数据。
f = open("a.json",mode="r")
content = f.readlines()
print type(content)
i = 1
for temp in content:
print i
print temp
i += 1
f.close()
- 上面的简化版
with open('a.json',mode="r") as f:
file = f.readlines()
j = 1
for i in file:
print j
print i
j+=1
python2中编码格式的问题
python2中,有两种编码,一个ascii还有unicode编码
u‘大收到啊’ 前面是u的就是unicode编码
默认参数最好也写进去
- 我遇到过这样的一个例子,如果默认函数是一个空列表或者空字典,那么当这个函数,在for循环中循环的话,这些默认的空的列表和空字典会乱套的,例子如下
def list_test(a,b,list_1 = []):
list_1.append(a)
list_1.append(b)
return list_1
for i in range(3):
a = 1
b = 2
list_1 = list_test(a,b)
print(list_1)
其实,我们预期想要得到的结果就是[1,2]
但是,真正的结果呢?
[1, 2, 1, 2, 1, 2]
Process finished with exit code 0
需要如下修改:
for i in range(3):
a = 1
b = 2
list_1 = list_test(a,b,[])