python进阶训练营极客大学_极客大学Python进阶训练营2.0全新升级

本文介绍了如何使用Python实现自定义trim()函数,避免使用内置的strip()方法,以及创建一个打印函数执行时间的装饰器。此外,还探讨了Python的多线程和多进程,包括全局解释器锁(GIL)的概念,以及多线程与多进程在资源共享和数据同步上的区别。最后,展示了删除列表重复元素和将英文名字首字母大写的方法。
摘要由CSDN通过智能技术生成

利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法.

正解1:

def trim(s):

while s[:1] == ' ':

s = s[1:]

while s[-1:] == ' ':

s = s[:-1]

return s

正解2:

def trim(s):

if s[:1] == ' ':

s = trim(s[1:])

if s[-1:] == ' ':

s = trim(s[:-1])

return s

容易写错的方法:

def trim(s):

while s[0] == ' ':

s = s[1:]

while s[-1] == ' ':

s = s[:-1]

return s

解释:当s=''时,s[0]和s[-1]会报IndexError: string index out of range,但是s[:1])和s[-1:]不会。

请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间.

# -*- coding: utf-8 -*-

import time, functools

def metric(fn):

@functools.wraps(fn)

def wrapper(*args, **kw):

time0 = time.time()

ret = fn(*args, **kw)

time1 = time.time()

print('%s executed in %s ms' % (fn.__name__, time1-time0))

return ret

return wrapper

装饰器的实质是什么?或者说为什么装饰器要写2层嵌套函数,里层函数完全就已经实现了装饰的功能为什么不直接用里层函数名作为装饰器名称?

答:装饰器是要把原来的函数装饰成新的函数,并且返回这个函数本身的高阶函数

python下多线程的限制以及多进程中传递参数的方式

python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。

多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array

python多线程与多进程的区别:

在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie)。所以,有必要对每个Process对象调用join()方法 (实际上等同于wait)。对于多线程来说,由于只有一个进程,所以不存在此必要性。

多进程应该避免共享资源。在多线程中,我们可以比较容易地共享资源,比如使用全局变量或者传递参数。在多进程情况下,由于每个进程有自己独立的内存空间,以上方法并不合适。此时我们可以通过共享内存和Manager的方法来共享资源。但这样做提高了程序的复杂度,并因为同步的需要而降低了程序的效率。

请写出一段Python代码实现删除一个list里面的重复元素

>>> l = [1,1,2,3,4,5,4]

>>> list(set(l))

[1, 2, 3, 4, 5]

或者

d = {}

for x in mylist:

d[x] = 1

mylist = list(d.keys())

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

def normalize(name):

return name[0].upper()+name[1:].lower()

def normalizeList(list):

return list(map(normalize, list))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值