python学习笔记(八)

54URL中文编解码

URL地址里面有中文时,会做编码,如果想解码成中文,需要用:

From urllib import parse

CN_str = Parse.unquote(str)

55、含有生成器的递归函数

因为函数中含有yield时,就是生成器函数,因此在函数内调用自己时,就不能用普通的函数调用方式。本质上是一个生成器,因此要用生成器的调用方式。

对一个数分解质因数。红色部分就是函数调用自己,要遍历生成器中的所有元素,并返回。

def resolution_factors(n):
    for i in range(2, int(math.sqrt(n)+1)):
        if n % i == 0:
            yield i
            n = int(n/i)
            if n == 3:
                yield n
            else:
                for j in resolution_factors(n):
                    yield j
            break
        elif i == int(math.sqrt(n)):
            yield int(n)

56Sorted的高级用法

题目:一个字符串仅包含大小写字母,现在要将其排序成一个新的字符串,次序为从az,且相同的大写和小写字母排在一起,大写在小写前。
如原字符串为'easqWAwaeq',排序后为'AaaeeqqsWw'

 

a = 'easqWAwaeq'

print(''.join(sorted(a, key=lambda x:ord(x.upper())*2 +x.islower())))

print(''.join(sorted(a, key=lambda x:ord(x.upper())*2 if x.isupper() else ord(x.upper())*2+1)))

 

(1)sorted能用来重新排序的是任何可迭代对象,字符串也是可迭代对象,因此可以不用转换成list就能作为入参

(2)Sorted的参数key等于的是一个函数,如果另外定义的函数,写法是key=fun,等于函数名称,不带括号。函数的入参是a的每一个元素。a中的每一个元素通过函数处理后的结果来排序。

(3)Sorted返回的是一个列表,''.join(b),b可以是一个字符串,也可以是一个只含字符串的列表。将list转换成string。

 

57、Sorted对多列排序

l = [(1,2,3,4),(1,3,4,2),(1,2,4,3),(2,1,3,4),(2,4,3,1),(3,4,2,1),(3,2,1,4)]

对列表l,先按每个元组的第一个元素升序排列,再按第3个元素升序排列

Sorted(l, key=lambda x: (x[0], x[2]))

缺点是,只能要么都按升序,要么都按降序排列。不能一个升序,一个降序。

58、evalexec的用法

相同点:都是将字符串转换成python代码执行。

evalevaluate的简写,参数只能是表达式,返回值为表达式的结果,而且只能为一条语句。

a = eval("5+4")   # a = 9

exec是execute的缩写,能将字符串转换成python代码执行,没有返回值,参数可以为多行代码块。

exec("print('Hello world!')")

如果要执行python文件中的代码:

with open("test.py") as f:
        exec(f.read())

59、Python2python3的编码问题

字符串的编码等于当前文件的默认编码。

python2中,字符串需要先解码,解码之后的类型为unicode,之后再通过编码,编为其他格式的字符串。

python3中,unicode类型也是str,字符串需要先解码,解码之后的类型为byte,之后再编码成其他格式的字符串。

60、关于出现乱码的问题

在文件中,所有文字的默认编码为文件的编码,比如py文件设置编码为UTF-8,变量 a = ‘我们’,如果直接print(a),则默认解码为UTF8,显示正常;如果print(a.encode(‘utf-8’).decode(‘GBK’)),则显示乱码(相当于在UTF-8的控制台上显示GBK编码的字符).

61、线程跟进程

进程:

优点:同时利用多个CPU,能够同时进行多个操作

缺点:耗费资源(重新开辟内存空间)

线程:

优点:共享内存,IO操作时候,创造并发操作

缺点:抢占资源

进程不是越多越好,CPU个数=进程个数;

线程也不是越多越好,具体案例具体分析,请求上下文切换耗时多的时候使用线程。

计算机中执行任务的最小单元:线程

IO密集型(不用CPU):多线程,计算密集型(用CPU):多进程。

转载于:https://www.cnblogs.com/yahutiaotiao/p/9956327.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值