Python经典面试题

运行环境为JupyterNotebook

  1. 不使用中间变量,交换a,b的值
a = 1
b =2
a,b = b,a
  1. 读程序,写结果
l1 = []
for i in range(3):
    l1.append({'name':i})
print(l1)

l2 =[]
a = {'name':0}#可变类型不重新创建对象
for i in range(3):
    a['name'] = i
    l2.append(a)
print(l2)

在这里插入图片描述

[{'name': 0}, {'name': 1}, {'name': 2}]
[{'name': 2}, {'name': 2}, {'name': 2}]

3.求两个集合的交并差集

set1 = {2,2,2,True,3+4j}
set2 = {2,1,2,False,3+4j}

print(set2|set1)#(true,1能相互转换)以前一个中元素优先
print(set1|set2)
print(set2&set1)
print(set1&set2)#以后一个优先
print(set2 - set1)#==set2 - set2&set1
print(set1 - set2)
{False, 1, 2, (3+4j)}
{False, True, 2, (3+4j)}
{True, 2, (3+4j)}
{True, 2, (3+4j)}
{False}
set()
  1. 读程序,写结果
rest1 = 3>4 and 4>3 or 1==3 and x == 'x' or 3 >3
rest1
False
  1. 对于函数来说,return是什么
  • return是一个函数结束的标志,一个函数可以有多个return,但只要执行一次,整个函数就会结束。
  • return的返回类型无任何限制,可以是任何类型
  • return的返回值个数没有限制,0个返回为None,一个返回本身,多个用逗号隔开,返回元组
  1. 求薪资最高的人名
salary = {'a':11111,'b':22222,'c':9}
max(salary,key = lambda name :salary[name])
  1. 写一个函数遍历某文件夹下的所有文件
import os
path = r'D:\Python编程\竞赛1'

def fun(path):
    for i in os.listdir(path):
        full_path = os.path.join(path,i)
        if os.path.isfile(full_path):
            print(i)
        elif os.path.isdir(full_path):
            print('文件夹:',i)
            print('****')
            fun(full_path)
            print('****')
fun(path)
文件夹: asyncore框架
****
client.py
EchoServer.py
httpclient_demo.py
temp.py
__init__.py
****
out.csv
samples.csv
test.csv
train.csv
数据说明.txt
  1. 写一个登录装饰器,要求输入密码和账号才能运行登录函数
def request_load(fun):
    def warppedfun(password,username):
        if password == '1234' and username == 'root':
            print('登录成功!')
            fun()
            return 1
        else:
            print('账号或密码错误')
    return warppedfun
    
@request_load
def run():
    print('运行')
    
run('1234','root')
登录成功!
运行
1
  1. 文件存在则读取,文件不存在则进行写入
try:
    with open(r'./testtest.txt','rt') as f:
        a = f.read()
        print(a)
except FileNotFoundError as e:
    with open(r'./testtest.txt','wt',encoding='utf-8') as f:
        while True:
            msg  = input()
            if msg.upper() == 'Q':
                break
            else:
                f.writelines(msg+'\n')
  1. 使用生成器的方法计算1!+2!+3!···
def func(n):
    i = j =1
    while i<=n:
        yield j  #生成器暂停函数,并输出值
        i +=1
        j *=i
a = func(4)
sum_= 0
for i in a:
    sum_ +=i
print(sum_)
33
  1. 生成指定长度的验证码
#生成指定长度的验证码
import random
def make_code(n):
    code =''
    for i in range(n):
        digt = str(random.randint(0,9))
        char = chr(random.randint(65,91))
        charlow =chr(random.randint(65,91)).lower()

        code += random.choice([digt,char,charlow])
    return code

make_code(4)
  1. 类生成的实例化方法怎样才能调用‘
class Foo:
    def __init__(self,name):
        self.name = name
        
    def __call__(self,*args,**kwargs):
        print(args,self.name)
    
a = Foo('li')
a(0)
(0,) li
  1. 写一个类的绑定方式的单例模式
class Foo(object):
    __instant = None
    def __init__(self,name):
        self.name = name
    @classmethod
    def check(cls):
        if cls.__instant == None:
            cls.__instant = cls('li')
        return cls.__instant
            
a = Foo.check()
print(a.name)
b = Foo.check()
b.name
li
li
  1. 基于网络通信,标识世界范围内唯一性软件
    IP+mac+port标识
    IP找到局域网
    Mac找到局域网内的计算机
    port找到计算机上的应用

  2. 守护进程和守护线程的区别
    守护进程,随着主进程的结束,进程立刻结束
    守护线程,随着主进程的结束,不会立刻结束,会随着最后一个一个线程执行完,才结束

  3. MySQL中varchar 和 char的区别
    相同点:宽度是能够存储字符的最大宽度,都有额外1byte的包头
    不同点:char将字符扩展为定长,varchar则按不进行扩展,按原长扩展,节约内存

  4. SQL中的关键字优先级

select distinct ***(column) from ****(table)
where  约束条件
group by 分组条件
having  过滤条件
order by 排序条件
limit 限制条数
  1. Python操作MySQL解决sql注入问题
    sql = “select ID from user where name = ‘%s’ and password = ‘%s’ %(name,password)”
    注入:导致跳过查询条件
    1 name’ – 注释
    2 xxx’ or 1==1 – 注释
    解决方法:
    cursor.execute(sql,(name,password))#自动匹配识别占位符,占位符不需要引号

  2. 视图的定义
    本质就是一个虚拟的表,数据来自select语句,临时存储在内存中。保存的是select语句和表的结构,不包含数据,每次使用去原始表中查询。

create view name as select语句
  1. redis数据库中插入一条hash数据
增
hmset user name dh age 19
删
hdel user age
该
hset user age 18
查
hgetall user
  1. 操作MongoDB,添加一条数据
import pymongo
#建立链接
client = pymongo.MongoClinet('127.0.0.1',27017)
#指定数据库
db = client['base']
# 指定集合
collection = db['student']

# 增
collection.insert_one({'name':'li','age':19})
# 删
collecton.delete_one({'name':'li'})
# 改
collection.update_one({'name':'li'},{'&set':{'age':18}})
# 查
data = collection.find()
for i in data:
    print(i)
  1. 字符串压缩算法
test = 'aaaabbbbdddwwwqqqaa'
set_ = sorted(set(test))
a = ''
for i in set_:
    a += i+str(test.count(i))
a
'a6b4d3q3w3'
  1. 一行代码通过filter和lambda输出奇数下标的元素
a = [1,2,3,4,5,6,7,99,333]
print(list(filter(lambda x: x,[a[i] for i in range(1,len(a),2)])))
[i[1] for i in filter(lambda x: x[0] %2 ==1,[(i,a[i]) for i in range(0,len(a))])]
[2, 4, 6, 99]
[2, 4, 6, 99]
  1. 字符串格式化方法
a,b, c = 1,2,3
print('a=%d,b=%d,c=%d '%(a,b,c))
print('a={},b={},c={}'.format(a,b,c))
#只限于version3.6及以上
print(f'a={a},b={b},c={c} ')
a=1,b=2,c=3 
a=1,b=2,c=3
a=1,b=2,c=3 

慢慢补充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值