函数直接调用方式:函数名加上小括号
def log():
'日志功能'
pass
def index():
log()
print(====)
*args 一个*是列表 非固定长度参数,可接受列表 **kwargs 两个*是字典
线程和进程解释:
- 由于线程操作系统直接支持的执行单元,通常高级语言都内置多线程的支持,在python标准库提供了两个模块:threading和_thread,其中threading是高级模块,_thread是低级模块,对_thread进行了封装,绝大多数情况下,使用threading模块。
- 进程之间不能共享数据,那么线程之间可以共享数据,在一个进程内,所有线程共享全局变量。
- 可以理解为进程就相当于一个容器,例如大房子,那么线程就相当于这个大房子内的一个人,那么这个人可以使用多个房间或者卫生间,一个人,可以理解为单线程,如果是多个人,可以理解为多线程。
- 但是当容器(大房子)里有多个人时候,就不能随意使用房间或者厕所了,不然会非常混乱,这个时候,就会现了‘互斥锁’,一个防止他人随意进入的简单方法,就是加上一把锁,先到人的锁上,后到的排队,等锁打开里面的人出来,后面的人在进去。
- 互斥锁:防止多个线程同时读写一块区域,互斥锁为资源引入一个状态‘锁定’和‘非锁定’,某个线程要更改共享数据时,先将其锁定,其他线程不能更改,直到该线程释放资源时,状态为‘非锁定’时,其他线程才能再次锁定该资源,‘互斥锁’保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。
eval
eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。
import json
x="[null,true,false,1]"
print(eval(x))
print(json.loads(x))
while循环运行一段代码
n = 1
while n < 5:
create_order_mt = meituan_api.meituan_create_order(create_order_param)
print('创建订单结果为:', create_order_mt)
if create_order_mt['code'] == 200:
break
n += 1
运行结果如下:
创建订单结果为: {'code': 400, 'msg': '创建订单失败:未找到订单信息', 'data': ''}
创建订单结果为: {'code': 400, 'msg': '创建订单失败:未找到订单信息', 'data': ''}
创建订单结果为: {'code': 400, 'msg': '创建订单失败:未找到订单信息', 'data': ''}
创建订单结果为: {'code': 400, 'msg': '创建订单失败:未找到订单信息', 'data': ''}
Process finished with exit code 0