DAY11
- 1.容器型数据类型:列表、元组、字典、集合
- 列表:[元素1,元素2...],可变,有序,增删改查操作:+、*、>、<、>=、<=、==、!=、is、in、not in、len()、list();要求多个数据的意义相同,并且需要支持增删改查操作
- 元组:(元素1,元素2...)、(元素1,)、元素1,元素2...;不可变,有序;查:+、*、>、<、>=、<=、==、!=、is、in、not in、len()、tuple(),一般选择容器存储数据的时候不用元组。存储不可变数据的时候才用
- 字典:{key 1:value1,key 2:value2...},键是不可变的,唯一的,值是任何类型的数据;可变,无序;增删改查操作:==、!=、is、in、not in、len()、dict();保存多个数据需要区分(意义/性质不同)
- 集合:{元素1,元素2...},无序,可变,所有元素不可变唯一;增删查:==、!=、is、in、not in、len()、set()、数学集合运算(|、&、-、^、>=、<=);集合遍历效率高;可用于数学集合运算操作、去重、提高程序效率
- 函数
- 声明
def func_name(parament):
function_body
# 函数声明时不会执行函数体
调用:函数(参数列表),注意:函数调用前必须声明过;调用过程:回到函数声明处,传参,执行函数体、确定返回值,回到调用函数处继续执行后续代码
参数:位置参数、关键字参数 保证位置参数在关键字参数前;参数默认值、类型说明、不定长参数 -- *args、**kwargs
返回值:获取函数调用表达式的值
匿名函数:lambda 参数列表:返回值
-
变量的作用域
- 全局变量:声明在函数或者类之外的变量是全局变量;global:在函数中声明全局变量
- 局部变量:声明在函数里的变量是局部变量;nonlocal:在局部的局部中去修改局部变量的值
-
函数作为变量
- python中声明函数就是声明一个类型为function的变量,函数名就是变量名;普通变量能做的函数都能做
def func1():
print('函数1')
pass
a = func1 # 将函数名作为变量给另一个变量赋值
a()
- 函数也可以作为容器的元素:[func1,func2...]
- 函数可以作为函数的参数(高阶函数),应用:sort函数
students = [
{'name': 'python', 'age': 18},
{'name': 'go', 'age': 20},
{'name': 'linux', 'age': 30},
{'name': 'php', 'age': 21}
]
def compare(item):
return item['age']
# students.sort(key=lambda item: item['age'])
students.sort(key=compare) # sort函数中有个参数key,这个参数要求传一个函数,并且函数有一个参数和一个返回值;参数就是序列中的元素,返回值就是排序比较的对象
print(students)
students = [
('aaa', 'python02'),
('bbb', 'python12'),
('ccc', 'python10')
]
# students.sort(key=lambda element: element[1], reverse=True)
students.sort(key=lambda element: element[1][-1])
print(students)
- 函数作为函数的返回值
def fun1():
def tmp(*num):
return sum(num)
return tmp
print(fun1()(1,2,3,4))
- 迭代器
- 什么是迭代器:python自带容器型数据类型,想要获取或者查看迭代器中的值,只能讲元素取出来,且取出来的元素在迭代器中不存在了,只能按顺序依次获取数据,不能跳过某一数据
- 迭代器中的元素:迭代器中的元素只能通过类型转换将其他容器转换成迭代器或者通过生成器生成。iter(iterable),所有序列都可以转换成迭代器,迭代器中元素可以是任何类型数据,直接打印迭代器不能获取所有元素
- 获取迭代器的元素:1.next(迭代器):获取迭代器最上层的数据,迭代器获取元素,不管以什么样的方式获取,获取后这个元素在迭代器中就不存在了
iter_str = iter('hello')
print(next(iter_str))
print(next(iter_str))
print(next(iter_str))
print(next(iter_str))
print(next(iter_str))
print(next(iter_str)) # StopIteration
for i in iter_str:
print(i)
- 生成器
- 什么是生成器:本质是迭代器,调用一个带有yield关键字的函数,就能得到一个生成器,yield只能写在函数体中,获取生成器不会执行函数体
- 生成器的元素:生成器获取元素的方式和迭代器一样,通过next和for循环。
- 生成器元素的个数:看执行完生成器对应函数会遇到几次yield
- 元素的值看yield后表达式的值
- 生成器产生数据的原理:当获取生成器元素时,会执行生成器对应的函数,从开始执行到yield关键字,并将yield后的数据作为元素返回,并记录结束位置,下次获取元素时,从上次暂停的位置接着往后执行,直到遇到下一个yield,再将yield后的数据返回,以此类推,直到函数结束,若使用next取数据时没有再遇到yield,就抛出StopIteration异常,若使用for循环则不会报错