2019/08/29 python函数(05)

在这里插入图片描述在这里插入图片描述
访问几次在这里插入图片描述
现在有几个访问记录在这里插入图片描述
读模式打开文件,readlines把内容读出来放在fh,文件小可以,文件大了就危险了在这里插入图片描述在这里插入图片描述
可以使用迭代的方式遍历这个文件,字符串有个方法 split切分,指明切割字符是什么在这里插入图片描述在这里插入图片描述
切割使用空格当切分符,切分的结果生成一个新列表,再去第0个结果就是ip地址在这里插入图片描述
在原来的也一样,需要遍历,一个ip字节数最少大于7 1.1.1.1 最大不超过15个字节
ip地址当键,获得值以后+1
dict字典有个方法叫get,可以有两个参数,如果D字典有键是K 就确定D【k】的值,否则就用d
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
把这个写到文件里在这里插入图片描述
readlines把所有行读出来放到logs在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:都是实现代码重用,和结构化编程在这里插入图片描述
4种函数
lambda 是匿名函数,放在任何一个表达式
在这里插入图片描述
类似open,len,type
在这里插入图片描述在这里插入图片描述
定义函数,def 函数名(形参)
suite 结束
运行函数的只会def语句,把函数对象创建出来,只有调用的时候才会运行
函数在运行时只会创建对象,调用的时候才会运行

在这里插入图片描述在这里插入图片描述
在python调用函数在任何时候都需要后面+小括号()在这里插入图片描述
函数有作用域的概念,函数名也只是一个名称,
python有名称空间的概念,每一个的名称的查找都是在名称空间进行的,函数定义的位置,决定 了所处的名称空间的不同,本地变量和局部变量,局部变量只能在函数中使用
整个变量在哪个范围可用,就是名称空间的概念

在这里插入图片描述
python的每一个函数都定义了本地的作用域,而模块定义的是全局作用域

pyhton的每一个文件都是模块,在模块内有#!,doc,import,函数定义,类定义,任何单个文件,这个模块就会定义一个全局作用域,
类似import cpoy,cpoy会引入一个新的名称空间
在这里插入图片描述
比如import platform,platform也有很多名称可用,在当前的模块变量里,都是直接引用的在这里插入图片描述
假如定义了a=3,import m1,m1里面也有a。只能使用m1.a来引用,这样就需要m1有名称空间,当前模块也要有自己的名称空间,叫全局名称空间,其他模块需要加模块名来引用 在这里插入图片描述
当前的文件,称为全局名称空间,同时如果在里面定义函数,函数会引入一个新的名称空间,类似bash中的局部作用域,函数中还可以嵌套函数,var1=4嵌套var1=6,到底是多少,看在哪里引用,在这里插入图片描述在这里插入图片描述
全局作用域仅限于单个文件,不会跨文件的,如果跨文件,必须模块名.来引用
因为函数定义的时候函数不会运行,只有调用才会运行,调用运行时开始会形成新的作用域,直到调用结束在这里插入图片描述在这里插入图片描述
变量名有解析在这里插入图片描述
查找优先级是,local,enclosing function locals外层函数,global全局,built-in
作用范围越小,优先级越高
在这里插入图片描述
ips就是全局的,只要没在函数中定义,就是全局的在这里插入图片描述在这里插入图片描述
在这里插入图片描述
可用使用全局变量保存函数的状态信息在这里插入图片描述
只需要知道在pthon中函数可以嵌套,做返回值的时候,可以把整个函数返回在这里插入图片描述
maker函数内部嵌套action函数,return 把action返回
f=maker(2),return的时候这个函数运行
f引用action函数
f(3)向action(x)传递3
f3=3 的2次方
f4 4 的2次方
这种叫闭合函数,当函数可以把传递的值记录下来,多次调用

在这里插入图片描述在这里插入图片描述在这里插入图片描述
定义函数,
定义字符串变量
内部再定义函数,在f1中调用f2.然后再调用f1
在这里插入图片描述
f2再定义 test,print应该是内层的在这里插入图片描述
再定义函数,传递参数n,打印n 让n=456再print,等函数结束,再次调用在这里插入图片描述
调用l1,把l1传递给mylist,mylist相当于l1的结果
为什么两次不一样,是因为。a是123数值,是不可变对象,意味a始终指向123
在这里插入图片描述
a变量指向123,调用函数的时候,把a传递给n,n也指向123,n赋值456,就需要创建新的对象,然后n指向456,所以print的n时候是456,a指向是123在这里插入图片描述
对于可变对象就不一样了,l1指向[123,456],l1传递给mylist,,mylist指向统一对象,修改mylist,这个对象支持修改,就把123,改成hello了,不会创建新对象
所以不建议把可变对象传递给函数
在这里插入图片描述
不得不传递可以这么做,有两种方式在这里插入图片描述
表示传递B的副本而不是B的本身在这里插入图片描述在这里插入图片描述
3+10=13,x是列表,显示L也是13,原来改变了
在这里插入图片描述
这种方式就不会被改变
在这里插入图片描述在这里插入图片描述在这里插入图片描述
精确传递才能正常调用,对位传递,位置参数在这里插入图片描述在这里插入图片描述
在这里插入图片描述
上面的是位置参数,也可以指定形参传递给哪个值在这里插入图片描述在这里插入图片描述
传递的时候可以留空传递,有默认值的时候,带默认值的参数要放在后面,不带默认值放在前面a在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
可变参数,做位置参数在这里插入图片描述
当字典来用,做关键字参数在这里插入图片描述
定义有默认值的形参在这里插入图片描述在这里插入图片描述
解包,嵌套,传递到底怎么运行在这里插入图片描述在这里插入图片描述在这里插入图片描述
*如果使用两个星号 **在这里插入图片描述在这里插入图片描述
也可以定义的时候,具体的参数,传递的时候,传递的是带星号的值
有的是调用带星号,有的是参数带星号
在这里插入图片描述
也可以定义不使用星号,调用的时候加上星号,把你一单独参数解包进行传递在这里插入图片描述
**代表把这个字典转换成a=123,b=456,这叫关键字参数在这里插入图片描述
**两个元素传递给,f5 *解包以后参数还是不够,可以先传递参数,189,可以混合使用 在这里插入图片描述
一种是定义时用于收集参数的
一种是定义的时候,参数是固定的,传递时+号,组合数据类型以达到基于位置参数,或关键字参数解包传递的目的
在这里插入图片描述
函数可以接受其他函数当参数,就叫做高阶函数,函数 式编程就是基于高阶函数实现在这里插入图片描述
lambda是定义匿名函数的,既然没有明就不是语句,而是一个表达式,所以可以出现在任何表达式放的位置,在这里插入图片描述
、定义形参xyz,返回加起来的和
也可以使用lambda表示,xyz,lambda表达式返回的是一个函数对象,可以保存在名称上,来引用lambda函数
在这里插入图片描述
lambda函数调用起来有更好的玩法,定义两个参数,返回,后面(传递参数)在这里插入图片描述

生成器:就是一个表达式对象,它执行的计算机制与列表解析相同;但是列表解析会直接创建整个列表对象,而生成器则只返回一个生成器对象,它可用于迭代地生成结果,而非一次返回所有结果;
使用方法
(expression for Iter_var in Iterable)
(expression for Iter_var in Iterable If condition)

在这里插入图片描述
生成一个偶数列表,2到10000,一次步进2在这里插入图片描述
print提示你这是内存中的某个对象在这里插入图片描述
整个数据都在内存中放着在这里插入图片描述
列表可以重复使用,在内存里,生成器一次只生成一个
所以生成器表达式不会创建序列类型的对象
在这里插入图片描述
生成器只能按迭代方式生成值
所以所有的生成器对象不能进行索引,也不能执行任何常规的列表操作,列表可以append,追加值,pop弹出
生成器不能这么做
在这里插入图片描述
但是可以将生成器转换成列表在这里插入图片描述
现在就成列表了,18开始,因为16之前已经用过,只要曾经被调用,就不再有在这里插入图片描述
还可以自定义生成器
函数正常要使用return语句,执行返回:也可以使用yield:但此时对函数的调用,而非函数执行结果;
如果一个函数使用了yield,函数调用的时候,不会直接执行,而是返回一个生成器对象
yield语句:

**如果x从0开始,只要x<=n,就返回x的值,先看return返回的值,重新定义
return就是函数结束了,print会一直循环下去 **在这里插入图片描述在这里插入图片描述
正常方式的返回结果在这里插入图片描述在这里插入图片描述在这里插入图片描述
最后终止在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
每一次函数调用从头开始,不会记录上一次的结果,跟上一次没有任何关系在这里插入图片描述
yield只是暂时的调换在这里插入图片描述在这里插入图片描述
devisor除数,求x的平方根+1,并且取整
如何判断质数,除以平方根,从2到它的平方根内的所有数字
判断9是不是质数,从2到9的平凡跟之前,有没有哪个数字能被9整除,
10的平方跟是3.几,3.几+1=4. ,所以2-4,的数除以10,10/2=5.所以10不是质数
11,不能被2-4整除,就是质数
在这里插入图片描述
返回指定数字范围内的,所有素数列表在这里插入图片描述
指定100,就范围100以内的所有质数/(素数)列表在这里插入图片描述在这里插入图片描述
导入math库
math(函数库).sqrt是求平方根
===0代表非素数,return false
否则返回真
最后整个函数return ture
定义primes函数
范围包含y+1
is——prime判断j是否素数
yeild j
在这里插入图片描述
然后开始调用primes生成器在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
可以一次次调用,
在这里插入图片描述在这里插入图片描述在这里插入图片描述
直接遍历生成器是不可以的
在这里插入图片描述
可以用list强行转换成列表对象在这里插入图片描述在这里插入图片描述在这里插入图片描述
但是定义列表就不需要遍历生成器,生成器只是一次需要的时候,而不是i一下子遍历所有元素在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值