Day 14 匿名函数 内置函数 面向对象编程

news/2024/11/14 12:23:02/文章来源:https://www.cnblogs.com/chsun12/p/18545727

目录
  • 0 上节课复习
    • 0.1 迭代器
      • 0.1.1 可迭代对象
      • 0.1.2 迭代器对象
      • 0.1.3 for循环原理
    • 0.2 三元表达式
    • 0.3 列表推导式
    • 0.4 字典生成器
    • 0.5 生成器
      • 0.5.1 生成器表达式
    • 0.6 递归
    • 0.7 二分法
  • 1 匿名函数
    • 1.1 有名函数
    • 1.2 匿名函数
  • 2 内置函数
    • 2.1 掌握
    • 2.2 了解
  • 3 面向过程编程

0 上节课复习

0.1 迭代器

0.1.1 可迭代对象

拥有iter方法的对象

str / list / tuple / dict / set / file

0.1.2 迭代器对象

file

拥有iter和next方法的对象

  • 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象(文件是可迭代对象也是迭代器对象

0.1.3 for循环原理

for in list:把list生成可迭代对象,然后使用next方法取出一个个值,直到报错捕捉异常然后中断退出,所以for循环可以不基于索引值

0.2 三元表达式

成立时干嘛 if 条件 else 不成立干嘛

0.3 列表推导式

[ i for i in range(10)]

0.4 字典生成器

{ i: i for i in range(10)}

0.5 生成器

自定义的迭代器,函数内使用yield关键字

yield: 接受函数返回值,但是会继续运行下面的代码,使用yield关键字调用的函数变成生成器

return: 接受函数返回值,但会终止函数的运行,使用return关键字调用的函数就是一个普通的函数

0.5.1 生成器表达式

{i for i in range(10)}

生成器表达式生成的东西相当于老母鸡,需要的时候next拿出来

列表推导式就是一筐鸡蛋

0.6 递归

本质上就是函数调用本身,必须得有终止条件

0.7 二分法

lis = [i for i in range(10000)]
def deco(func):def wrapper(*args,**kwargs):res = func(*args,**kwargs)return resreturn wrapper@deco
def find_num(num):for i in lis:if i ==num:print('找到了')breakelse:print('没有被找到')
find_num(45678)

1 匿名函数

1.1 有名函数

有名字的函数。名字()调用

def mingzi():pass
mingzi()

1.2 匿名函数

没有名字的函数

lambda关键字定义,语法:

# lambda x,y(参数):x+y(代码)
f = lambda x,y:x+y   #(不可这样)

匿名函数也能调用,但是调用需要注意只能使用一次,匿名函数一般不单独使用,而是与max(),min(),map(),sorted(),filter()这些内置函数一起使用

max()  求最大值
min()  求最小值
sorted()  排序,默认从小到大,需要接受
map()   映射:
map(lambda name:f'{name}dsb',name_list) 
filter()  过滤
lis = ['sad dsb', 'dsadas dsb','sadsad']
res = filter(lambda x:x.endswith('dsb'),lis)
print(list(res))   # 输出:['sad dsb', 'dsadas dsb']
salary_dict = {'nick': 3000,'jason': 100000,'tank': 5000,'sean': 2000
}
salary_max = max(salary_dict,key = lambda name:salary_dict(name))
print(salary_max)

2 内置函数

2.1 掌握

# 1.bytes()
print('中文'.encode('utf-8'))
print(bytes('中文'.encode('utf-8')))# 2.chr()/ord()  ascill码对应关系
print(chr(98))  #输出b
print(ord('a'))    #输出97# 3.divmod(x,y) 整除  输出 x//y   x%y
print(divmod(10,3))   #(3, 1)# 4.enumerate()  获取索引和值
lis = ['a','b','c']
for i in enumerate(lis):print(i)  #输出(0, 'a')(1, 'b')(2, 'c')
for index,value in enumerate(lis):print(index,value)   #输出 0 a ;1 b ;2 c# 5.eval()  去掉字符串的引号,然后他是什么数据类型就是什么数据类型
lis = ' ["a","b","c"]'
print(lis)
print(type(lis))
print(eval(lis))
print(type(eval(lis)))# 6.hash()  可哈希不可变,不可哈希可变
print(hash(1))
# hash([1,2,3])  #list为可变,故不可哈希,会报错

2.2 了解

# 1.abs()  求绝对值
print(abs(-10))   # 10
# 2.all()  可迭代对象内元素全为真,则返回真,括号里只能有一个对象  类似于 and
print(all([1,2,3,4]))   #True
print(all([0,1,4,7]))   #Flase
# 3.any()  可迭代对象内元素有一个为真,则返回真,括号里只能有一个对象   类似于 or
print(any([0,0,0,0]))   #Flase
print(any([0,0,1,0]))   #True
# 4.bin/oct/hex  二进制,八进制,十六进制
print(bin(10))  # 0b1010
print(oct(10))  # 0o12
print(hex(10))  # 0xa
# 5.dir  列举出math的所有功能
import math
print(dir(math))
# 6.frozenset()  不可更改的集合
s = frozenset({1, 2, 3})
print(s)   #frozenset({1, 2, 3})
# 7. globals()/nonlocal()  查看全局名字;查看局部名字。# 8.pow(x,y,z)   (x**y)%z
print(pow(3, 2, 3))  # (3**2)%3
# 9.round()   四舍五入
print(round(3.5))  #4
# 10.sum() 求和
print(sum(range(100)))  #4950
# 11.__import__()  通过字符串导入模块。
m = __import__('time')
print(m.time()) 

3 面向过程编程

原材料(一堆塑料) \(\rightarrow\) 融化塑料 \(\rightarrow\) 通过模具做出一个个瓶子 \(\rightarrow\) 包装检测瓶子 \(\rightarrow\) 卖瓶子

面向过程编程:按照一定的顺序,顺序中的每一步都可以看成函数,这个函数的输入是上一个函数的输出

  • 优点:
    • 逻辑清晰,简单明了
    • 每个函数可以独立的写出来
  • 缺点:
    • 相互之间会有一定的联系,上一步中断了,下一步也中断了
    • 有一个功能改变了,其他的功能也要改变
    • 可扩展性差
def enter_username_pwd():username = input("请输入你的名字>>>").strip()pwd = input("请输入你的密码>>>").strip()return username, pwd
def register():username, pwd = enter_username_pwd()with open('test.txt', 'a',encoding = 'utf8') as fa:fa.write(f"{username}:{pwd}\n")def login():username, pwd = enter_username_pwd()with open('test.txt', 'r',encoding = 'utf8') as fr:for user in fr:user_list = user.strip().split(':')username_file = user_list[0]pwd_file = user_list[1]if username == username_file and pwd == pwd_file:print('登陆成功!')breakelse:print('登录失败')
fun_dict = {0:register,1:login,
}
print_message = '''
0:register
1:login
q:quit
'''
print(print_message)
while True:choice = input('请输入你需要的功能').strip()if choice == 'q':breakfun_dict[int(choice)]()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833364.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营 | 200.岛屿的数量

岛屿的数量题目链接:https://leetcode.cn/problems/number-of-islands/此题目要点:dfs和bfs都可以解决此题,但是使用dfs代码会更加的简洁首先对grid进行遍历,每一个节点都进行检查,判断是否是1(陆地) 如果是,则进行dfs深搜,并将所有搜到的岛屿节点全置为0,表示此块岛…

5倍提升工作效率,智能合同审查开源系统助力律师行业智能化

一、系统概述 在法律行业,律师和法务人员每天需要处理大量的法律文件和复杂的案件信息。然而,手工分析和关联文档信息既耗时,又容易导致遗漏和错误。为此,我们推出了一款专为法律行业打造的开源免费软件,利用关系抽取算法和深度学习技术,支持自动识别底稿文档中的当事人、…

神经网络架构参考:2-2 卷积篇

densenet 结构层名称 类型 输入大小 (H x W x C) 输出大小 (H x W x C) 核尺寸 步长 参数数量Initial Conv Conv2D 224 x 224 x 3 112 x 112 x 64 7 x 7 2 9,408Max Pooling MaxPool2D 112 x 112 x 64 56 x 56 x 64 3 x 3 2 0Dense Block 1 Composite 56 x 56 x 64 56 x 56 x 2…

数据库字段设置非空, phalcon创建数据验证不通过

在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。 开始遇到这问题时,想到两种解决方法: 一、改数据库字段,把NOT NULL改为可以为空。但该数据库还…

2024年11月中国数据库排行榜:OB连续四月居榜首,腾讯云TDSQL升第九

11月墨天轮排行榜解读新鲜出炉!榜单前五稳中求进,OceanBase连续四月居榜首,第六至十位竞争加剧,此外亦有部分产品焕发活力,一起来看更多排名情况与解读!11月墨天轮社区的中国数据库流行度排行榜已更新,本期共有226个数据库产品参与,相较于年初的292个数据库,产品阵容已…

cmu15545笔记-索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

cmu15545笔记:索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

cmu15545-索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

向量动态量化

本文介绍向量检索服务DashVector动态量化功能和作用。 背景介绍 量化(Quantization)是向量检索技术中一种常用的优化方法,通过一定程度的精度(召回率)损失,来换取性能的大幅度提升,以及内存占用(索引文件大小)大幅度降低。 向量检索服务DashVector支持向量的动态量化,…

从零到一构建并打包 React + TypeScript + Less组件库教程(一、项目初始化搭建+代码规范集成)

本系列涉及的内容如下:组件库基础搭建,react + ts + less 项目规范,包括但不限于 prettier、eslint、stylelint、husky、lint-staged、commitlint pnpm monorepo + turborepo 集成 gulp + webpack 构建 esm、cjs 和 umd storybook 文档集成此系列不包含发布 npm 和构建 CI 流…

分区Partition

理解Partition 向量检索服务DashVector的Collection具有分区(Partition)的能力,同一个Collection下的Doc可通过不同的Partition进行物理和逻辑上的分区。各种Doc操作(如插入Doc、检索Doc等。若指定Partition,则该操作将限定在该指定的Paritition内进行。通过合理的Partiti…

PGsql 大写字段名,flink目前不支持读取

flink1.20 连接 postgres_flink postgresql-CSDN博客[FLINK-23324] Postgres of JDBC Connector enable case-sensitive. - ASF JIRA