day13 内置函数和推导式

今日概要:

  • 匿名函数
  • 生成器
  • 内置函数
  • 附加:推导式,属于数据类型的知识,内部的高级的用法会涉及到【生成器】和【函数】的内容。

1. 匿名函数

传统的函数的定义包括了:函数名 + 函数体。

def send_email():pass# 1. 执行
send_email()
# 2. 函数名作为列表元素
data_list = [send_email, send_email, send_email ]
# 3. 函数名作为参数传递
other_function(send_email)

匿名函数,则是基于lambda表达式实现定义一个没有名字的函数:

data_list = [ lambda x:x+100,  lambda x:x+110, lambda x:x+120 ]print( data_list[0] )
f1 = lambda x:x+100res = f1(100)
print(res)

基于Lambda定义的函数格式为:lambda 参数:函数体

  • 参数:支持任意参数。

    lambda x: 函数体
    lambda x1,x2: 函数体
    lambda *args, **kwargs: 函数体
    
  • 函数体:只能支持单行的代码。

    def xxx(x):return x + 100lambda x: x + 100
    
  • 返回值:默认将函数体单行代码执行的结果返回给函数的执行者。

    func = lambda x: x + 100v1 = func(10)
    print(v1) # 110
    
    def func(a1,a2):return a1 + a2 + 100foo = lambda a1,a2: a1 + a2 + 100
    

小结:在编写匿名函数时,受限于函数体只能写一行,所以匿名函数只能处理非常简单的功能。也因此匿名函数适用于简单的业务处理,可以快速并简单的创建函数。

练习题

根据函数写写出其匿名函数的表达方式

def func(a1,a2):return a1 + a2func = lambda a1,a2: a1+a2
def func(data):return data.replace("苍老师","***")func= lambda data: data.replace("苍老师","***")
def func(data):name_list = data.split(".")return name_list[-1]func = lambda data: data.split(".")[-1]

扩展:三元运算

简单的条件语句,可以基于三元运算实现:

公式:结果 = 条件成立时 if 条件 else 不成立

if "苍老师" in num:data = "臭不要脸"
else:data = "正经人"
data = "臭不要脸" if "苍老师" in num else "正经人"

lambda表达式和三元运算没有任何关系,属于两个独立的知识点。

但是掌握三元运算之后,在编写匿名函数时,就可以处理稍微复杂点的情况了,例如:

func = lambda x: "大了" if x > 66 else "小了"v1 = func(1)
print(v1)       >>输出结果:"小了"v2 = func(100)
print(v2)       >>输出结果:"大了"

2. 生成器

2.1 定义

生成器是由函数+yield关键字创造出来的写法,在特定情况下,使用生成器可以帮助我们节省内存。

  • 生成器函数:函数中有yield存在时,这个函数就叫生成器函数。

    def func():print(111)yield 1
    
    def func():print(111)yield 1print(222)yield 2print(333)yield 3print(444)
    
  • 生成器对象:执行生成器函数时,函数内部代码不会执行,且会返回一个生成器对象。

    def func():print(111)yield 1print(222)yield 2print(333)yield 3print(444)data = func()
    print(data)
    >>输出结果:<generator object func at 0x000001673C9F75F0>
    
  • 通过next()传入生成器对象,会开始执行生成器函数内部的代码,但遇到yield就会停止,并将yield后面的值返回。

    def func():print(111)yield 1print(222)yield 2print(444)data = func()v1 = next(data)
    print(v1)
    >>输出结果:
    111
    1
    v2 = next(data)
    print(v2)
    >>输出结果:
    222
    2
    v3 = next(data)
    print(v3)
    >>输出结果:
    444
    StopIteration
    
  • 生成器函数代码执行完毕或中途遇到return,程序会报错:StopIteration,因此一般情况下,会通过for循环去执行生成器对象。

    data = func()for item in data:print(item)
    

生成器的特点是:记录在函数中的执行位置,下次执行next时,会从上一次的位置基础上再继续向下执行。

2.2 应用场景

  • 假设要生成 300w个随机的4位数,并打印出来。

    • 在内存中一次性创建300w个
    • 动态创建,用一个创建一个。
    # 常规方法:(占用内存大)
    import randomdata_list = []
    for i in range(300000000):val = random.randint(1000, 9999)data_list.append(val)# 再使用时,去 data_list 中获取即可。
    # ...
    
    # 使用生成器的方法:(节省内存)
    import randomdef gen_random_num(max_count):counter = 0while counter < max_count:yield random.randint(1000, 9999)counter += 1data_list = gen_random_num(3000000)
    # 后续使用时,去 data_list 中获取即可,使用一次,创建一个随机4位数:
    n1 = next(data_list)
    n2 = next(data_list)
    
  • 假设要从某个数据源中获取300w条数据(后期学习操作MySQL 或 Redis等数据源再具体操作,了解思想即可)。

    所以,当以后需要我们在内存中创建很多数据时,可以尝试使用生成器函数来实现,以达到节省内存的目的。

2.3 生成器扩展

def func():print(111)v1 = yield 1print(v1)print(222)v2 = yield 2print(v2)print(333)v3 = yield 3print(v3)print(444)data = func()n1 = data.send(None) # 第一次执行生成器函数,send()传入的参数只能为None
print(n1)n2 = data.send(666)       # 第二次继续往下执行生成器函数,send()传入的参数666会先赋值给v1,再执行后续语句
print(n2)n3 = data.send(777)       # 第三次继续往下执行生成器函数,send()传入的参数777会先赋值给v2,再执行后续语句
print(n3)n4 = data.send(888)       # 第四次继续往下执行生成器函数,send()传入的参数888会先赋值给v3,再执行后续语句
print(n4)

3.内置函数


Python内部为我们提供了很多方便的内置函数,在此整理出34个进行讲解:

3.1 第1组(5个)

3.1.1 abs:获取绝对值

v = abs(-10)
print(v)
>>输出结果:10

3.1.2 pow:指数

v1 = pow(2,5) # 2的5次方  2**5
print(v1)
>>输出结果:32

3.1.3 sum:求和

v1 = sum([-11, 22, 33, 44, 55]) # sum()中传入的参数是可以被迭代的数据
print(v1)
>>输出结果:143

3.1.4 divmod:求商和余数

v1, v2 = divmod(9, 2)
print(v1, v2)
>>输出结果:4 1

3.1.5 round:小数点后n位(四舍五入)

v1 = round(4.11786, 2)
print(v1)
>>输出结果:4.12

3.2 第2组(4个)

3.2.1 min:最小值

v1 = min(11, 2, 3, 4, 5, 56)
print(v1)
>>输出结果:2
v2 = min([11, 22, 33, 44, 55]) # min()中的参数是可迭代的数据
print(v2)
>>输出结果:11
# min(可迭代数据,key=含1个参数的函数):
v3 = min([-11, 2, 33, 44, 55], key=lambda x: abs(x))
print(v3)
>>输出结果:2

3.2.2 max:最大值

v1 = max(11, 2, 3, 4, 5, 56)
print(v1)
>>输出结果:56
v2 = max([11, 22, 33, 44, 55])
print(v2)
>>输出结果:55
v3 = max([-11, 22, 33, 44, 55], key=lambda x: x * 10)
print(v3)
>>输出结果:55

3.2.3 all:是否全为True

v1 = all([11,22,44,""])
>>输出结果:False

3.2.4 any:是否存在True

v2 = any([11,22,44,""])
>>输出结果:True

3.3 第3组(3个)

3.3.1 bin:十进制转二进制

3.3.2 oct:十进制转八进制

3.3.3 hex:十进制转十六进制

3.4 第4组(2个)

3.4.1 ord:获取字符对应的unicode码点(十进制)

v1 = ord("轩")
print(v1, hex(v1))
>>输出结果:36713 0x8f69

3.4.2 chr:根据码点(十进制)获取对应字符

v1 = chr(36713)
print(v1)
>>输出结果:轩

3.5 第5组(9个)

3.5.1 int整型

3.5.2 float浮点型

3.5.3 str字符串,unicode编码

3.5.4 bytes字节型,utf-8、gbk编码

v1 = "轩小陌"                    # str类型
v2 = v1.encode('utf-8')              # bytes类型
v3 = bytes(v1,encoding="utf-8")     # bytes类型
>>输出结果:
b'\xe8\xbd\xa9\xe5\xb0\x8f\xe9\x99\x8c'
b'\xe8\xbd\xa9\xe5\xb0\x8f\xe9\x99\x8c'

3.5.5 bool布尔型

3.5.6 list列表

3.5.7 dict字典

3.5.8 tuple元组

3.5.9 set集合

3.6 第6组(13个)

3.6.1 len:获取长度

3.6.2 print:输出

3.6.3 input:输入

3.6.4 open:打开

3.6.5 type:获取数据类型

v1 = "123"
print(type(v1))
>>输出结果:<class 'str'>

3.6.6 range

3.6.7 enumerate

v1 = ["轩小陌", "alex", 'root']
for num, value in enumerate(v1, 1):print(num, value)
>>输出结果:
1 轩小陌
2 alex
3 root

3.6.8 id:获取内存地址

3.6.9 hash:获取哈希值

v1 = hash("轩小陌")
>>输出结果:5495014386555194810

3.6.10 help:帮助信息

help(random)

3.6.11 zip

v1 = [11, 22, 33, 44, 55, 66]
v2 = [55, 66, 77, 88]
v3 = [10, 20, 30, 40, 50]result = zip(v1, v2, v3)
for item in result:print(item)
>>输出结果:
(11, 55, 10)
(22, 66, 20)
(33, 77, 30)
(44, 88, 40)

3.6.12 callable:是否可执行(即后面是否可以加括号)

v1 = "轩小陌"
v2 = lambda x: x
def v3():passprint(callable(v1))
print(callable(v2))
print(callable(v3))
>>输出结果:
False
True
True

3.6.13 sorted:排序

v1 = sorted([11,22,33,44,55])
print(v1)
>>输出结果:
[11, 22, 33, 44, 55]v2 = sorted([11,22,33,44,55],reverse=True)
print(v2)
>>输出结果:
[55, 44, 33, 22, 11]
info = {"轩小陌": {'id': 10,'age': 119},"root": {'id': 20,'age': 29},"seven": {'id': 9,'age': 9},"admin": {'id': 11,'age': 139},
}
# 按info中每个值中的'id'的值进行排序:
result = sorted(info.items(), key=lambda x: x[1]['id'])
print(result)
>>输出结果:
[('seven', {'id': 9, 'age': 9}), ('轩小陌', {'id': 10, 'age': 119}), ('admin', {'id': 11, 'age': 139}), ('root', {'id': 20, 'age': 29})
]
data_list = ['1-5 编译器和解释器.mp4','1-17 今日作业.mp4','1-9 Python解释器种类.mp4','1-16 今日总结.mp4','1-2 课堂笔记的创建.mp4','1-15 Pycharm使用和破解(win系统).mp4','1-12 python解释器的安装(mac系统).mp4','1-13 python解释器的安装(win系统).mp4','1-8 Python介绍.mp4', '1-7 编程语言的分类.mp4','1-3 常见计算机基本概念.mp4','1-14 Pycharm使用和破解(mac系统).mp4','1-10 CPython解释器版本.mp4','1-1 今日概要.mp4','1-6 学习编程本质上的三件事.mp4','1-18 作业答案和讲解.mp4','1-4 编程语言.mp4','1-11 环境搭建说明.mp4'
]
result = sorted(data_list, key=lambda x: int(x.split(' ')[0].split("-")[-1]) )
print(result)
>>输出结果:
['1-1 今日概要.mp4', '1-2 课堂笔记的创建.mp4', '1-3 常见计算机基本概念.mp4', '1-4 编程语言.mp4', '1-5 编译器和解释器.mp4', '1-6 学习编程本质上的三件事.mp4', '1-7 编程语言的分类.mp4', '1-8 Python介绍.mp4', '1-9 Python解释器种类.mp4', '1-10 CPython解释器版本.mp4','1-11 环境搭建说明.mp4','1-12 python解释器的安装(mac系统).mp4', '1-13 python解释器的安装(win系统).mp4','1-14 Pycharm使用和破解(mac系统).mp4', '1-15 Pycharm使用和破解(win系统).mp4', '1-16 今日总结.mp4', '1-17 今日作业.mp4', '1-18 作业答案和讲解.mp4'
]

4.推导式

推导式是Python中提供了一个非常方便的功能,可以让我们通过一行代码实现创建list、dict、tuple、set 的同时初始化一些值。

如:创建一个列表,并在列表中初始化:0、1、2、3、4、5、6、7、8、9…299 整数元素:

# 常规方式:
data = []
for i in range(300):data.append(i)
# 列表推导式:
data = [i for i in range(300)]

4.1 列表推导式

num_list = [ i for i in range(10)]
print(num_list)
>>输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]num_list = [ [i,i] for i in range(10)]
print(num_list)
>>输出结果:
[[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9]]num_list = [ [i,i] for i in range(10) if i > 6 ]
print(num_list)
>>输出结果:
[[7, 7], [8, 8], [9, 9]]

4.2 集合推导式

num_set = { i for i in range(5)}
print(num_list)
>>输出结果:
{0, 1, 2, 3, 4}num_set = { (i,i,i) for i in range(5)}
print(num_list)
>>输出结果:
{(2, 2, 2), (0, 0, 0), (3, 3, 3), (4, 4, 4), (1, 1, 1)}num_set = { (i,i,i) for i in range(5) if i>3}
print(num_list)
>>输出结果:
{(4, 4, 4)}

4.3 字典推导式

num_dict = { i:i for i in range(10)}
print(num_dict)
>>输出结果:
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}num_dict = { i:(i,11) for i in range(10)}
print(num_dict)
>>输出结果:
{0: (0, 11), 1: (1, 11), 2: (2, 11), 3: (3, 11), 4: (4, 11)}num_dict = { i:(i,11) for i in range(10) if i>7}
print(num_dict)
>>输出结果:
{3: (3, 11), 4: (4, 11)}

4.4 元组推导式,不同于其他类型。

# 不会立即执行内部循环去生成数据,而是得到一个生成器。
data = (i for i in range(10))
print(data)
>>输出结果:
<generator object <genexpr> at 0x0000022978E475F0>
for item in data:print(item)
>>输出结果:0 1 2 3 4 5 6 7 8 9

推导式练习题

  1. 去除列表中每个元素的 .mp4后缀。

    data_list = ['1-5 编译器和解释器.mp4','1-17 今日作业.mp4','1-9 Python解释器种类.mp4','1-16 今日总结.mp4','1-2 课堂笔记的创建.mp4','1-15 Pycharm使用和破解(win系统).mp4','1-12 python解释器的安装(mac系统).mp4','1-13 python解释器的安装(win系统).mp4','1-8 Python介绍.mp4', '1-7 编程语言的分类.mp4','1-3 常见计算机基本概念.mp4','1-14 Pycharm使用和破解(mac系统).mp4','1-10 CPython解释器版本.mp4','1-1 今日概要.mp4','1-6 学习编程本质上的三件事.mp4','1-18 作业答案和讲解.mp4','1-4 编程语言.mp4','1-11 环境搭建说明.mp4'
    ]result = [ item.rsplit('.',1)[0] for item in data_list]
    
  2. 将字典中的元素按照 键-值格式化,并最终使用 ;连接起来。

    info = {"name":"轩小陌","email":"xxx@live.com","gender":"男",
    }result = ';'.join([f'{key}-{value}' for key, value in info.items()])
    
  3. 将字典按照键从小到大排序,然后在按照如下格式拼接起来。(微信支付API内部处理需求)

    info = {'sign_type': "MD5",'out_refund_no': "12323",'appid': 'wx55cca0b94f723dc7','mch_id': '1526049051','out_trade_no': "ffff",'nonce_str': "sdfdffd",'total_fee': 9901,'refund_fee': 10000
    }data = "&".join(["{}={}".format(key, value) for key, value in sorted(info.items(), key=lambda x: x[0])])
    print(data)
    >>输出结果:
    appid=wx55cca0b94f723dc7&mch_id=1526049051&nonce_str=sdfdffd&out_refund_no=12323&out_trade_no=ffff&refund_fee=10000&sign_type=MD5&total_fee=9901
    
  4. 看代码写结果

    def func():print(123)data_list = [func for i in range(10)]
    print(data_list)
    >>输出结果:
    [<function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>, <function func at 0x000001883795F280>]
    
  5. 看代码写结果

    def func(num):return num + 100data_list = [func(i) for i in range(10)]
    print(data_list)
    >>输出结果:
    [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
    
  6. 看代码写结果(执行出错,通过他可以让你更好的理解执行过程)

    def func(x):return x + idata_list = [func for i in range(10)]val = data_list[0](100)
    print(val)
    >>输出结果:
    报错,func中的i的作用域与列表推导式的作用域不同
    
  7. 看代码写结果(新浪微博面试题)

    data_list = [lambda x: x + i for i in range(10)]  # [函数,函数,函数]   i=9v1 = data_list[0](100)
    v2 = data_list[3](100)
    print(v1, v2)
    >>输出结果:
    109 109
    

4.5 推导式扩展

  1. 推导式支持嵌套

    data = []
    for i in range(10):for j in range(5):data.append( (i,j) )data = [ (i, j) for i in range(10) for j in range(5)]
    
    # 一副扑克牌poker_list = [ (color,num) for num in range(1,14) for color in ["红桃", "黑桃", "方片", "梅花"]]poker_list = [ [color, num] for num in range(1, 14) for color in ["红桃", "黑桃", "方片", "梅花"]]print(poker_list)
    
  2. 烧脑面试题

    def num():return [lambda x: i * x for i in range(4)]result = [m(2) for m in num()]
    print(result)
    >>输出结果:
    [6, 6, 6, 6]--> 过程分析:
    1. 执行num()并获取返回值:
    for i in range(4):lambda x: i * x
    >>返回结果:[lambda x: 3 * x,lambda x: 3 * x,lambda x: 3 * x,lambda x: 3 * x
    ]
    2. for循环返回的列表,并对每个元素传入参数2,执行lambda函数:
    for m in num():m(2)
    >>返回结果:[6, 6, 6, 6]
    
    def num():return (lambda x: i * x for i in range(4))result = [m(2) for m in num()]  # [0,2,4,6 ]
    print(result)--> 过程分析:
    1. 执行num()并获取返回值:
    >>返回结果:
    生成器对象:<generator object num.<locals>.<genexpr> at 0x0000029B931EFAC0>
    2. for循环返回的生成器对象,每循环一次,生成器内部也循环一次,生成一个lambda函数,接着传入参数2,执行lambda函数:
    >>返回结果:[0, 2, 4, 6]
    

今日总结

  1. 匿名函数,基于lambda表达式实现一行代码创建一个函数,一般用于编写简单的函数。
  2. 三元运算,用一行代码实现处理简单的条件判断和赋值。
  3. 生成器,函数中如果yield关键字
    • 生成器函数
    • 生成器对象
    • 执行生成器函数中的代码:
      • next
      • for循环(常用)
      • send
  4. 常用内置函数(34个)
  5. 推导式
    • 常规推导式
    • 推导式扩展

今日作业

  1. 看代码写结果

    v = [ lambda :x  for x in range(10)]
    print(v)
    print(v[0])
    print(v[0]())>>输出结果:
    [<function <listcomp>.<lambda> at 0x000001E781A0D1F0>, <function <listcomp>.<lambda> at 0x000001E781A0D280>, <function <listcomp>.<lambda> at 0x000001E781A0D310>, <function <listcomp>.<lambda> at 0x000001E781A0D3A0>, <function <listcomp>.<lambda> at 0x000001E781A0D430>, <function <listcomp>.<lambda> at 0x000001E781A0D4C0>, <function <listcomp>.<lambda> at 0x000001E781A0D550>, <function <listcomp>.<lambda> at 0x000001E781A0D5E0>, <function <listcomp>.<lambda> at 0x000001E781A0D670>, <function <listcomp>.<lambda> at 0x000001E781A0D700>
    ]
    <function <listcomp>.<lambda> at 0x000001E781A0D1F0>
    9
    
  2. 看代码写结果

    v = [i for i in range(10,0,-1) if i > 5]
    print(v)>>输出结果:
    [10, 9, 8, 7, 6]
    
  3. 看代码写结果

    data = [lambda x:x*i for i in range(10)]
    print(data)
    print(data[0](2))
    print(data[0](2) == data[8](2))>>输出结果:
    [<function <listcomp>.<lambda> at 0x0000012031D5D1F0>, <function <listcomp>.<lambda> at 0x0000012031D5D280>, <function <listcomp>.<lambda> at 0x0000012031D5D310>, <function <listcomp>.<lambda> at 0x0000012031D5D3A0>, <function <listcomp>.<lambda> at 0x0000012031D5D430>, <function <listcomp>.<lambda> at 0x0000012031D5D4C0>, <function <listcomp>.<lambda> at 0x0000012031D5D550>, <function <listcomp>.<lambda> at 0x0000012031D5D5E0>, <function <listcomp>.<lambda> at 0x0000012031D5D670>, <function <listcomp>.<lambda> at 0x0000012031D5D700>
    ]
    18
    True
    
  4. 请用列表推导式实现,踢出列表中的字符串,最终生成一个新的列表保存。

    data_list = [11,22,33,"alex",455,'eirc']
    # 请在[]中补充代码实现(提示:可以用type判断类型):
    new_data_list = [item for item in data_list if type(item) == int]
    
  5. 请用列表推导式实现,对data_list中的每个元素判断,如果是字符串类型,则计算长度作为元素放在新列表的元素中;如果是整型,则让其值+100 作为元素放在新的列表的元素中。

    data_list = [11,22,33,"alex",455,'eirc']
    # 请在[]中补充代码实现(提示:可以基于三元运算实现):
    new_data_list = [len(item) if type(item) == str else item + 100 for item in data_list]
    
  6. 请使用字典推导式实现,将如果列表构造成指定格式字典.

    data_list = [(1,'alex',19),(2,'老男',84),(3,'老女',73)
    ]# 请使用推导式将data_list构造生如下格式:
    """
    info_dict = {1:(1,'alex',19),2:(2,'老男',84),3:(3,'老女',73)
    }
    """
    info_dict = {item[0]: item for item in data_list}
    
  7. 有4个人玩扑克牌比大小,请对比字典中每个人的牌的大小,并输入优胜者的姓名(值大的胜利,不必考虑A)。

    player = {"轩小陌":["红桃",10],"alex":["红桃",8],'eric':["黑桃",3],'killy':["梅花",12],
    }winner = sorted(player.items(),key=lambda x: x[1][1])[-1][0]
    print(winner)
    >>输出结果:
    killy
    
  8. 尽量多的列举你记得的内置函数?

    abs,pow,sum,divmod,round,min,max,all,any,bin,oct,hex,ord,chr,int,float,str,bytes,bool,list,dict,tuple,set,len,print,input,open,type,range,enumerate,id,hash,help,zip,callable,sorted...
    
  9. 请编写一个生成器函数实现生成n个斐波那契数列的值。

    • 什么是斐波那契数列?

      前两个数相加的结果,就是下一个数。
      1 1 2 3 5 8 13 21 34 55 ...
      
    • 代码结构示例,请在此基础上补充代码实现。

      def fib(max_count):first = 1second = 0counter = 0while counter < max_count:data = first + secondfirst = secondsecond = datayield datacounter += 1count = input("请输入要生成斐波那契数列的个数:")
      count = int(count)
      fib_generator = fib(count)
      for num in fib_generator:print(num)
      

轩小陌的Python笔记-day13 匿名函数、生成器、内置函数、推导式相关推荐

  1. 轩小陌的Python笔记-day06 数据类型

    day06 数据类型(中) 常见的数据类型: int,整数类型(整形) bool,布尔类型 str,字符串类型 list,列表类型 tuple,元组类型 dict,字典类型 set,集合类型 floa ...

  2. 轩小陌的Python笔记-day16 模块二总结

    day16 阶段总结 课程目标:对第二模块 "函数和模块" 阶段的知识点进行总结. 课程概要: 知识补充 阶段总结(思维导图) 1. 知识补充 1.1 nolocal关键字 在之前 ...

  3. 轩小陌的Python笔记-day25 MySQL入门

    第四模块 MySQL数据库 从今天开始将进入第四模块的学习,这个模块就是给大家讲解MySQL数据库. 以前,在开发程序时,我们会把很多的数据和信息存储到某个文件夹中的文件中,例如:user.txt . ...

  4. 轩小陌的Python笔记-day08 模块一总结

    day08 阶段总结和考试题 课程目标:对第一模块 "Python基础" 阶段的知识点进行总结,更好地掌握此模块的相关知识. 课程概要: 代码规范 知识补充 阶段总结(思维导图) ...

  5. 轩小陌的Python笔记-day28 索引、函数及存储过程

    day28 索引和函数及存储过程 课程目标:了解 MySQL 中索引.函数.存储过程.函数.触发器.视图等知识点. 课程概要: 索引 函数 存储过程 视图 触发器 1. 索引 在数据库中索引最核心的作 ...

  6. 轩小陌的Python笔记-day26 必备SQL语句、表关系及授权

    day26 必备SQL和表关系及授权 课程目标:掌握开发中最常见的SQL语句和表关系及授权相关知识点. 课程概要: 必备SQL(8个必备) 表关系 授权 1. 必备SQL语句 上一节讲解了最基础SQL ...

  7. 轩小陌的Python笔记-day14 自定义模块、第三方模块、内置模块(部分)

    day14 模块 课程目标:掌握Python中常用模块的使用方法. 今日概要: 自定义模块(包) 第三方模块 内置模块[1/2] 1. 自定义模块 1.1 模块和包 import hashlibdef ...

  8. 轩小陌的Python笔记-day05 数据类型

    day05 数据类型(上) 接下来的3篇的内容都是讲解数据类型的知识点,常见的数据类型: int,整数类型(整型) bool,布尔类型 str,字符串类型 list,列表类型 tuple,元组类型 d ...

  9. 轩小陌的Python笔记-day11 函数进阶

    day11 函数进阶 目标:掌握函数相关易错点 & 项目开发必备技能. 今日概要: 参数的补充 函数名到底是什么? 返回值和print,傻傻分不清楚. 函数的作用域 1.参数的补充 在函数基础 ...

最新文章

  1. 面试: String 五连杀 !你还满血吗 ?
  2. vivox21升级鸿蒙,vivo X21i相机规格再升级,加持AI成又一拍照神器
  3. 邮件服务器对接移动设备 企业邮箱随身邮
  4. 才博教育:AI口语学习平台上云
  5. 什么是股票的发行价和市价
  6. 表单单选多选项清除默认样式小技巧
  7. gradle构建_如何提高Gradle的构建速度?
  8. java读取excel的常用办法
  9. Oracle 调优确定存在问题的SQL
  10. Batch Normalization论文翻译——中文版
  11. 简单介绍使用 ssh 连接远程服务器运行图形界面程序
  12. 自编小程序,保持编程达人眼睛
  13. java编程水仙花数_Java 编程找出所有的水仙花数(水仙花数)。
  14. 英文XP如何正常显示中文
  15. java毕业设计彩票在线购买系统Mybatis+系统+数据库+调试部署
  16. AES原理的经典Flash
  17. 今天是Mozart--my favorite musician--的忌辰
  18. javascript仿电商App选择地址
  19. 钣金设计指南:折弯注意事项以及设计原理
  20. matlab3854芯片控制电路,高功率因数开关电源的研究与实现

热门文章

  1. MATLAB中实现argmax函数
  2. 双光耦开关电源电路图_剖析 “双断法”检修分立元件开关电源实例
  3. java计算机毕业设计流浪动物的救助管理平台源代码+数据库+系统+lw文档
  4. Kafka(Go)教程(十一)---Consumer Group Rebalance
  5. 基于PyQt5实现第二界面或弹出界面(子窗口)
  6. css实现鼠标触碰动态显示图片文本
  7. Windows系统下完全隐藏桌面窗口
  8. Docker基础(一)
  9. Kahn拓扑排序模板
  10. 全面介绍数砖开发 Delta Lake 的第一篇论文