python小知识点总结

引用 https://mp.weixin.qq.com/s/cQXQC1oJZ_v0d7qBD95o2g

谈下python的GIL

GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。 多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

python中生成随机整数、随机小数、0--1之间小数方法

随机整数:random.randint(a,b),生成区间内的整数 随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数 0-1随机小数:random.random(),括号中不传参 输入图片说明

避免转义给字符串加哪个字母表示原始字符串?

r , 表示需要原始字符串,不转义特殊字符

列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:数值型、字符串型string和元组tuple
不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id

str1='abfdsbcbbdbfsadfsdfs'
str2='abfdsbcbbdbfsadfsdfs'
print(id(str1))
print(id(str2))
out:
1949681734472
1949681734472

可变数据类型:列表list和字典dict;
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

s = "32123423424234234",去重并从小到大排序输出

str1="32123423424234234"
a=set(str1)
a=list(a)
print(a)
a.sort(reverse=False)
print(a)
out:
['4', '2', '3', '1']
['1', '2', '3', '4']

避免转义给字符串加哪个字母表示原始字符串?

r , 表示需要原始字符串,不转义特殊字符

用lambda函数实现两个数相乘

# -*- coding:utf-8 -*-
sum=lambda a,b:a*b
print(sum(4,5))

利用collections库的Counter方法统计字符串每个单词出现的次数

import collections
str='fasdfsdasdsfwefadfsdfafrrfasdfasdf'
print(collections.Counter(str))

filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# -*- coding:utf-8 -*-
a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def demo(a):
    if a%2!=0:
        return True
    else:
        return False
print([one for one in filter(demo,a)])

a=(1,)b=(1),c=("1") 分别是什么类型的数据?

a=(1)
b=("1")
c=(1,)
print(type(a),type(b),type(c))

#<class 'int'> <class 'str'> <class 'tuple'>

a=(1,)
b=("1",)
c=(1,)
print(type(a),type(b),type(c))

#<class 'tuple'> <class 'tuple'> <class 'tuple'>

正则re.complie作用

re.compile是将正则表达式编译成一个对象,加快速度,并重复使用

regex=re.compile("\d+")
print(regex.findall("fasdfsdfsdfsd23423423fasdfasdf34r"))

两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]

extend() 向列表尾部追加一个列表,将列表中的每个元素都追加进来,在原有列表上增加

  • 直接用+号看上去与用extend()一样的效果,但是实际上是生成了一个新的列表存这两个列表的和,只能用在两个列表相加上
a=[1,2,3,4,5]
b=[4,5,6,7,8]
print(a+b)
print(a.extend(b))

用python删除文件和用linux命令删除文件方法

python:os.remove(文件名) linux: rm 文件名

datetime模块打印当前时间戳

import datetime
print(datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S")+"星期:"+str(datetime.datetime.now().isoweekday()))

###写一段自定义异常代码

try:
    1/0
except BaseException as e:
    raise BaseException("不能除0")

正则表达式匹配中,(.)和(.?)匹配区别?(很重要)

(.)是贪婪匹配,会把满足正则的尽可能多的往后匹配 (.?)是非贪婪匹配,会把满足正则的尽可能少匹配

a='fsafdffsfasdfsdf sdaf fasdf fsdf'
print("贪婪匹配",re.search("f(.*)f",a))
a='fsafdffsfasdfsdf sdaf fasdf fsdf'
print("非贪婪匹配",re.search("f(.*?)f",a))
贪婪匹配 <_sre.SRE_Match object; span=(0, 32), match='fsafdffsfasdfsdf sdaf fasdf fsdf'>
#非贪婪匹配 <_sre.SRE_Match object; span=(0, 4), match='fsaf'>

转载于:https://my.oschina.net/jiansin/blog/1828585

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值