- 博客(162)
- 收藏
- 关注

原创 MySQL索引(Index)是什么?为什么要使用索引?
MySQL索引(Index)是什么?为什么要使用索引?索引是一种特殊的数据库结构,有数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本届将详细讲解索引的含义、作用和优缺点。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则数据库系统将读取每条记录的所有信息进行匹配。可以把索引比作新华字典的音序表。例如,要查 ‘’库‘’ 字,如果不适用音序,就需要从字典的400页中逐页来找。但是,如果提取拼音出来,构成音序表,就需要从 10 多页的音序表中直接查找。这样就可以大
2021-11-09 16:34:10
822
原创 Nginx 概念补充
正向代理与反向代理概念要搞清楚哦!要理解透彻哦!Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网功能。正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 internet ,则需要通过代理服务器来访问,这种代理服务就成为正向代理。 VPN在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问反向代理:反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们需要将请求发送到反向代理服务器,由反向代理
2022-03-13 21:28:15
309
原创 Redis事务
Redis事务Redis 事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!一次性、顺序性、排他性!执行一系列的命令!----- 队列 set set set 指定 ----Redis 事务没有隔离级别的概念!所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!ExecRedis 单条命令是保证原子性的,但是事务不保证原子性!Redis 的事务:开启事务(MULTI)命令入队(……)执行事务(EXEC)正常执行事务!
2022-02-28 14:29:07
425
原创 Redis基础数据类型(Zset)有序集合
Redis基础数据类型(Zset)有序集合在set的基础上,增加了一个值,set k1 v1 zset k1 score v1127.0.0.1:6379> ZADD myset 1 one # 添加一个值(integer) 1127.0.0.1:6379> ZADD myset 2 two 3 three # 添加多个值(integer) 2127.0.0.1:6379> ZRANGE myset 0 -1 1) "one"2) "two"3) "three"##
2022-02-28 13:35:10
571
原创 Redis基础数据类型(Hash)
Redis基础数据类型(Hash)Map集合,key-map! 这时候这个值是一个map集合!本质和 String类型没有太大区别,还是一个简单的key-valueset myhash field kuangshen127.0.0.1:6379> flushdbOK127.0.0.1:6379> hset myhash filed1 kuanghshen # set 一个具体 key-value(integer) 1127.0.0.1:6379> hget myhash fi
2022-02-27 15:50:12
182
原创 Redis基础数据类型(set)
Redis基础数据类型(set)set中的值是不能重复的!127.0.0.1:6379> flushdbOK127.0.0.1:6379> sadd myset "hello" # set 集合中添加元素(integer) 1127.0.0.1:6379> sadd myset "kuangshen"(integer) 1127.0.0.1:6379> sadd myset "lovekuangshen"(integer) 1127.0.0.1:6379>
2022-02-27 11:42:53
334
原创 Redis基础数据类型(List)
Redis基础数据类型(List)在Redis里,我们可以把list玩成 栈、队列、阻塞队列!所有的list命令都是L开头的,Redis不区分大小写命令127.0.0.1:6379> flushallOK127.0.0.1:6379> keys *(empty array) 127.0.0.1:6379> LPUSH list one # 将一个值或者多个值,插入到列表头部(左)(integer) 1127.0.0.1:6379> LPUSH list two
2022-02-27 10:27:08
577
原创 Redis数据类型(String)
Redis数据类型(String)127.0.0.1:6379> flushallOK127.0.0.1:6379> set key1 v1 # 设置值OK127.0.0.1:6379> get key1 # 获取值"v1"127.0.0.1:6379> keys * # 获得所有的key1) "key1"127.0.0.1:6379> exists key1 # 判断某一个key是否存在(integer) 1127.0.0.1:637
2022-02-26 21:13:24
473
原创 Redis 基础
Redis 基础可以使用 select 切换数据库,默认从第0个数据库开始。127.0.0.1:6379> select 3 # 切换数据库OK127.0.0.1:6379[3]> dbsize # 查看db大小 (integer) 0127.0.0.1:6379[3]> set name zhangsanOK127.0.0.1:6379[3]> dbsize(integer) 1127.0.0.1:6379[3]> SELECT 7OK127.0.0
2022-02-26 19:57:36
120
原创 NoSQL 的四大分类
NoSQL 的四大分类KV键值对:新浪:Redis美团:Redis + Tair阿里、百度:Redis + memecahe文档型数据库(bson格式 和 json一样)MongoDBMongoDB 是一个基于分布式文件存储的数据库, C++ 编写,主要用来处理大量的文档MongoDB 是一个介于关系型数据库和非关系型数据库中间的产品!MongoDB 是非关系型数据库中功能最丰富,最像关系型数据库的!列存储数据库HBase分布式文件系统图关系数据库他不是存图形,
2022-02-26 09:53:51
1648
2
原创 几个模块介绍
几个模块介绍os模块os 全称 OperationsSystem操作系统os 模块里提供的方法就是用来调用操作系统里的方法import os# os.name ==> 获取操作系统的名字 Windows ==> nt / 非Windows ==> POSIXprint(os.name) # ntprint(os.sep) # 路径的分隔符 Windows \ 非Windows /# os 里的path会经常使用# 获取文件的觉得对路径print
2022-02-08 14:05:34
838
原创 装饰器的介绍
装饰器的介绍装饰器的基本使用import timedef cal_time(fn): print('我是外部函数,我被调用了!!!') print('fn = {}'.format(fn)) def inner(): start = time.time() fn() end = time.time() print('代码耗时', end - start) return inner@cal_ti
2022-02-08 13:43:12
664
原创 函数的嵌套以及闭包概念
函数的嵌套以及闭包的概念函数的嵌套def outer(x): m = 100 print('我是outer函数') def inner(): # inner函数定义在outer函数内部 print('我是inner函数') if x > 18: inner() return 'hello'outer(21)闭包的概念如果在一个函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(
2022-02-08 13:39:39
255
原创 内置方法sort、filter、map、reduce的使用
几个内置方法的使用有几个内置函数和内置类,用到了匿名函数1.sort 方法的使用列表的sort方法,会直接对列表进行排序sorted 内置函数,不会改变原有数据,而是生成一个新的有序列表nums = [4, 8, 2, 1, 7, 6]nums.sort()print(nums)ints = (5, 9, 2, 7, 3, 8, 1, 4)x = sorted(ints)print(x)# 字典和字典之间不能使用比较运算# students.sort()# foo() ta
2022-02-08 11:44:56
740
原创 匿名函数介绍
匿名函数def add(a, b): return a + bprint('0x%X' % id(add))x = (add(4, 5)) # 函数名(实参)作用是调用函数,获取到函数的执行结果,并赋值给变量 xprint(x)fn = add # 相当于给函数起了一个别名 fnprint(fn(3, 7))除了使用 def 关键字定义一个函数以外,我们还能使用 lambda 表达式定义一个函数。匿名函数,用来表达一个简单的函数,函数调用的次数很少,基本上就是调用一次。
2022-02-08 10:35:40
322
原创 递归函数的使用及练习
递归函数的使用及练习1.递归来说,就是函数内部自己调用自己。2.递归最重要的就是找到出口(停止的条件)。count = 0def tell_story(): global count count += 1 print('从前有座山') print('山上有座庙') print('庙里有个老和尚') print('还有一个小和尚') print('老和尚在给小和尚将故事') print('故事的内容是') if count
2022-01-20 22:02:37
372
原创 函数的注意事项
函数的注意事项函数的三要素:函数名、参数、返回值在有一些编程语言里,允许函数重名,在Python里不允许函数的重名如果函数重名了,后一个函数会覆盖前一个函数# def test(a,b):# print('hello,a = {},b = {} '.format(a,b))# test ==> 对应的是一个函数def test(x): print('good,x = {}'.format(x))test = 5test(3)# Python 里,
2022-01-20 21:57:30
191
原创 可变类型和不可变类型穿参
可变类型和不可变类型穿参def test(a): print('修改前a的内存地址0x%X' % id(a)) a = 100 print('修改后a的内存地址0x%X' % id(a))def demo(nums): print('修改前nums的内存地址0x%X' % id(nums)) nums[0] = 10 print('修改前nums的内存地址0x%X' % id(nums))# x = 1# print('调用前x的内存地址0x%X
2022-01-20 21:54:24
106
原创 函数的多个参数与可变参数
函数的多个参数与可变参数函数的多个参数def add(a, b): return a + bdef many_add(iter): x = 0 for i in iter: x += i return xnums = [1, 2, 4]result = many_add(nums)print(result)print(many_add((1, 2, 3)))# 一次 input 只能接受一次用户的输入x = input('请一次性输
2022-01-20 21:48:34
405
原创 函数默认参数的使用
函数默认参数的使用# 缺省参数要放在最后面,也可以称之为关键字参数(通过变量名来进行赋值的)# def say_hello( city='襄阳',name, age,): def say_hello(name, age, city='襄阳'): # 形参 city 设置了一个默认值 print('大家好,我是{},我今年{}岁了,我来自{}'.format(name, age, city))say_hello('jack', 19) # 如果没有传递参数,就是用默认参数say_hel
2022-01-20 21:42:38
621
原创 函数的总结
函数总结1.函数的声明,使用关键字 def 来声明一个函数。2.函数的格式 def 函数名(形参1、形参2…)。3.函数的调用 函数名(实参1、实参2…)。4.函数的返回值 使用 return 语句返回函数的执行结果。5.函数返回多个结果,就是将多个数据打包成一个整体返回,可以使用列表和字典,通常情况下选择使用元祖。6.函数名也是一个标识符。7.由数字、字母下划线组成,不能以数字开头;严格区分大小写;不能使用关键字。8.遵守命名规范,使用下划线连接;顾名思义。def get_sum(a,
2022-01-20 21:39:44
386
原创 多个返回值
多个返回值def test(a, b): x = a // b y = a % b # 一般情况下,一个函数最多只会执行一个 return 语句 # 特殊情况下 (finally语句)下,一个函数可能会执行多个 return 语句 # return [x, y] # return {'x':x,'y':y} # return (x, y) return x, y # 返回的本质是一个元祖result = test(13, 5)#
2022-01-20 21:34:45
313
原创 全局变量与局部变量
全局变量与局部变量a = 100 # 这个变量是全局变量,在整个py文件里都可以访问word = '你好'def test(): x = 'hello' # 这个变量是在函数内部定义的变量,它是局部变量,只能在函数内部使用 print('x = {}'.format(x)) # 如果局部变量的名和全局变量同名,会在函数内部又定义一个新的局部变量 # 而不是修改全局变量 a = 10 print('函数内部a = {}'.format(a))
2022-01-20 21:32:18
134
原创 函数中定义函数与函数调用函数
函数中定义函数与函数调用函数函数中定义函数def foo(): print('in foo') def bar(): print('in bar') bar()foo()def add(a, b): c = a + b d = a - b return c, df = add(10, 3)print(f)函数中调用函数def c(): print('c函数开始了') print('c函数结束了'
2022-01-20 21:30:00
654
原创 函数的介绍
函数的介绍函数就是一堆准备好的代码,在需要的时候调用这一堆代码。把多行代码封装成一个整体(函数)。在python里,使用关键字 def 来声明一个函数。# def 函数名(参数)# 函数要执行的操作def tell_story(): print('从前有座山') print('山里有做庙') print('庙里有个老和尚') print('还有一个小和尚') print('老和尚再给小和尚讲故事') print('故事的内容是')age
2022-01-20 21:25:24
508
原创 update 方法的使用
update 方法的使用# 列表可以使用extend方法将两个列表合并成为一个列表nums1 = [1, 2, 3, 4, 5]nums2 = [6, 7, 8, 9]nums1.extend(nums2)print(nums1)words1 = ('hello','good')words2 = ('yes','ok')print(words1+words2)person1 = {'name': 'zhangsan', 'age': 18}person2 = {'addr': '襄阳
2022-01-19 09:28:23
550
原创 转换相关方法
转换相关方法# 内置类 list tuple setnums = [9, 8, 4, 3, 2, 1]x = tuple(nums) # 使用tuple内置类转换成为元祖print(x)y = set(nums) # 使用tuple内置类转换成为集合print(y)z = list({'name': 'zhangsan', 'age': 18, 'score': 89})print(z)# Python里有一个比较强大的内置函数 eval,可以执行字符串里的代码a = 'inp
2022-01-19 09:25:19
190
原创 运算符应用总结
# + :可以用来拼接,用于 字符串、元祖、列表print('hello' + 'good')print(('good', 'yes') + ('hi', 'ok'))print([1, 2, 3] + [4, 5, 6])# - :只能用于集合,求差集print({1, 2, 3} - {3})# * :可以用于字符串、元祖、列表、表示重复多次。不能用于字典和集合print('hello' * 3)print([1, 2, 3] * 3)print((1, 2, 3) * 3)#
2022-01-19 09:17:53
131
原创 集合基本使用-练习-高级使用
集合基本使用-练习-高级使用集合是一个不重复的无序的数据,可以使用 {} 或者 set 来表示。{} 有两种意思。{}里如果放的是键值对,它就是一个字典,如果 {} 放的是单个的值,就是一个集合。person = {'name': 'zhangsan', 'age': 18} # 字典x = {'hello', 1, 'good'} # 集合# 如果有重复的数据,会自动去除names = {'zhangsan', 'lisi', 'jack', 'tony', 'jack', 'lisi
2022-01-18 22:26:13
145
原创 字典练习题
字典练习题1.求列表里边出现次数最多的字母chars = ['a', 'c', 'x', 'd', 'p', 'a', 'm', 'q', 's', 't', 'p', 'a', 't', 'c']# {'a':3 'c':2 'x':1 'd':1 'p':2}char_count = {}for char in chars: if char in char_count: # print('字典里已经有了这个字符%s' % char) char
2022-01-18 22:21:11
587
原创 字典以及字典的使用
字典以及字典的使用列表可以存储任意数据类型,但是一般情况下,我们都存储单一数据类型;这个列表里的每一个元素到底代表的是什么?列表只能存储值,但是无法对值进行描述;+字典不仅可以保存值,还能对值进行描述;使用大括号来表示一个字典,不仅有值 value,还有值的描述 key;字典里的数据都是以键值对 key-value 的形式保留的;key 和 value 之间使用冒号 : 来连接;多个键值对之间使用逗号,来分隔;person = {'name': 'zhangsan',
2022-01-18 22:10:42
547
原创 元祖以及元祖的使用
元祖以及元祖的使用元祖和列表很像,都是用来保存多个数据使用小括号 () 来表示一个元祖元祖和列表的区别在于,列表是可变的,而元祖是不可变数据类型words = ['hello', 'yes', 'good', 'hi'] # 列表,使用 [] 表示nums = (9, 4, 3, 1, 7, 9, 6, 9) # 元祖,使用 () 来表示# 和列表一样,也是一个有序的存储数据的容器# 可以通过下标来获取元素print(nums[3])# nums[3] = 40 # 元祖是不可变数
2022-01-18 20:40:16
539
原创 深拷贝与浅拷贝
深拷贝与浅拷贝浅拷贝只拷贝外边一层,深拷贝都拷贝import copy# 深拷贝和浅拷贝words = ['hello', 'good', [100, 200, 300], 'hi']# 浅拷贝只拷贝了一层words1 = words.copy()# 深拷贝的 words2words2 = copy.deepcopy(words)words[0] = '你好'print(words1)words2[2][0] = 1print(words2)...
2022-01-18 20:31:19
171
原创 列表推导式
列表推导式列表推导式的作用使用简单的语法创建一个列表# 列表推导式的作用是使用简单的语法创建一个列表nums = [i for i in range(1, 10)]print(nums)nums1 = []for i in range(10): nums1.append(i)print(nums1)x = [i for i in range(10) if i % 2 == 0]print(x)y = [i for i in range(10) if i % 2]print
2022-01-18 20:25:15
207
原创 列表的嵌套
列表的嵌套1.一个学校,有三个办公室,现在又8位老师等待工位的分配,请编写程序,完成随机的分配import randomteachers = ['A', 'B', 'C', 'D', 'E', 'F', 'J', 'H', 'I', 'J']rooms = [[], [], []]for teacher in teachers: room = random.choice(rooms) # choice 从列表里随机选择一个数据 room.append(teacher)prin
2022-01-18 19:51:35
208
原创 列表的练习
列表的练习1.求列表的最大数和下标nums = [3, 1, 9, 8, 4, 2, 0, 7, 5]nums.sort()print(nums)nums.sort(reverse=True)print(nums[0])x = nums[0] # 假设第0个是最大数index = 0for num in nums: if num > x: # 如果发现列表里存在比假设还要大的数字 # 说明假设不成立,把假设的值设置为发现的数字 x =
2022-01-18 19:35:01
485
原创 循环练习题
练习题1.统计100以内个位数是2,并且能够被3整除的数的个数;count = 0for i in range(1,100): if i % 10 == 2 and i % 3 == 0: count += 1 print(i)print('满足条件的数的个数是:',count)2.输入一个正整数,求它是几位数;num = int(input('请输入一个整数:'))count = 0while True: num //= 10 co
2022-01-18 19:34:02
256
原创 字符串的下标和切片
字符串的下标和切片下标我们有称之为索引,表示第几个数据可迭代对象:str list tuple dict set range 都可以便利str list tuple 可以通过下标来获取或操作数据在计算机里,下标都是从了 0 开始。word = 'zhangsan' #字符串:一个一个的字符串在一起可以通过下标获取或修改指定位置的数据;word = 'zhangsan'print(word[4]) #g字符串是不可变数据类型;对于字符串的任何操作,都不会改变原有的字符串;切片就是从字
2022-01-18 19:31:48
854
原创 冒泡排序以及优化
冒泡排序以及优化冒泡排序思想:让一个数字和它相邻的下一个数字进行比较运算,如果前一个数字大于后一个数字,交换两个数据的位置。nums = [6, 5, 3, 1, 8, 7, 2, 4]i = 0while i < len(nums) - 1: i += 1 n = 0 while n < len(nums) - 1: if nums[n] > nums [n + 1]: nums[n],nums [n + 1]=n
2022-01-08 19:55:16
559
原创 可变数据类型和不可变数据类型
可变数据类型和不可变数据类型不可变类型:字符串、数字、元祖可变类型:列表、字典、集合不可变数据类型,如果修改值,内存地址会发生变化;可变数据类型,如果修改值,内存地址不会发生变化;使用内置函数 id 可以获取到一个变量的内存地址;a = 12b = aprint('修改前a=%X,修前后b=%X' % (id(a), id(b))) #修改前a=6AAB6D70,修前后b=6AAB6D70a = 10print(b) # 12print('修改后a=%X,修改后b=%X' % (
2022-01-08 10:44:14
744
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人