第1月3周3天

  1. 函数的初识
  2. 函数的返回值
  3. 函数的参数

readLines每个元素都是文件每一行+

扩展性

老师昨天讲了两道题,都涉及到了扩展性。列表套字典转变成字典套字典,使 内容方便查找。
其次就是用列表下标的查找元素的方法直接作为新元素的值。这样就限制了扩展性。

!!!error 文件w模式

是每次w模式源打开文件产生文件句柄才会清空,如果打开一次并且写多次不会每次写都清空,直到关闭文件。
!!!


list3 = [
    {"name": "alex", "hobby": "抽烟"},
    {"name": "alex", "hobby": "喝酒"},
    {"name": "alex", "hobby": "烫头"},
    {"name": "alex", "hobby": "Massage"},
    {"name": "wusir", "hobby": "喊麦"},
    {"name": "wusir", "hobby": "街舞"},
]
list4 = [
    {"name": "alex", "hobby_list": ["抽烟", "喝酒", "烫头", "Massage"]},
    {"name": "wusir", "hobby_list": ["喊麦", "街舞"]},
]
将list3 这种数据类型转化成list4类型,你写的代码必须支持可拓展,
比如list3 数据在加一个这样的字典{"name": "wusir", "hobby": "溜达"},	你的list4{"name": "wusir", "hobby_list": ["喊麦", "街舞", "溜达"],
或者list3增加一个字典{"name": "太白", "hobby": "开车"},
你的list4{"name": "太白", "hobby_list": ["开车"],无论按照要求加多少数据,你的代码都可以转化.如果不支持拓展,则4分,支持拓展则8分.
ll = []
l_list = []
with open("a2",encoding="utf-8",mode="r") as f1:
  for line in f1:
    line_list = line.strip().split()
    dic = {}
    for i in line_list:
        a,b = i.strip().split(":")
        dic.setfault(a,b)
    ll.append(dic)

拓展型

"拓展列"
name_list = ["name","price","amount","year","备注"]
l1 = []
with open("a",encoding="utf-8") as f1:
	for line in f1:
		if line.strip():
			line_list = line.strip().split()
			dic = {}
			for index in range(len(name_list)):
				dic[name_list[index]] = line_list[index]
			l1.append(dic)
print(l1)
"去重复项,并且组合不同项"
dic = {}
for  i in list3:
  if i["name"] in dic: # 直接获取键会报错所以要用in
      if not i["hobby"] in dic[i["name"]]["hobby_list"]:
        dic[i["name"]]["hobby_list"].append(i["hobby"])
  else:
    dic.setdefault(i["name"],{"name":i["name"],"hobby_list":[i["hobby"],]})
print(list(dic.values()))
第二种方法:
  ret = []
for i in user_list:
    for j in ret:
        if i["name"] == j["name"]:
            if i["hobby"] not in j["hobby_list"]:
                j["hobby_list"].append(i["hobby"])
            break
    else:
        ret.append({"name": i["name"], "hobby_list": [i["hobby"], ]})
print(ret)
第三种方法:
  d = {}
for i in user_list:
    if i["name"] in d:
        if i["hobby"] not in d[i["name"]]:
            d[i["name"]].append(i["hobby"])
    else:
        d.setdefault(i["name"],[i["hobby"],])
u_list =["name","hobby_list"]
list4 = []
for i in d:
    dict = {"name":i,"hobby_list":d[i]}
    list4.append(dict)
print(list4)
  

函数

面向过程式编程 linux源码,只针对现有的需求。
如果需求与需求之间有相同性 面向过程需要重新写。

函数优点:
减少代码重复率
增强代码的阅读性

函数是什么?
封装功能

def func1():
  a = b
  b = 2
  c = a + b
  d = 'alex'
  e = [1,2,3]
  return c,d,e
ret = func1()
print(ret,type(ret))

def len():
  s = 'sfsfslfjsljsfjl'
  
  count = 0
  for i  in s :
    count += 1

函数的传参:

实参

形参

位置参数

三元运算只针对简单的 if else 结构

关键字传参 可以不按照顺序,但必须一一对应

def func1(x,y):
  return x+y
print(func1(y=100,x=99))

混合传参 关键字参数一定要在位置参数后,默认参数归于关键字参数。变长位置参数放在,位置参数最后。变长关键字参数放在关键字参数最后。

def func1(a,b,n,x,y)

形参角度

位置参数 :按照顺序一一对应
默认参数 :给其传值,将原默认参数覆盖掉,不传值。
有些值不经常变,经常使用的值就使用。

def namelist(name,sex='男'):
  with open('namelist',encoding='utf-8',mode='a') as f1:
    f1.write('{}|{}
'.format(name,ssex))
while 1:
  name,sex = input('').strip().replace(',',',').split(',')
  if name.upper() == 'Q':break
  namelist(name,sex if sex.strip() else None)

默认参数陷阱

默认参数为可变的数据类型,它始终使用一个。

原文地址:https://www.cnblogs.com/yonghuierming/p/9507673.html