首先预习一下前面的内容
普通参数,默认参数,可变参数*(列表,元组)关键字参数**(字典)
1 不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a
2 可变类型:变量赋值la=【1,2,3,4】后再赋值la【2】=5则是将list la的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
3 Strings,tuples(元组),numbers是不可更改的对象
List(列表),dict(字典)是可以修改的对象
形参(叫什么名字都可以)实参(有实际值得参数)
1变量作用域(使用范围)
全局变量和局部变量的作用域不同
生命周期不同:(函数结束了局部变量就结束了,全局变量存在较长因为作用域比较大)
1 全局变量:(在函数外面定义变量都可以使用,一般定义全局变量前面加g_(global),全局变量和局部变量的作用域不同)
2 局部变量:(在函数里面定义变量只有该函数可以使用,当全局变量和局部变量同名时,局部变量优先)
如果要在局部变量里改变全局变量的值需要打上global (全局变量的名字)然后重新赋值 例如global g(告诉程序这里是一个全局变量)
2 匿名函数:(用lamdba表示,一行完成)
例如:
Aum=Lambda arg1,arg2:arg1+arg2;(这是匿名函数写法)
Aum=def xxx(arg1,arg2) (这是普通函数的写法)
arg1+arg2
sum=lambda rag1,arg2:arg1+arg2;
Print(sum(10,20))
filter(过滤)例如:
foo=【2,18,22,9,17,24,8,12,27】
filter(lamdba x:x%3==0,foo)(表示剩下的是foo列表中能被3整除的数字其中x代表foo列表中的每一个元素,输出结果的时候需要遍历这个新产生的列表才行不能直接print)
map(lambda里面怎么写就得到什么结果):例如
map(lamdba x:x*2+10,foo)(表示foo列表中的每一个数字*2加10)
reduce(一直相加或者别的运算)例如:
(lamdba x,y:x+y,foo)(表示将foo列表中的数字一直相加)(如果想用这个函数要导入from functools imprt reduce)
filter,map,reduce(三个重要的大数据用到的函数)
map案例:
map(lambda x:x%2,range(7))(表示生成一个0-6的列表然后每一个和2取余)
sum(求和)但没有求积的函数,请利用reduce()来求积
2 sorted(排序)
python内置的 sorted()函数可对列表和字典进行排序
例如 :
sorted(【36,5,12,9,21】)
经过sorted排序之后就成了【5,9,12,21,36】
如果倒叙排列例如:
Abc=【1,2,4,5,6,8,4,5】
Print(Sorted(abc,reverse=Ture))(这样abc这个列表就是倒叙排列)
字典排序例如:
abc={1:2,2:3,3:4}
按照键进行排序就是
Print(sorted(abc))(这样的结果就是1.2.3按照键进行排序不显示值)
按照值进行排序就是:
Print(sorted(abc.values()))(这样的结果就是2.3.4按照值进行排序)
Sorted后面可以加上lamdba条件前面加上key=
sorted()是一个高阶函数,它可以接受一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素例如x,y,如果x应该排在y的前面,返回-1,如果x应该排在y的后面,返回1。如果x和y相等,返回0.
因此,如果我们要实现倒叙排列,只需要编写一个reversed-cmp函数
Reversed-cmp(比较规则)
3 sort排序
Sort()排序方法
abc.sort()是对原有列表进行排序改变原来列表的顺序,无返回值
print(abc)就是改变后的列表
sorted()排序方法
排序时不影响原数据,产生新的排序数据
Print(sorted(abc))排序后的结果
Print(abc)还是原来的结果
Sort语法是列表名.sort()(sort没有返回值不能直接输出)
sorted语法是 sorted(列表名)(sorted有返回值可以直接输出)
4 随机数:
使用random随机数之前需要导入 import random
1 random.choice(range(1,34))随机取1-33之间的1个随机数可能重复
2 random。choices(range(1,34),k=6,whight=range(1,34))可以产生6个,但有可能重复
3 random.sample(range(1,34),6)随机取6个,不重复,得到一个列表,但是没有排序
5迭代器和生成器
1 迭代器协议
迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问直到所有的元素都被访问一遍后结束。
2 迭代器协议:对象需要要提供next()方法,他要么返回下一个对象,要么引起一个stoplteration异常
3 可迭代对象,实现了迭代器协议的对象
4 for,max,min,sum等使用迭代器协议访问对象
构建迭代器的时候以一种延迟计算方式返回元素,这正是它的优点。比如列表含有一千万个整数,需要占超过400m的空间,迭代器只需要字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用next方法时候才返回该元素,本质上for循环就是不断地调用迭代器next方法。
练习作业:
输入:[2, 4, 5, 7, 12]
输出:2*4*5*7*12的结果
foo=[2,4,5,7,12]
from functools import reduce
a=reduce(lambda x,y:x*y,foo)
print(a)
最终结果:3360