- 一行代码实现1--100之和(利用sum()函数求和)
sum(range(0,101))
- 如何在一个函数内部修改全局变量(利用global 修改全局变量)
a = 2
def num(self):
global a
a = 9
num()
print(a)
- 列出5个python标准库
os:提供了不少与操作系统相关联的函数
sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间 - 字典如何删除键和合并两个字典(del和update方法)
a = {"001": "vivid", "002": "orange"}
del a["001"]
b = {"003": "eggo"}
a.update(b)
- python实现列表去重的方法(先通过集合去重,在转列表)
list = [12, 13, 14, 12, 15, 16]
a = set(list)
b = [x for x in a]
print(b)
- 写一个冒泡排序
def test(list):
for i in range(len(list)):
for j in range(0,len(list)-i-1):
if list[j]>list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
list=[18,3,65,1,8,10,89]
test(list)
new_list = []
for i in range(len(list)):
new_list.append(list[i])
print(new_list)
- 计算1到100之和
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
- if条件判断
age = int(input("请输入你家狗狗的年龄: "))
print("")
if age <= 0:
print("你是在逗我吧!")
elif age == 1:
print("相当于 14 岁的人。")
elif age == 2:
print("相当于 22 岁的人。")
elif age > 2:
human = 22 + (age -2)*5
print("对应人类年龄: ", human)
### 退出提示
input("点击 enter 键退出")
- fun(* args, ** kwargs)中的* args,** kwargs什么意思?
*args是用来发送一个非键值对的可变数量的参数列表:
def demo(self, *a):
for x in a:
print x
demo('1', '2', '3', '4')
**kwargs允许你将不定长度的键值对,作为参数传递给一个函数:
def demo(self, **a):
for k, v in a.items():
print k, v
demo(name="vvi")
- python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存 - python内建数据类型有哪些
整型--int
布尔型--bool
字符串--str
列表--list
元组--tuple
字典--dict - __ init __作用:初始化方法,创建对象后,就立刻被默认调用了,可接收参数
class Bike:
def __init__(self, newWheelNum, newColor):
self.wheelNum = newWheelNum
self.color = newColor
def move(self):
print("车会跑")
BM = Bike(2, 'green')
print(BM)
- 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
list = [1,2,3,4,5]
def fn(x):
return x**2
res = map(fn,list)
res = [i for i in res if i >10]
print(res)
- python中生成随机整数、随机小数、0--1之间小数方法
随机整数:random.randint(a,b),生成区间内的整数
随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数
0-1随机小数:random.random(),括号中不传参
import random
import numpy as np
result = random.randint1(10, 20)
res = np.random.randn(5)
ret = random.random()
print(result)
print(res)
print(ret)
- 避免转义给字符串加哪个字母表示原始字符串?
r , 表示需要原始字符串,不转义特殊字符 - 中国,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的
import re
str = '中国'
res = re.findall(r'(.*?)', str)
print(res)
- python中断言方法举例
assert()方法,断言成功,则程序继续执行,断言失败,则程序报错
a = 2
assert(a>6)
print("断言成功")
assert(a<1)
print("断言失败")
- 数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句
select distinct name from student - 10个Linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo - python2和python3区别?列举5个
1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')
Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
3、python2中使用ascii编码,python中使用utf-8编码
4、python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列
5、python2中为正常显示中文,引入coding声明,python3中不需要
6、python2中是raw_input()函数,python3中是input()函数 - 列出python中可变数据类型和不可变数据类型,并简述原理
不可变数据类型:数值型、字符串型string和元组tuple
不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id
a = 3
b = 3
print(a)
1365598496
print(b)
1365598496
可变数据类型:列表list和字典dict;
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
a = [1,2]
b = [1,2]
id(a)
2572957427336
id(b)
2572957321544
- s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"
set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排
list是不 变数据类型,"".join()用空字节把括号中的这个对象连接在一起,成为一个新的字节串
s = "ajldjlajfdljfddd"
s = set(s)
s = list(s)
s.sort(reverse=False)
res = "".join(s)
print(res)
- 用lambda函数实现两个数相乘
sum = lambda a,b:a*b
print(sum)
- 利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res)
- 字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"
import re
a = "not 404 found 张三 99 深圳"
list = a.split(" ")
print(list)
res = re.findall('\d+|[a-zA-Z]+', a) # \d+匹配数字,[a-zA-Z]+匹配单词,|用来连接多个匹配方式,\d+\.?\d*匹配小数
for i in res:
if i in list:
list.remove(i)
new_str=" ".join(list)
print(res)
print(new_str)
- filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [1,2,3,4,5,6,7,8,9,10]
def fn(a):
return a%2==1
newlist = filter(fn,a)
newlist = [i for i in newlist]
print(newlist)
- 正则re.complie作用
re.compile是将正则表达式编译成一个对象,加快速度,并重复使用 - a=(1,)b=(1),c=("1") 分别是什么类型的数据?
分别是:tuple、int、str - 两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
list1 = [1,5,7,9]
list2 = [2,2,6,8]
list1.extend(list2) # 若对象为字典,则可用:list1.update(list2)
list1.sort(reverse=False)
- 用python删除文件和用linux命令删除文件方法
python:os.remove(文件名)
linux: rm 文件名 - 数据库优化查询方法
外键、索引、联合查询、选择特定字段等等 - 请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行
pychart、matplotlib - 正则表达式匹配中,(.)和(.?)匹配区别?
(.)是贪婪匹配,会把满足正则的尽可能多的往后匹配
(.?)是非贪婪匹配,会把满足正则的尽可能少匹配 - python中交换两个数值
a,b = 3,4
a,b = b,a
print(a,b)
- 写5条常用sql语句
show databases;
show tables;
desc 表名;
select * from 表名;
delete from 表名 where id=5;
update students set gender=0,hometown="北京" where id=5
- [1,2,3]+[4,5,6]的结果是多少?
两个列表相加,等价于extend,结果为:[1,2,3,4,5,6] - 简述mysql和redis区别
redis: 内存型非关系数据库,数据保存在内存中,速度快
mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定的Io操作,访问速度相对慢 - 正则匹配,匹配日期2018-03-20
url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
import re
url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
result = re.findall(r"dateRange=(.*?)%7C(.*?)&", url)
print(result)
- list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
list=[2,3,5,4,9,6]
new_list=[]
def get_min(list):
a=min(list)
list.remove(a)
new_list.append(a)
if len(list)>0:
get_min(list)
return new_list
test=get_min(list)
print(test)
- 分别从前端、后端、数据库阐述web项目的性能优化
前端优化:
1、减少http请求、例如制作精灵图
2、html和CSS放在页面上部,javascript放在页面下面,因为js加载比HTML和Css加载慢,所以要优先加载html和css,以防页面显示不全,性能差,也影响用户体验差
后端优化:
1、缓存存储读写次数高,变化少的数据,比如网站首页的信息、商品的信息等。应用程序读取数据时,一般是先从缓存中读取,如果读取不到或数据已失效,再访问磁盘数据库,并将数据再次写入缓存。
2、异步方式,如果有耗时操作,可以采用异步,比如celery
3、代码优化,避免循环和判断次数太多,如果多个if else判断,优先判断最有可能先发生的情况
数据库优化:
1、如有条件,数据可以存放于redis,读取速度快
2、建立索引、外键等
- 使用pop和del删除字典中的"name"字段,dic={"name":"zs","age":18}
dic={"name":"zs","age":18}
dic.pop("name")
del dic["name"]
简述cookie和session的区别
1,session 在服务器端,cookie 在客户端(浏览器)
2、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效,存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置
3、cookie安全性比session差简述any()和all()方法
any():只要迭代器中有一个元素为真就为真
all():迭代器中所有的判断项返回都是真,结果才为真
python中什么元素为假?
答案:(0,空字符串,空列表、空字典、空元组、None, False)IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常
IOError:输入输出异常
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
SyntaxError:Python代码逻辑语法出错,不能执行
NameError:使用一个还未赋予对象的变量列出几种魔法方法并简要介绍用途
__ init __:对象初始化方法
__ new __:创建对象时候执行的方法,单列模式会用到
__ str __:当使用print输出对象的时候,只要自己定义了str(self)方法,那么就会打印从在这个方法中return的数据
__ del __:删除对象执行的方法统计字符串中某字符出现次数
str = "张三 李四 张三"
res = re.count("张三")
print(res)
- 字符串转化大小写
str = "HHuuooe"
res = print(str.upper())
res = print(str.lower())
- 用两种方法去空格
str = "hello vivid"
res = str.replace(" ","")
print(res)
list = str.split(list)
res2 = "".join(list)
print(res2)
摘录至:https://blog.csdn.net/zhusongziye/article/details/84484464