零基础 学 python开发 (Genius套餐A) 二十五

夜光序言:

 

 

 

对自己承诺:我要强大到任何事情都无法破坏我内心的平和……

 

 

 

 

 

零基础 学 python开发 (Genius套餐A) 二十五

正文:

 

4.6 字典与函数 
4.6.1 目标 


Python 的数据类型是非常灵活的,字典是非常常用的一种类型,字典可以作为函数参数,函数也可以返回一个字典。

 

目标是设计一个程序存储省份与其所辖城市的信息,实现查询功能,掌握字典再函数中的应用。

 

 



4.6.2 字典与函数 
1、字段作为函数参数 


字典作为函数参数,如果在函数中改变了字典,那么调用处的字典也同时被改变!也就是说调用处的实际参数与函数的形式参数是同一个变量, 这一点与普通的整数、浮点数、字符串变量不同。

 

 



例 4-6-1:字典作为函数参数 

 


def fun(dict):
 dict["name"]="aaa"
 print("inside:",dict)
 
dict={"name":"xxx","age":30};
print("before",dict)
fun(dict)
print("after",dict);


结果:
before {'name': 'xxx', 'age': 30}
inside: {'name': 'aaa', 'age': 30}
after {'name': 'aaa', 'age': 30}
由此可见,dict 在函数中变化后,在主程序中也变化了。

 

 



2、函数返回字典 


字典可以作为函数返回值返回。


例 4-6-2:字典作为函数返回值 

 


def fun():
 dict={}
 dict["name"]="aaa"
 dict["age"]=20
 dict["gender"]="male"
 return dict
def show(dict):
 keys=dict.keys()
 for key in keys:
 print(key,dict[key])
 
dict=fun()
print(dict)
show(dict)
结果:
{'name': 'aaa', 'age': 20, 'gender': 'male'}
name aaa
age 20
gender male

 

 



4.6.3 字典与字典参数 

 


Python 中除了用"*"表示的元组可变参数外,还有一种是"**"表示的字典可变参数,一般标识为**kargs,这种 kargs 在函数中是一个字典,在调用时实际参数按 key=value 的键值对方式提供参数。

 


例 4-6-3:具有字典可变参数的函数 


def fun(x,y=2,**kargs):
 print(x,y)
 print(kargs)
fun(1,2)
fun(1,2,z=3)
fun(1,2,a=3,b="demo")
fun(x=1,y=2,z=3)
fun(y=1,x=2,z=5,s="demo")
fun(x=1,z=3)


结果:
1 2
{}
1 2
{'z': 3}
1 2
{'a': 3, 'b': 'demo'}
1 2
{'z': 3}
2 1
{'z': 5, 's': 'demo'}
1 2
{'z': 3}
由此可见在调用时 fun(1,2,a=3,b="demo")使得 kargs={'a': 3, 'b': 'demo'}变成一个字典。
注意如果函数有*args 及**kargs 参数同时存在,那么*args 必须放在**kargs 参数前面,即函数最后两个参数是*args,**kargs。

 

 



例 4-6-4:具有元组可变参数与字典可变参数的函数 


def fun(x,y=2,*args,**kargs):
 print(x,y)
 print(args)
 print(kargs)
fun(1,2)
fun(1,2,3,4)
fun(1,2,3,4,z=5,s="demo")
结果:
1 2
()
{}
1 2
(3, 4)
{}
1 2
(3, 4)
{'z': 5, 's': 'demo'}
由于*args 的参数时位置参数,因此有*args 出现时,*args 前面的函数参数在调用时不能
以关键字参数的方式出现,只能以位置参数的方式出现,例如下列是错误的调用:
fun(x=1,y=2,3,4)

 

 



4.6.4 【案例】字典存储省份与城市 


1、案例描述 
设计一个程序存储省份与其所辖城市的信息,实现查询功能。
 
2、案例分析 
设计字典 provinces 如下:
provinces={"广东":["广州","深圳"],"四川":["成都", "内江", "乐山"]}
字典 provinces 的 keys 是各个省的名称,一个省的值时一个列表,是它下辖的各个城市。
3、案例代码 
 

#provinces 是全局的变量
provinces={}
def append(province,cities):
 global provinces
 if province not in provinces.keys():
 provinces[province]=cities
 else:
 print(province+"已经存在")
def show():
 for p in provinces.keys():
 print(p,provinces[p])
def seekProvince(province):
 if province in provinces.keys():
 print(province,end=":")
 for c in provinces[province]:
 print(c,end=" ")
 print()
 else:
 print("没有这个省份")
def seekCity(city):
 for p in provinces.keys():
 if city in provinces[p]:
 print(city+"属于"+p+"省")
 return
 print("没有这个城市")
append("广东",["广州","深圳"])
append("四川",["成都", "内江", "乐山"])
append("贵州",["贵阳","六盘水","兴义"])
show()
seekProvince("四川")
seekCity("六盘水")
程序结果:
广东 ['广州', '深圳']
四川 ['成都', '内江', '乐山']
贵州 ['贵阳', '六盘水', '兴义']
四川:成都 内江 乐山
六盘水属于贵州省

 

上一篇:零基础 学 python开发 (Genius套餐A) 二十三


下一篇:[LeetCode] 1120. Maximum Average Subtree