内容导读
- 理论基础
- 理论实践
- 相关资料
1.理论基础
1.1认识字典:
字典是python里的一种可变容器模型,且可存储任意类型对象,其他语言中可能会被称为“关联存储”或“关联数组”,最大的特点就是可以通过键快速取出值,先来看看它在python里长的什么样子。
d = {'key1' : 'value1', 'key2' : 'value2' }
像形如上面这样'key' : 'value' 使用冒号 : 分割的两个值被称为键值对, : 前面的称为键只能选取不可变的值(当然字符串以外也可以是整型),后面的称为值可以是python支持的所有数据类型的值;每个键值对之间使用逗号 , 分割,而被{}所包裹的键值对就是字典,(也可以理解为 键值对 的集合)。字母d就是一个字典对象(后面要考)。
1.2字典的使用方法:
我们这里就只讲一个get()方法(戳这里详细介绍),通过它我们可以使用键安全的取出值,当字典里没有我们要取的键时该方法会返回一个None,而不会引发KeyError错误。具体语法如下。
# 取出字典d中键为'key1'的值并存入变量m中(如果没有键'key1'则会返回一个None给m) m = d.get('key1') # 取出字典d中键为'key3'的值并存入变量m中(如果没有键'key3'则会返回逗号,后面的值给m) m = d.get('key3', '没有这个键哥们')
1.3函数方法与函数对象:
在python中使用def关键字来定义函数基本语法如下我就不多讲了(戳函数定义):
import math def case1(x1:float, y1:float, x2:float, y2:float)->float: ''' 简单实现一下求两点之间的距离 Args: x1(float):点1横坐标 y1(float):点1纵坐标 x2(float):点2横坐标 y2(float):点2纵坐标 Returns: float:两点间的距离 ''' print(f'函数case1,传入x1参数=={x1}==') print(f'函数case1,传入y1参数=={y1}==') print(f'函数case1,传入x2参数=={x2}==') print(f'函数case1,传入y2参数=={y2}==') return math.sqrt(((x1 - x2)**2 + (y1 - y2)**2)) # 调用函数 print(case1(x1=4, y1=5, x2=8, y2=2))
接下来我们引入方法与对象的基本概念,对于函数来说就是带不带()的关系,带()的是方法,不带的是对象(有没有觉得很水)。对于方法解释器只要碰到了就会去执行,并且方法只能将函数的运行结果赋值给变量,其函数本身是不能进行存储的,而对象却可以作为函数本身被存储(我个人感觉有点像c里面的指针)。来看下面示例。
我们使用变量temp来存储方法case1(),temp2来存储对象case1,并输出它们的值和类型。
temp = case1(x1=4, y1=5, x2=8, y2=2) print('temp的值和类型') print('值:' + str(temp) + '<-->' + '类型:' + str(type(temp))) temp2 = case1 print('temp2的值和类型') print('值:' + str(temp2) + '<-->' + '类型:' + str(type(temp2)))
运行结果
temp的值和类型 值:5.0<-->类型:<class 'float'> temp2的值和类型 值:<function case1 at 0x000002AE329804A0><-->类型:<class 'function'>
怎么样看出区别了吗(没有可是要吃栗子的哦),下面介绍一下怎么通过存储了对象temp2来调用函数,其实主要在temp2屁股后面加上()就行,来看示例。
temp2 = case1 print('temp2的值和类型') print('值:' + str(temp2) + '<-->' + '类型:' + str(type(temp2))) # 使用temp2来调用函数,记得将需要的参数加上 print(temp2(x1=4, y1=5, x2=8, y2=2))
运行结果
temp2的值和类型 值:<function case1 at 0x00000260758C04A0><-->类型:<class 'function'> 函数case1,传入x1参数==4== 函数case1,传入y1参数==5== 函数case1,传入x2参数==8== 函数case1,传入y2参数==2== 5.0
到这里我们就可以去构建复杂的映射关系了。
2.理论实践
''' # Author: 荣鑫宇 # Update: 2024-08-28 # Content: 以字典驱动的函数映射(实现switch语句的功能) # Version: 0.0.0 ''' def switch(item:str, string:str)->str: def case1(): print(f'函数case1,传入参数=={string}==') return string + '返回参数' def case2(): print(f'函数case2,传入参数=={string}==') return string + '返回参数' def case3(): print(f'函数case3,传入参数=={string}==') return string + '返回参数' # 字典映射注意,这里就写case1,不要写成'case1'/case1()/'case1()' dic = { 1:case1, 2:case2, 3:case3, } # 这里是简写 # return dic.get(int(item), lambda: print(f'--无效的函数:{item}--'))()#不要忘记屁股后面的()啊 # 使用字典.get()方法获取函数,如果不存在则返回默认函数 case_func = dic.get(int(item)) # 如果case_func不是None,调用它;否则执行默认行为 if case_func: return case_func() # 调用函数并返回结果 else: print(f'不存在--{item}函数--') # 默认行为 return None # 或者其他默认返回值 # 使用循环进行测试 while True: # switch(item=input('选则函数:'), string=input('需要传入的参数:')) print(switch(item=input('选则函数:'), string=input('需要传入的参数:')))
3.相关资料
Python 字典 get() 方法 (w3school.com.cn)
Python 字典(Dictionary) | 菜鸟教程 (runoob.com)