#1.简述列举了解的编程语言及语言之间的区别?
"""
编程语言列举:c c# c++ python java php go
区别:
1.编译型语言,如c语言,整体翻译,在出现错误时最后才进行提示,修改过程要从整体去找错误
2.解释型语言,如java,一行一行进行翻译,哪里出错立即提示修改,它是乱码通过解释器翻译成机器语言
"""
#2.列举python2和python3的区别
"""
1.python2源码不统一,源码重复 python3源码统一,源码不重复
2.python2中有老式类和新式类的区别,python3只有新式类
"""
#3.看代码写结果
v1 = 1 or 2
v2 = 3 and 7 or 9 and 0
# 1 7
#4.比较以下值有什么不同
v1 = [1,2,3]
v2 = [(1),(2),(3)]
v3 = [(1,),(2,),(3,)]
"""
v1是一个列表,里面是int类型
v2是也是列表,里面是int类型
v3是在列表中嵌套了三个元祖
"""
#5.用一行代码实现数值交换
a = 1
b = 2
a,b = b,a
#6.python中单引号双引号三引号的区别
"""
单引号和双引号包起来的都为字符串
三引号包起来的是注释
"""
#7.is和==的区别
"""
==是判断两边的值是否相等
is是判断两边内存地址是否相等
"""
#8.python中如何实现tuple和list转换
# a = (1,2,3,)
# print(a)
# print(list(a))
#9.如何实现name="老男孩’的反转
# name = '老男孩'
# print(name[::-1])
#10.两个set如何获取交集并集差集
"""
交集:&
并集:|
差集:-
"""
#11.哪些情况下,y!=x-(x-y)
#x,y为两个不相等非空集合时
#12.python中如何拷贝一个对象
a = [1,2,3]
b = a.copy()
#13简述赋值,浅拷贝,深拷贝的区别
"""
赋值是将多个变量指向同一个内存地址
浅拷贝是只拷贝第一层元素的地址值,只有修改第一层的时候,不会进行改变,但是修改可变数据类型时会改变
深拷贝之后,不可变数据类型是共用的,可变数据类型则会开辟新的内存空间
"""
#14.pass的作用
"""
占位,写了pass之后,代码会继续往下执行,比如定义了一个函数,函数体内没有任何代码,写入pass就保证了代码的完整性而不会报错
"""
#15.阅读代码写结果
# import copy
# a = [1,2,4,5,['b','c']]
# b = a
# c = copy.copy(a)
# d = copy.deepcopy(a)
#
# a.append(5)
# a[4].append('d')
#
# print(a)
# print(b)
# print(c)
# print(d)
"""
a [1,2,4,5,['b','c','d'],5]
b [1,2,4,5,['b','c','d'],5]
c [1,2,4,5,['b','c','d']]
d [1,2,4,5,['b','c']]
"""
#16.用python实现9*9乘法表
# for x in range(1,10):
# for y in range(1,10):
# print(f"{x}*{y}={x*y}")
#17.用python显示一个斐波那契数列
# def feibo(n):
# if n==1 or n==2:
# return 1
# return feibo(n-1) + feibo(n-2)
#
# for i in range(1,20):
# print(feibo(i))
#18.如何删除列表中重复的值?
# a = [1,1,2,2,3,3]
# a = list(set(a))
# print(a)
#19.一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
# f = open("/etl/log.txt","r",encoding="utf-8")
# for i in f:
# print(i)
#20.a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
#字典
#21.lambda关键字的作用?
#定义一个匿名函数
#22.`*arg`和`**kwarg`作用?
"""
他们是动态位置参数和动态关键字参数,用来接收函数传参时多余的参数
"""
#23.如何在函数中设置一个全局变量 ?
#定义变量时前面加global
#24.filter、map、reduce的作用?
"""
filter为过滤函数
map;映射函数
reduce:计算数据
"""
#25.什么是匿名函数?匿名函数有什么作用?
"""
匿名函数就是没有定义函数名的函数
匿名函数的作用:可以简化代码,将结果作为参数返回时更加方便
"""
#26.Python递归的最大层数?
"""
官方解释为1000,实际测试为996-997
"""
#27.什么是迭代器?什么是可迭代对象?
"""
具有__iter__()方法的就是一个可迭代对象
具有__iter__()和__next__()两个方法的就是迭代器
"""
#28.什么是生成器?
"""
生成器本质就是一个迭代器,是程序员自己写的一种迭代器,有send方法就是一个生成器
"""
#29.什么是装饰器及应用场景?
"""
装饰器就是在不修改源代码及其调用方式的基础上,对其进行添加功能
"""
#30.什么是反射及应用场景?
"""
通过字符串操作对象的属性和方法
"""
#31.写一个普通的装饰器。
# def warpper(f):
# def inner():
# print("before")
# f()
# print("ok")
# return inner
# @warpper
# def func():
# print("被装饰的函数")
#32.写一个带参数的装饰器。
# def auth(argv):
# def wrapper(func):
# def inner(* args, **kwargs):
# if argv:
# print("我加上功能了!")
# func(*args, **kwargs)
# else:
# func(*args, ** kwargs)
# return inner
# return wrapper
#
# @auth("hahaha")
# def foo():
# print("这是一个点燃")
# foo()
#33.求结果
# def num():
# return [lambda x:i*x for i in range(4)]
# print([m(2) for m in num()])
#[6, 6, 6, 6]
#34.def(a, b=[])这种写法有什么陷阱?
"""
第二个参数是一个列表,第一次执行时开辟了一个新的空间,列表指向了一个内存地址,第二次再执行还是在这个内存地址上
"""
#35.看代码写结果
# def func(a,b=[]):
# b.append(a)
# return b
#
# v1 = func(1)
# v2 = func(2,[10,20])
# v3 = func(3)
# print(v1,v2,v3)
"""
v1 [1,3]
v2 [10,20,2]
v3 [1,3]
"""
#36.看代码写结果
# def func(a,b=[]):
# b.append(a)
# return b
#
# v1 = func(1)
# print(v1)
# v2 = func(2,[10,20])
# print(v2)
# v3 = func(3)
# print(v3)
"""
v1 [1]
v2 [10,20,2]
v3 [1,3]
"""
#请编写一个函数实现将IP地址转换成一个整数。
# def ip_z(msg):
# if msg:
# msg = msg.strip().split('.')
# for i in range(len(msg)):
# i = str(bin(int(msg[i])))[2:]
# i += i.rjust(8,"0")
# i += i
# return int(i,2)
# else:
# return "请重新输入"
# msg = input("输入ip地址")
# print(ip_z(msg))
#38.请查找一个目录下的所有文件(可能存在文件嵌套)。
# import os
# def getallsize(pathvar):
# size = 0
# lst = os.listdir(pathvar)
# for i in lst:
# pathvar2 = os.path.join(pathvar,i)
# if os.path.isfile(pathvar2):
# size += os.path.getsize(pathvar2)
# elif os.path.isdir(pathvar2):
# size += getallsize(pathvar2)
# return size
#39.求结果
# import math
# print (math.floor(5.5))
#5
#40.是否使用过functools中的函数?其作用是什么?
"""
reduce 计算数据
wraps 在装饰器中使用,保留原来函数的属性
"""
#41.re的match和search区别?
"""
match:从头开始查找
search:从任意位置开始匹配查找
"""
#42.用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
"""
. 除了 的任意字符
* 量词,代表匹配0次或者多次,任意个
.* 贪婪匹配
.*? 非贪婪匹配
"""
#43.如何生成一个随机数?
# import random
# # random.random() #随机获取 0<= x < 1
# # random.randrange() #随机获取指定范围中的整数,用法上同range
# # random.uniform() #随机获取指定范围中的小数
#44.super的作用?
"""
用来解决多继承之间复杂的调用关系使用super
在多继承中,如果出现了多个同名方法
super在调用的时候,会按照mro列表的继承顺序依次调用
类.mro() = > lst
"""
#45.双下划线和单下划线的区别?
"""
封装: 公有public 私有private 受保护的protected
私有: 只能在当前这个类里面使用,不能再子类或者在类外使用
受保护的: 可以在当前这个类或者子类里使用,不能再类外使用
约定俗成在该变量前面加上一个下划线_ , 就表示受保护了
"""
#46.@staticmethod和@classmethod的区别?
"""
一个静态方法,一个类方法
一个静态方法:(无论是对象还是类,都可以调用,不会默认传递任何参数)
一个类方法 :(无论是对象还是类,都可以调用,会默认传递类这个参数)
"""
#47.实现一个单例模式(加锁)。
# from threading import Lock
# class MyClass(object):
# __obj = None
# lock = Lock()
# def __new__(cls,*args,**kwargs):
# with cls.lock:
# if not cls.__obj:
# cls.__obj = object.__new__(cls)
# return cls.__obj
# obj1 = MyClass()
# obj2 = MyClass()
# print(obj1,obj2)
#48.栈和队列的区别?
"""
栈 : 先进后出,或者 后进先出
队列: 先进先出
"""
#49.以下代码输出是什么? 请给出答案并解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print (Parent.x, Child1.x, Child2.x)
Child1.x = 2
print (Parent.x, Child1.x, Child2.x)
Parent.x = 3
print (Parent.x, Child1.x, Child2.x)
"""
111
121
323
"""
#50.参考下面代码片段
# class Context:
# # pass
# #
# # with Content() as ctx:
# # ctx.do_something()
# # 请在Context类下添加代码完成该类的实现
# 面向对象的上下文管理是with语法的具体实现
# class Context():
# def __enter__(self):
# return self
# def __exit__(self, exc_type, exc_val, exc_tb):
# # 相当于在最后,执行了文件的关闭操作,fp.close()
# print("abc123")
# def do_something(self):
# print(1111)
#
# with Context() as ctx:
# ctx.do_something()
# print(ctx)