题目测试

1. 一行代码实现求和

sum(range(begin,end+1))

2. 如何在一个函数内部修改全局变量

a = 5
def fn():
      global a
      a = 4
fn()
print(a)

3. 字典如何删除键和合并两个字典

del 和 update方法

dic = {'name':'Alan','age':'18'}
del dic['name']
print(dic) # {'age': '18'}

dic2 = {'name':'Klan'}
dic.update(dic2)
print(dic) # {'age': '18', 'name': 'Klan'}

4. 谈下Python的GIL

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

5. Python实现列表去重的方法

先通过集合去重,再转列表

list = [11, 12, 13, 12, 15, 16, 13]
a = set(list)
print(a) # {11, 12, 13, 15, 16}
y = [x for x in a]
print(y) # [11, 12, 13, 15, 16]

6. fun(args,**kwargs) 中的args, **kwargs什么意思?

args 和**kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数.这里的不定的意思是:预先并不知道,函数使用者会传递多少个参数给你,
所以在这个场景下使用这两个关键字.
args是用来发送一个非关键值对的可变数量的参数列表给一个函数.

def demo(args_f, *args_v):
      print (args_f)
      for x in args_v:
      print (x)

demo('a','b','c','d')
a
b
c
d

kwargs允许你将不定长度的键值对,作为参数传递给一个函数.如果你想要在一个函数里处理带名字的参数,你应该使用kwargs.

def demo(**args_v):
      for k,v in args_v.items():
            print(k, v)

demo(name = 'Alan')  # name Alan

7.简述面向对象中__new__和__init__区别

__init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数.

class Bike:
      def __init__(self, newWheelNum, newColor):
            self.wheelNum = newWheelNum
            self.color = newColor
      
      def move(self):
            print('车会跑')
# 创建对象
BM = Bike(2, 'green')

print('车的颜色为:%s' % BM.color)  # 车的颜色为:green
print('车轮数量为:%s' % BM.wheelNum)  # 车轮数量为:2

1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。

class A(object):
      def __init__(self):
            print('这是 init 方法', self)
      def __new__(cls):
            print('这是cls的ID', id(cls))
            print('这是new方法',object.__new__(cls))
            return object.__new__(cls)
A()
print('这是类A的ID', id(A))
'''
这是cls的ID 42010392
这是new方法 <__main__.A object at 0x7f65d7093a58>
这是 init 方法 <__main__.A object at 0x7f65d7093a58>(init方法中的self和new方法返回值地址一样说明返回值是对象)
这是类A的ID 42010392
(cls和类ID一样,说明指向同一个类,也就是cls就是创建的实例类)
'''

8. 简述with方法打开处理文件帮我们做了什么?

f = open("./1.txt", "wb")
try:
      f.write("hello world")
except:
      pass
finally:
      f.close()  # 生成一个1.txt文件
'''
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,
都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close
'''
with open( '/path/to/file', 'r' ) as f:  # with的作用就是调用close()方法
	print( f.read() ) 
'''
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了。
要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。例如,read(1024) 每次读取1024个字节的数据内容
调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
'''

9. 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

map()函数第一个参数是fun,第二个参数一般是list,第三个参数可以写list,也可以不写,根据需求

list = [1, 2, 3, 4, 5]
def fn(x):
      return x**2

res = map(fn, list)
print(res)  # <map object at 0x7f776605ffd0>
res = [i for i in res if i > 10]
print(res)  # [16, 25]

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

import numpy
import random

# print(numpy.random.randn(5))
result = random.randint(10, 20)
result1 = numpy.random.randn(5)
result2 = random.random()
print(result)  # 12 正整数
print(result1)  # [0.81075497 0.78092836 0.06221569 0.51125404 0.91506187] 五个随机小数
print(result2)  # 0.4374961761162436 0~1之间随机小数

11.

题目: <div class="nam">中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的

import re
str = '<div class="nam">中国</div>'
res = re.findall(r'<div class=".*">(.*?)</div>', str)
print(res)  # ['中国']
'''
.代表可有可无
*代表任意字符
(.*?)提取文本
'''

12. 数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句

select distinct name from student;

13. s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

方法:set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排
list是不变数据类型,是s.sort时候没有返回值,所以注释的代码写法不正确

s = "ajldjlajfdljfddd"
s = set(s)
s = list(s)
s.sort(reverse=False)
# s = s.sort(reverse=False)
res = "".join(s)
print(res)  # adfjl

14. 用lambda函数实现两个数相乘

sum = lambda a,b:a*b
print(sum(5,4))  # 20
Live what we love, do what we do, follow the heart, and do not hesitate.
原文地址:https://www.cnblogs.com/failan/p/14027014.html