内容导读
- 理论基础
- 理论实践
- 相关资料
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)