python的一些杂七杂八的使用

1、assert的用法,assert之后还可以输出信息

这里举个例子,我们可以这样写代码:

assert os.path.exists(path_tools), "{}不存在,请将common_tools.py文件放到 {}".format(path_tools, os.path.dirname(path_tools))
2、a=[]和a=list()

a=[]更快一点。参考

import time
sta=time.time()
for i in range(10000000):
    a=[]
print(time.time()-sta)
sta=time.time()
for i in range(10000000):
    a=list()
print(time.time()-sta)

[out]:
0.6291182041168213
1.4444737434387207
3、np.arange、np.linspace、np.random.normal
# 等差
np.arange(0,4,2)  # start,end,step,左闭右开
array([0, 2])

# 均分
np.linspace(2, 10, 6)  # start, end, 分成几份,左闭右闭
array([ 2. ,  3.6,  5.2,  6.8,  8.4, 10. ])
"""
arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。
linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。
"""

# 正态分布
np.random.normal(mean, scale, size)
np.random.normal(0,1,5)
array([ 1.35249758, -0.07461433, -1.11420185, -1.92629028,  0.22605396])

4、os.path.abspath
os.path.abspath()的作用,返回括号内内容的绝对路径

import os

print(os.path.abspath("."))   #当前目录的绝对路径
print(os.path.abspath(r".."))  #上级目录的绝对路径
print(os.path.abspath(r"D:\python_workshop\python6\revise\函数.py"))

[out]:
D:\python_workshop\python6\selenium_webdriver
D:\python_workshop\python6
D:\python_workshop\python6\revise\函数.py

# tips: 输出的路径最后都没有"/",可以默认成一种规范吧,写目录的时候最后不要加"/"
5、os.path.join和os.path.sep
# √ 
hello1 = os.path.abspath(os.path.dirname(__file__) + os.path.sep + ".." + os.path.sep + "..")
# × 
hello2 = os.path.abspath(os.path.dirname(__file__) + ".." + "..")
# √ 
hello3 = os.path.abspath(os.path.join(BASE_DIR, "..", ".."))

# tips:如果要使用+号,则必须要加上分隔符"/",若不想用分隔符,就用join函数,而上述最后一种情况是错误的
6、ignore警告消除
# 命令行运行可以这样:python -W ignore run.py 不输出warming
# 直接代码运行可以先添加两句代码再说:
import warnings
warnings.filterwarnings('ignore')
7、 Python全局解释锁(GIL,Global Interpreter Lock)

我们所说的Python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机制只允许一个线程来控制Python解释器。这就意味着在任何一个时间点只有一个线程处于执行状态。GIL对执行单线程任务的程序员们来说并没什么显著影响,但是它成为了计算密集型(CPU-bound)和多线程任务的性能瓶颈。

那么为什么在Python中使用了这样一种看似绊脚石的技术呢?这是Python开发人员的一个错误决定么?但是GIL的设计决定却是Python如今受到火热追捧的重要原因之一。Python当然也逃不开,为了利用多核,Python开始支持多线程。而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性(即默认python内部对象是thread-safe的,无需在实现时考虑额外的内存锁和同步操作)

8、python判断一维列表是否为空

一维列表可以直接判断if not nums: ... 或者 if len(emptyList) == 0: ...

9、python的正负无穷float(“inf”)的用法正无穷:float(“inf”); 负无穷:float(“-inf”)
  • 不等式:
    当我们涉及到 <> 时:
    所有数都比-inf 大;
    所有数都比inf

  • 利用inf做简单的加法、乘法等算数运算仍然会的到inf,利用inf乘以0会的到not-a-number(nan)

  • 除了inf外的其他数除以inf,会得到0

10、collections中的deque和list的比较

deque比list要快不少,标准库collections.deque就是Python中双端队列的标准实现。

  • 双端队列的pop/popleft/append/appendleft 四种操作的时间复杂度均是 O(1)
  • list的insert(0,value),以及pop()的时间复杂度为O(n),因为这俩操作既改变了列表的长度又改变其元素位置,其时间复杂度变为O(n)了。append()是O(1)摊销的,不是O(1), 假设list reserved size是8个元素,当空间用完时,它的大小会加倍。
11、python中的哈希表set、dict
# 在set、dict中查找元素的时间复杂度都是O(1)
nums=[1,1,2,3]
>>> nums2=set(nums)
>>> nums2
{1, 2, 3}   # 注意set也是用{}括起来的,但是空set是()
>>>
12、python中list()和list,以及a与a[:]区别
# list()方法用于将元组或字符串转换为列表。
aTuple = (123, 'Google', 'Runoob', 'Taobao')
list1 = list(aTuple)
print ("列表元素 : ", list1)
# out: 列表元素 :  [123, 'Google', 'Runoob', 'Taobao']

str="Hello World"
list2=list(str)
print ("列表元素 : ", list2)
# out:列表元素 :  ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

"""
b=a与b=a[:]的区别
b=a将两者指向同一个对象
而b=a[:]会创建一个新的与a完全相同的对象,但是与a并不指向同一对象。

值类型(int str tuple)和引用类型(list set dict)
值类型是不可变的,只能申请新的内存地址,而引用类型是可变的(引用)
id() 可以查看变量的内存地址
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值