一、深拷贝和浅拷贝
拷贝:将变量中的值复制一份,产生新的数据,返回新数据所对应的地址
浅拷贝:直接拷贝地址(切片和字典列表的copy方法是浅拷贝)
深拷贝:将地址对应的值拷贝,产生新的地址
浅拷贝图解:
深拷贝图解:
深拷贝.png
二、字典和列表的应用
字典和列表的嵌套调用,可以实现诸多的变换
my_class={'classname':'python1807',
'location':'科华北路162号',
'all_student':[{'name': '小李', 'age': 15, 'school': '清华'},
{'name': '小王', 'age': 18, 'school': '北大'},
{'name': '小张', 'age': 20, 'school': '浙大'},
{'name': '小赵', 'age': 23, 'school': '川大'}]}
#练习1:添加学生
name=input("请输入学生姓名:")
age=input("请输入学生年龄:")
school=input("请输入学生高校:")
student={'name':name,"age":age,"school":school}
my_class['all_student'].append(student)
#练习2:删除学生
index=0
while index<len(my_class['all_student']):
if int(my_class['all_student'][index]['age'])<20:
del my_class['all_student'][index]
continue #删除后不让index增加
index+=1
print(my_class)
#或者:
for item in my_class["all_student"].copy():
if item["age"]<20:
my_class["all_student"].remove(item)
print(my_class)
三、函数基础
包括函数的申明,函数的参数,函数的返回值
1.函数的申明
语法
def 函数名(参数列表):
函数体
a.def--关键字
b.函数名--标识符,不能是关键字,见名知义
c.()--固定样式
d.参数列表--形式参数,可以有多个也可以没有,从函数的外部想函数里面传值
写作步骤
1、确定函数的功能
2、根据功能确定函数名
3、确定参数
4、编写函数体
5、确定返回值
调用过程
1、回到函数申明的位置
2、用实参给形参赋值
3、执行函数体
4、返回返回值
5、回到函数调用位置,执行后续代码
def N_add(n):
sum=0
for i in range(0,n+1):
sum+=i
return sum
print(N_add(10))
2.函数的参数
函数的参数类型有以下几种:
1、必需参数:调用时的数量必须和声明时的一样。
2、关键字参数:函数调用使用关键字参数来确定传入的参数值
3、默认参数:如果没有传递参数,则会使用默认参数
4、不定长参数:参数的个数不确定
位置参数和关键字参数
def hello1(greeting,name):
str='{0},{1}'
print(str.format(greeting,name))
hello1("hello","James") #位置参数
hello1(name='Alice',greeting='hello') #关键字参数
默认参数
1、设置默认参数时,位置参数在前,默认参数在后,否则报错
2、定义默认参数要牢记:默认参数必须指向不可变对象
3、调用的时候位置参数必须赋值,但可以不给默认参数赋值
def hello2(name1,greeting="hello",name2='James Band'): #默认参数
str='{0},{1} and {2}'
print(str.format(greeting,name1,name2))
hello2('James')
hello2('James ',name2="James Washtion")
不定长参数
*param 以元组的形式收集参数
**param 以字典的形式收集参数
注意:同时含有*param和**param时,*param要放到**param的前面
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
calc(1, 3, 5, 7) #以元组的形式收集参数
nums=1,2,3,4,5
calc(*nums)#解包:将元组的元素分解成单个变量
def person(name, age, **param):
print('name:', name, 'age:', age, 'other:', param)
person('Jack',36,city='Hangzhou',job='Engineer')
other = {'city': 'Hangzhou', 'job': 'Engineer'}
person('Jack', 36, **other)#解包:将字典的键值对分解成单个变量
注意:*后面的位置参数在函数调用的时候必须指定参数名称
def person(name, age, *param,city="chengdu",job):
print('name:', name, 'age:', age, 'other:', param,"city",city,'job',job)
person('Jack', 36, '清华','硕士',city='Hangzhou', job='Engineer') #job必须指定参数名称
参数类型组合
不推荐采用组合形式的参数组合,可读性比较差
def print_something(x1,x2,*param1,**param2):
print(x1,x2,sep=',')
print(param1)
print(param2)
print_something(1,2,3,4,5,6,name='James',age='22')
'''
1,2
(3, 4, 5, 6)
{'name': 'James', 'age': '22'}
'''
3、函数的返回值
1、无return:返回值为None
2、有return:执行到return语句的时候,return后面的结果为返回值
什么时候需要函数有返回值?若函数功能产生新的数据,就将新的数据返回;若不产生新的数据,可返回值可以为None
4、函数的描述信息和类型提示
def function (param):
函数的描述信息 (''' ''')
函数体
参数列表中可以通过 “参数名:参数类型” 指定参数类型,也可以通过默认值来指定参数类型;参数列表中提示了参数类型后,代码可以进行提示
“->类型”可以提示返回值的类型
def string_find(alpha:str,string:str)->int:
'''
从string中找到alpha的个数
:param alpha: str
:param string: str
:return: int
'''
count=0
for x in string:
if alpha==x:count+=1
return count
网友评论