VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • Python知识点(2)

','ab12@163.com','ddd@gmail.com','333@163.com.com'] for i in email: r = re.match('^[\w]+@163.com$',i) if r: print(r.group())

 

 

 

49.递归求和

复制代码
# 求1-100的和
# 方法一:归并、缩减reduce(需要导入functools的reduce包)
from functools import reduce
l = [i for i in range(101)]
print(reduce(lambda x,y:x+y,l))

# 方法二:递归调用
def get_sum(num,max_num):
    if max_num >= num:
        res = max_num + get_sum(num,max_num-1)
    else:
        res=0
    return res
print(get_sum(1,100))
复制代码

 

 

 

50.python字典和json字符串相互转化方法

复制代码
import json
d = {'a':1,'b':2,'c':3}
# 字典转json
j = json.dumps(d)
# json转字典
j1 = json.loads(j)
print(j)
print(type(j))
print(j1)
print(type(j1))
复制代码

 

 

 

 

 51.MyISAM 与 InnoDB 区别

  • InnoDB支持事务,MyISAM不支持。事务是一种高级的处理方式,例如增删改时如果出了问题可以回滚还原,而MyISAM就不可以
  • InnoDB支持外键,MyISAM不支持
  • InnoDB删除表是一行行的删除,效率慢;MyISAM则是重建表
  • InnoDB适合频繁修改和安全性较高的应用;MyISAM适合以查询和插入为主的应用
  • InnoDB需要为有自增字段创建一个独立的索引;MyISAM可以和其他字段一起建立联合索引

 

 

 

 

52.用两种方法去空格

复制代码
s = ' A B C '
# 方法一
s1 = s.split()
print(''.join(s1))

# 方法二
s2 = s.replace(' ','')
print(s2)
复制代码

 

 

 

 

53.正则匹配不是以4和7结尾的手机号

复制代码
import re
mobile = ['13456774019','15988139634','13144447777']
for m in mobile:
    # 中括号内^表示非,除了的意思
    get_mobile = re.findall('[^47]$',m)
    if get_mobile:
        print(m)
    else:
        print('%s不符合要求' %m)
复制代码

 

 

 

54.简述python引用计数机制

  python垃圾回收是以引用计数为主,标记-清除和分代清除为辅;标记-清除和分代回收主要是为了处理循环引用的难题。

  引用计数算法:

    当有一个变量保存了对象的引用时,此对象的引用计数就会+1,当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么引用计数就会-1,变为2;再次del变量指向的对象时,

  变为1,如果再调用一次del,才会真正删除对象。

 

 

55.列举3条以上PEP8编码规范

  • 顶级定义之间空两行,比如函数或者类定义
  • 方法定义、类定义与第一个方法之间应该空一行
  • 三引号进行注释
  • 使用Pycharm或者Eclipse一般使用4个空格来缩进代码

 

 

 

56.正则匹配中文

import re
title = 'hello,你好,world,世界!'
result = re.findall('[\u4e00-\u9fa5]+',title)
print(result)

 

 

 

57.简述乐观锁和悲观锁

  悲观锁:每次去拿数据的时候都会认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库很多就用到了这种锁机制,

      比如,行锁,表锁,读锁,写锁等,都是操作之前先上一把锁。

  乐观锁:每次去拿数据的时候都不认为别人会修改,所以每次拿数据都不会上锁,但是在更新的时候会判断一下在此期间有没有人更新数据,可以使用版本号等机制,乐观锁适用于多

      读的应用类型,这样可以提高吞吐量。

 

 

58.正则表达式匹配出<html><h1>www.baidu.com</h1></html>

复制代码
import re
url = ['<html><h1>www.baidu.com</h1></html>','<html><h1>www.baidu.com</h2></html>']
for i in url:
    # \1\2表示反向引用,即\1匹配第一个()内匹配到的内容,\2匹配第二个()内匹配到的内容,以此类推
    get_str = re.findall(r'<(\w+)><(\w+)>.+?</\2></\1>',i)
    if get_str:
        print(i)
    else:
        print('%s不符合要求'%i)
复制代码

 

 

 

 

59.python传参数是传值还是传址?

  python参数都是引用传递,对于不可变数据类型(字符、数值、元组),因为变量不能修改,所以函数体内的运算不会影响到变量自身;对于可变数据类型(列表、字典),函数体运算会更改传入的参数变量

 

 

 

60.求两个列表的交集、差集、并集

复制代码
l1 = [2,4,6,6,8,9,3]
l2= [4,2,2,6,8,8]
# 交集
print(list(set(l1).intersection(set(l2))))
# 并集
print(list(set(l1).union(set(l2))))
# 差集
print(list(set(l1).difference(set(l2))))
复制代码

 

 

 

61.生成0-100之间的随机数

复制代码
import random
# 随机整数
print(random.randrange(0,101,1))
# 随机整数
print(random.randint(0,101))
# 随机整数
print(random.choice(range(101)))
# 随机小数,random.random()生成0-1之间的随机小数,所以乘以100
print(100*random.random())
复制代码

 

 

 

62.lambda匿名函数的好处

  精简代码,省去了定义函数

l = ['abc','cba','aaa','ccc']
# map省去了for循环
print(list(map(lambda i:'我饿了' if i == 'abc' else i,l)))

 

 

 

 

63.常见的网络传输协议

  HTTP、FTP、TCP、UDP、SMTP等等

 

 

 

64.单引号、双引号、三引号的用法

  单引号和双引号没什么区别,表示字符串的时候单引号里面可以嵌套双引号,反之亦然;如果单引号(或者双引号)里面再使用单引号(或双引号),则需要转义,即在每个嵌套引号前面加反斜杠(\)

  三引号可以书写多行,通常用于大篇幅的字符串

 

 

 

65.HTTP请求中GET和POST的区别

  • GET请求通过url直接访问,所以数据信息在url中可以直接看到,比如浏览器访问;而POST请求是放在请求头中的,无法直接看到
  • 少量数据使用GET,大量数据使用POST
  • GET请求的安全性比较低,比如密码是不能直接暴露在url中的,就不能使用GET请求,而POST请求是放在请求头中的,可以使用;一般涉及到登录密码操作的,最好使用HTTPS,安全性更好

 

 

 

66.读取Excel

# 导入应用数据分析库
import pandas
file = pandas.read_excel('123.xls')
print(file)

 

 

 67.简述解释型和编译型编程语言

  解释型语言编写的程序不需要编译,在执行的时候专门有一个解释器,把解释型语言编译成机器语言,每个语句都是在执行的时候才编译,每执行一次编译一次,效率比较低

  编译型语言在执行程序之前,会有一个专门的编译过程,编译系统把源高级程序编译成机器语言文件,只需翻译一次,执行时不需要编译,所以编译型语言效率比较高

  (简单来说就是:解释型语言在执行时编译,每次执行都要编译;编译型语言执行前编译,只需编译一次)

 

 

 

68.Python 的解释器种类以及相关特点

  • CPython
    • 使用C语言开发,使用最广的解释器
  • IPython
    • 基于Cpython之上的一个交互式计时器,交互方式增强,功能和CPython一样
  • PyPy
    • 采用JIT技术,对python代码进行动态编译,提高执行效率
  • JPython
    • 运行在Java上的解释器,把Python代码编译为Java字节码
  • IronPython
    • 运行在微软.NET上的解释器,把Python代码编译为.NET字节码

 

 

69.字符串反转的几种方法

复制代码
s = 'ilovechina'
# plan1 切片
print(s[::-1])

# plan2 转换成列表反转
l = list(s)
l.reverse()
print(''.join(l))

# plan3
l2 = list(s)
result = ''
for _ in range(len(l2)):
    p = l2.pop()
    result += p
print(result)
复制代码

 

 

 

70.字符串编码转换

复制代码
s = 'S'
# 编码成二进制数据
bm = s.encode('gbk')
print(bm)
# 解码成二进制数据
jm = bm.decode('utf-8')
print(jm)
复制代码

 

 

 

71.打乱列表元素

import random
l1 = [1,2,3,4,5,6]
random.shuffle(l1)
print(l1)

 

 

 

73.交换字典键值

复制代码
# 方法一 字典生成式
d = {'name':'xiaoguo','age':18}
d_new_1 = {v:k for k,v in d.items()}
print(d_new)

# 方法二
d_new_2 = dict()
for k,v in d.items():
    d_new_2[v] = k
print(d_new_2)

# 方法三
z = zip(d.values(),d.keys())
d_new_3 = dict(z)
print(d_new_3)
复制代码

 

 

 

 

74.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

复制代码
# 导入itertools模块下的islice
from itertools import islice

# 斐波那切数列(前面两个数之和生成第三个数)
def test(num):
    a,b = 0,1
    while num > 0:
        a,b = b,a+b
        num -= 1
        yield a
    
for i in test(10):
    print(i)
print('========================================================')

# 普通生成器列表
for x in islice((i for i in range(10)),4,10):
    print(x)
复制代码

 

 

 

75,生成器实现斐波那切数列

复制代码
def test(num):
    a,b = 0,1
    while num > 0:
        a,b = b,a+b
        num -= 1
        yield a
    
for i in test(10):
    print(i)
复制代码

 

 

 

 

76.a="hello"和 b="你好"编码成 bytes 类型

复制代码
a = 'hello'
b = '你好'
# 方法一

# 编码
en_1 = a.encode(encoding='utf-8')
en_2 = b.encode(encoding='utf-8')
print(en_1,en_2)
# 解码
print(en_1.decode(),en_2.decode())

# 方法二
print(bytes(a,encoding='utf-8'))
print(bytes(b,encoding='utf-8'))
复制代码

 

 

 

77.在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用

  • read([size]):读取size个字节,没有参数表示读取到文件结束,输出的是字符串对象
  • readline:读取一行内容,占用内存小,适合读取大文件,输出的是字符串对象
  • readlines:读取文件所有行,保存在一个列表中,每行内容作为一个元素,读取大文件会比较占内存

 

 

 

78.json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?

  可处理的数据类型:字符串(str)、整型(int)、布尔(bool)、列表(list)、元组(tuple)、字典(dict)、null

复制代码
'''
序列化时间类型的数据
'''

import json
from json import JSONEncoder
from datetime import datetime

class FormatTime(JSONEncoder):
    def default(self,obj):
        # 判断obj是否是datetime类型
        # 如果是则格式化时间
        if isinstance(obj,datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            # 否则是其他类型的数据,调用父类默认的default方法
            return JSONEncoder.default(obj)

d = {'name':'gy','time':datetime.now()}
get_time = json.dumps(d,cls=FormatTime)
print(get_time)
复制代码

 

 

 

79.json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?

import json

d = {'words':'你好'}
print(json.dumps(d,ensure_ascii=False))

 

 

 

80.如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)

复制代码
from datetime  import timedelta
from datetime import datetime
def get_date(date_time,n):
    # 将字符串对象转换为时间格式对象,注意传入的字符串格式必须要个格式化的格式一样
    format_time = datetime.strptime(date_time,'%Y%m%d')
    if isinstance(n,int):
        # datetime.timedelta:时间间隔,参数可以是days、hours等,以此类推
        new_date = (format_time + timedelta(days=n)).strftime('%Y%m%d')
        return new_date
    else:
        return('输入的条件不符合要求')

print(get_date('20161120',10))
复制代码

 

 

 

81..写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回

复制代码
# 闭包结构的调用
def a(m):
    def b(n):
        return m*n
    return b

a1 = a(3)
a1(2)
复制代码

 

 

 

 

82.请写一段 Python连接 Mongo 数据库,然后的查询代码

复制代码
import pymongo

db_config = {
    "type":"mongo",
    "host":"主机地址",
    "post":"端口号",
    "username":"用户名",
    'passwd':"密码",
    "db_name":"数据库名称"
}

class Mongo():
    def __init__(self):
        self.db = db_config["db_name"]
        self.uname = db_config["username"]
        self.passwd = db_config["passwd"]
        
        # 字符串前面加f 表示支持字符串中大括号内的表达式
        self.client = pymongo.MongoClient(f'mongodb://{db_config["host"]}:db_config["port"]')
        if self.uname and self.passwd:
            self.db1 = self.client[self.db].authenticate(self.uname,self.passwd)
        self.db1 = self.client[self.db]
        
    def get_data(self):
        # 查询状态为0的数据
        data = self.db1.find({"status":"0"})
        gen = (i for i in self.data)
        return gen

m = Mongo()
print(m.get_date())
复制代码

 

 

 

 

83.Redis数据类型

  redis指出五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)

 

 

 

 

84.请写一段 Python连接 Redis 数据库的代码

复制代码
import redis

# redis默认端口号是6379
conn = redis.Redis(host="localhost",port="6379",decode_response="True")
# 将键值存入redis缓存
conn.set('name','zhangsan')
print(conn['name'])
# 取出键对应的值
print(conn.get('name'))
复制代码

相关教程