元祖不可以改变;列表可变,列表用[]元祖用(),字典和列表都用{}
集合:无序
元祖:有序
列表:有序
字典:无序
数字,元祖,字符串是不可以修改的
对比下列两个程序的差异
全局变量对于可变元素可以不声明修改
name=[‘linnan‘,‘syh‘]
def change():
name.append("mm")
change()
print(name)
********
name=‘linna‘
def change():
// global name如不声明该变量,则会报错
name+=‘ss‘
print(name)
change()
print(name)
全局变量名字大写,局部变量名小写
name = "Alex"
3 def change_name():
4 name = "Alex2"
5
6 def change_name2():
7 name = "Alex3"
8 print("第3层打印",name)
9
10 change_name2() #调用内层函数
11 print("第2层打印",name)
12
13
14 change_name()
15 print("最外层打印",name)
例一:
name=‘alex‘
def foo():
name=‘lhf‘
def bar():
print(name)
return bar
func=foo()
func()
//打印foo的内存地址空间,函数的名字在不带小括号时表示的是函数的内存地址
//foo就是函数的内存地址
//加上小括号就是执行函数
例二:
name=‘alex‘
def foo():
name=‘lhf‘
def bar():
name=‘wupeiqi‘
def tt():
print(name)
return tt
return bar
func=foo()
func()()
>>> max(1,2,‘3‘) #数值和字符串不能取最大值
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
max(1,2,‘3‘)
TypeError: unorderable types: str() > int()
>>> max(1,2,‘3‘,key = int) # 指定key为转换函数后,可以取最大值
‘3‘
>>> max((1,2),[1,1]) #元组和列表不能取最大值
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
max((1,2),[1,1])
TypeError: unorderable types: list() > tuple()
>>> max((1,2),[1,1],key = lambda x : x[1]) #指定key为返回序列索引1位置的元素后,可以取最大值
(1, 2)
自己写的小程序
dic={‘1‘:10,
‘2‘:100,
‘4‘:30}
dics=[]
def Max(dic):
for item in dic.values():
dics.append(item)
Max(dic)
print(max(dics))
中级技巧:key属性的使用
max((1,2),[1,1],key = lambda x : x[1]) #指定key为返回序列索引1位置的元素后,可以取最大值
(1, 2)
max处理字典时默认是处理键的
当key参数不为空时,就以key的函数对象为判断的标准。
如果我们想找出一组数中绝对值最大的数,就可以配合lamda先进行处理,再找出最大值
a = [-9, -8, 1, 3, -4, 6]
tmp = max(a, key=lambda x: abs(x))
print(tmp)
l=[3,2,100,999,213,1111,31121,333]
print(max(l))
dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}
print(max(dic))
print(dic[max(dic,key=lambda k:dic[k])])
11 高阶函数
满足俩个特性任意一个即为高阶函数
1.函数的传入参数是一个函数名
2.函数的返回值是一个函数名
dic={‘k1‘:10,
‘k2‘:100,
‘k3‘:30}
print(max(dic))
print( max(dic,key=lambda k:dic[k]) )
print(dic[max(dic,key=lambda k:dic[k])])
k3
k2
100