今日考题:
1.列举字符串,列表,元组,字典每一个经常使用的五个方法css
1.按索引取值(只可取不可改变) # str索引取值 msg = 'hello nick' # 0123456789 # 索引序号 print(f'索引为6: {msg[6]}') print(f'索引为-3: {msg[-3]}') 索引为6: n 索引为-3: i 2.切片(顾头不顾尾,步长) # 索引切片 msg = 'hello nick' # 0123456789 # 索引序号 print(f'切片3-最后: {msg[3:]}') print(f'切片3-8: {msg[3:8]}') print(f'切片3-8,步长为2: {msg[3:8:2]}') print(f'切片3-最后,步长为2: {msg[3::2]}') # 了解,步长为正从左到右;步长为负从右到左 print('\n**了解知识点**') print(f'切片全部: {msg[:]}') print(f'反转全部: {msg[::-1]}') print(f'切片-5--2: {msg[-5:-2:1]}') print(f'切片-2--5: {msg[-2:-5:-1]}') 切片3-最后: lo nick 切片3-8: lo ni 切片3-8,步长为2: l i 切片3-最后,步长为2: l ik **了解知识点** 切片全部: hello nick 反转全部: kcin olleh 切片-5--2: ni 切片-2--5: cin 3.长度len # str长度 msg = 'hello nick' print(len(msg)) 10 4.成员运算in和not in # str成员运算 msg = 'my name is nick, nick handsome' print(f"'nick' in msg: {'nick' in msg}") print(f"'jason' not in msg: {'jason' not in msg}") print(f"not 'jason' in msg: {not 'jason' in msg}") 'nick' in msg: True 'jason' not in msg: True not 'jason' in msg: True 5.移除空白strip() # str移除空白strip() name = '&&&n ick' print(f"name.strip('&'): {name.strip('&')}") # strip()默认为‘ ’,而且不修改原值,新建立空间 print(f"name: {name}") # strip()应用场景 pwd = input('password: ') # 用户可能会手抖输入空格 if pwd.strip() == '123': print('密码输入成功') print(f"'*-& nick+'.strip('*-& +'): {'*-& nick+'.strip('*-& +')}") name.strip('&'): n ick name: &&&n ick password: 123 密码输入成功 '*-& nick+'.strip('*-& +'): nick 6.切分split # str切分split info = 'nick:male:19' info_list1 = info.split(':') info_list2 = info.split(':', 1) print(f'info_list1:{info_list1}') print(f'info_list2:{info_list2}') info_list1:['nick', 'male', '19'] info_list2:['nick', 'male:19'] 7.循环 msg = 'hello nick' for i in msg: print(i) h e l l o n i c k
1.按索引取值(正向取值+反向取值),便可存也能够取 # list之索引取值 name_list = ['nick', 'jason', 'tank', 'sean'] name_list[0] = 'nick handsom' # name_list[1000] = 'tank sb' # 报错 print(f"name_list[0]: {name_list[0]}") name_list[0]: nick handsom 2.切片 # list之切片 name_list = ['nick', 'jason', 'tank', 'sean'] print(f"name_list[0:3:2]: {name_list[0:3:2]}") name_list[0:3:2]: ['nick', 'tank'] 3.长度 # list之长度 name_list = ['nick', 'jason', 'tank', 'sean'] print(f"len(name_list): {len(name_list)}") len(name_list): 4 4.成员运算in和not in # list之成员运算in和not in name_list = ['nick', 'jason', 'tank', 'sean'] print(f"'tank sb' in name_list: {'tank sb' in name_list}") print(f"'nick handsome' not in name_list: {'nick handsome' not in name_list}") 'tank sb' in name_list: False 'nick handsome' not in name_list: True 5.追加值 # list之追加值 name_list = ['nick', 'jason', 'tank', 'sean'] name_list.append('tank sb') print(f"name_list: {name_list}") name_list: ['nick', 'jason', 'tank', 'sean', 'tank sb'] 6.删除 # list之删除 name_list = ['nick', 'jason', 'tank', 'sean'] del name_list[2] print(f"name_list: {name_list}") name_list: ['nick', 'jason', 'sean'] 7.循环 # list之循环 name_list = ['nick', 'jason', 'tank', 'sean'] for name in name_list: print(name) nick jason tank sean
1.索引取值 # tuple之索引取值 name_tuple = ('nick', 'jason', 'tank', 'sean') # name_tuple[0] = 'nick handsom' # 报错 print(f"name_tuple[0]: {name_tuple[0]}") name_tuple[0]: nick 2.切片(顾头不顾尾,步长) # tuple之切片 name_tuple = ('nick', 'jason', 'tank', 'sean') print(f"name_tuple[1:3:2]: {name_tuple[1:3:2]}") name_tuple[1:3:2]: ('jason',) 3.长度 # tuple之长度 name_tuple = ('nick', 'jason', 'tank', 'sean') print(f"len(name_tuple): {len(name_tuple)}") len(name_tuple): 4 4.成员运算 # tuple之成员运算 name_tuple = ('nick', 'jason', 'tank', 'sean') print(f"'nick' in name_tuple: {'nick' in name_tuple}") 'nick' in name_tuple: True 5.循环 # tuple之循环 name_tuple = ('nick', 'jason', 'tank', 'sean') for name in name_tuple: print(name) nick jason tank sean 6.count() # tuple之count() name_tuple = ('nick', 'jason', 'tank', 'sean') print(f"name_tuple.count('nick'): {name_tuple.count('nick')}") name_tuple.count('nick'): 1 7.index() # tuple之index() name_tuple = ('nick', 'jason', 'tank', 'sean') print(f"name_tuple.index('nick'): {name_tuple.index('nick')}") name_tuple.index('nick'): 0
1.按key存取值:可存可取 # dic之按key存取值 dic = {'a': 1, 'b': 2} print(f"first dic['a']: {dic['a']}") dic['a'] = 3 print(f"second dic['a']: {dic['a']}") first dic['a']: 1 second dic['a']: 3 2.长度len # dic之长度len dic = {'a': 1, 'b': 2} print(f"len(dic): {len(dic)}") len(dic): 2 3.成员运算in和not in # dic之成员运算in和not in dic = {'a': 1, 'b': 2} print(f"'a' in dic: {'a' in dic}") print(f"1 in dic: {1 in dic}") 'a' in dic: True 1 in dic: False 4.删除 # dic之删除del dic = {'a': 1, 'b': 2} del dic['a'] print(f"dic.get('a'): {dic.get('a')}") dic.get('a'): None # dic之删除pop() dic = {'a': 1, 'b': 2} dic.pop('a') # 指定元素删除 print(f"dic.pop('b'): {dic.pop('b')}") print(f"dic.get('a'): {dic.get('a')}") dic.pop('b'): 2 dic.get('a'): None # dic之删除popitem() dic = {'a': 1, 'b': 2} print(f"dic.popitem(): {dic.popitem()}") # popitem() 方法随机返回并删除字典中的一对键和值(通常删除末尾对)。 dic.popitem(): ('b', 2) 5.键keys()、值values()、键值对items() # dic之键keys()、值values()、键值对items(),python2中取出的是列表(鸡蛋);python3中取出的是元组(鸡) dic = {'a': 1, 'b': 2} print(f"dic.keys(): {dic.keys()}") print(f"dic.values(): {dic.values()}") print(f"dic.items(): {dic.items()}") dic.keys(): dict_keys(['a', 'b']) dic.values(): dict_values([1, 2]) dic.items(): dict_items([('a', 1), ('b', 2)]) 6.循环 # dic之循环 # dic是无序的,可是python3采用了底层优化算法,因此看起来是有序的,可是python2中的字典是无序 dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4} for k, v in dic.items(): # items能够换成keys()、values() print(k, v) a 1 b 2 c 3 d 4
2.描述下列常见内置函数的做用可用代码说明map,zip,filter,sorted,reduce前端
# map --> 映射 def function1(item): return item + 2 res = map(function1, [1, 2, 3, ]) print(res) print(list(res)) #zip --> 将两个个序列中的元素进行一对一的组合成元组 res = zip(["1", "2", "3"], [5, 6,7, 8]) print(res) ''' {'1': 5, '2': 6, '3': 7} 多余的将会被丢弃 ''' #将字典中的kv颠倒 res = zip(dict0.values(), dict0.keys()) dict1 = dict(res) print(dict1) # fileter ---> 筛选 def function(item): # 1/2/3/4 if item < 5: return True else: return False res = filter(lambda item: item > 2, [1, 2, 3, 4]) print(res) print(list(res)) # sorted --> 排序 def function2(item): return salary_dict[item] salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000, 'z': 1000 } res = sorted(salary_dict, key=function2, reverse=True) print(list(res)) #reduce --> 把一个函数做用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素作累积计算 ''' 把序列[5, 4, 3, 2, 1]变成整数54321 ''' import functools res = functools.reduce(lambda x,y:x * 10 +y,[5, 4, 3, 2, 1]) print(res) #54321
3.列举你所知道的面相对象中的__开头__结尾的方法及做用,越多越好python
__init__: 在调用类时触发。 __str__: 会在打印对象时触发。 __del__: 对象被销毁前执行该方法,该方法会在最后执行。 __getattr__: 会在对象.属性时,“属性没有”的状况下才会触发。 __setattr__: 会在 “对象.属性 = 属性值” 时触发。 __call__: 会在对象被调用时触发。 __new__: 会在__init__执行前触发。
4.写出form表单中全部的知识点算法
action 控制数据的提交路径 method 控住数据提交的方式 默认是get请求 enctype 控制前端朝后端提交数据的编码格式 注册页面 下拉框 select标签 textarea 大段文本
5.列举你所知道的全部css选择器编程
基本选择器 id选择器 #id值 类选择器 .class值 通用选择器 * 后代选择器 属性选择器 伪类选择器 伪元素选择器
6.简述解释性语言和编译性的区别后端
编译型 优势(解释型):执行效率高 缺点(解释型):开发效率低 解释型 优势(编译型):开发效率高 缺点(编译型):执行效率低
7.列举你所知道的python2与python3之间的区别数组
print 1/2的结果 编码 在使用super()的不一样
8.什么是匿名函数。匿名函数通常结合什么一块儿使用浏览器
没有名字的函数 通常和 max/min/filter/map/sorted联用
9.三次握手四次挥手
安全
10.什么是GIL全局解释器锁app
1.GIL本质上是一个互斥锁. 2.GIL的为了阻止同一个进程内多个线程同时执行(并行) 3.这把锁主要是由于CPython的内存管理不是 "线程安全" 的. GIL的存在就是为了保证线程安全的.
11.什么是python的垃圾回收机制
当一个变量值的引用计数为0的时候,会触发垃圾回收机制,改变量值会被回收
12.你所知道的可以实现单例模式的方式有哪些,尝试着手写几个
# 单例模式1 __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance # 单例模式2 __instance = None @classmethod def singleton(cls): if not cls.__instance: cls.__instance = cls() return cls.__instance
13.列举python中经常使用模块及主要功能,越多越好!
# time模块:提供了三种不一样类型的时间(时间戳),三种不一样类型的时间能够相互转换 # datetime模块:时间的加减 # random模块:随机数 # hashlib模块:对字符加密 # hmac模块:对字符加密,而且加上密钥 # typing模块:与函数联用,控制函数参数的数据类型,提供了基础数据类型以外的数据类型 # requests模块:爬虫--》爬数据,模拟浏览器对url发送请求,拿到数据 # re模块: 去字符串找 符合某种特色的字符串 # numpy模块:用来作数据分析,对numpy数组(既有行又有列)--矩阵进行科学运算
14.什么是浮动,浮动的效果是什么,有没有坏处,如何解决
在 CSS 中,任何元素均可以浮动。 浮动的元素 是脱离正常文档流的(原来的位置会让出来),浏览器会优先展现文本内容 浮动带来的影响,会形成父标签塌陷(口袋瘪了) 如何解决父标签塌陷问题??? clear 清除浮动带来的影响,哪一个父标签塌陷了 就给谁加clearfix这个类属性值
15.你所知道的定位有哪些,每一个定位各有什么特色,并列举哪些是不脱离文档流的哪些是脱离文档流的
相对定位 relative 相对于标签原来的位置 移动 绝对定位 absolute 相对于已经定位过(只要不是static均可以 relative)的父标签 再作定位(******) 固定定位 fixed 相对于浏览器窗口 固定在某个位置不动 1.不脱离文档流:相对定位; 2.脱离文档流:浮动的元素,绝对定位,固定定位
16.二进制转换成十进制:v = “0b1111011”
十进制转换成二进制:v = 18
八进制转换成十进制:v = “011”
十进制转换成八进制:v = 30
十六进制转换成十进制:v = “0x12”
十进制转换成十六进制:v = 87
print(int(v,2) print(bin(v)) print(int(v,8)) print(oct(v)) print(int(v,16)) print(hex(v))
17.简述可迭代对象,迭代器对象,生成器对象及应用场景
含有.__iter__方法的数据类型就叫作可迭代对象,除了数字类型,全部数据类型都是可迭代对象 含有__iter__和__next__方法的对象就是迭代器对象 含有yield关键字的函数叫作生成器 为何要有迭代器对象:提供了不依赖索引取值的手段 可迭代对象不必定是迭代器对象; 迭代器对象必定是可迭代对象 yield的特性: 1. 暂停函数 2. 经过next取值
18.什么是元类?元类的应用场景有哪些,能具体说说吗?
元类就是类的类,类的类是type,type是全部类的类,type就是一个元类。 元类能够帮咱们控制类的建立。
19.你用的MySQL是哪一个引擎,各个引擎之间有什么区别
主要MyISAM与InnoDB两个引擎,其主要区别以下: 1、InnoDB支持事务,MyISAM不支持,这一点是很是之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪一个出错还能够回滚还原,而MyISAM就不能够了; 2、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用; 3、InnoDB支持外键,MyISAM不支持; 4、MyISAM是默认引擎,InnoDB须要指定; 5、InnoDB不支持FULLTEXT类型的索引; 6、InnoDB中不保存表的行数,如selectcount(*)fromtable时,InnoDB;须要扫描一遍整个表来计算有多少行,可是MyISAM只要简单的读出保存好的行数便可。注意的是,当count(*)语句包含where条件时MyISAM也须要扫描整个表; 7、对于自增加的字段,InnoDB中必须包含只有该字段的索引,可是在MyISAM表中能够和其余字段一块儿创建联合索引; 8、清空整个表时,InnoDB是一行一行的删除,效率很是慢。MyISAM则会重建表; 9、InnoDB支持行锁(某些状况下仍是锁整表,如updatetableseta=1whereuserlike‘%lee%’
20.什么是Js,Js的数据类型有哪些,Js序列化反序列化用的是什么方法
js是前端的一门编程语言 js中的数据类型 数值类型 Number,字符类型 string,对象 object,布尔值 Boolean