#005 - python函数

用python分析nginx访问日志文件:每个ip访问的次数

ips = {}        
lins = open(‘/var/log/nginx/access.log’).readlines();

for line in lines:
        ip = line.split(“str”)[0]
        if 7 <= len(ip) <= 15
                ips[ip] = ips.get(ip,0) + 1
print(ips)

4种函数:

全局函数:定义在模块中
局部函数:嵌套与其他函数中
lambda函数:表达式
方法:类中定义的函数,与特定数据类型关联的函数,并且只能与数据类型关联一起使用

函数:

def functionName(parameter):
    suite

def返回一个函数对象,被functionName引用,与bashell函数不同

变量名引用分三个作用域进行:首先是本地(local),之后是函数内(function locals),接着是全局(global),最后是内置(built-in)
法则:作用域越小,优先级越高

内嵌函数:
如果外层函数直接把内层函数使用return返回,则调用外层函数时赋值的变量名引用的是一个内层函数对象,且此内层函数能够记忆其内部引用的外层函数的变量,这种行为叫做工厂函数、也叫闭合函数。

>>>def maker(N):
         def action(X):
             return X ** N
         return action

>>>f = maker(2)
>>>f(3)
>>>9

有两种方式避免可变参数被函数修改

  1. 直接传递可变对象的副本:testFunc( A,B[:] )
  2. 在函数内部创建可变参数的副本:B=B[ : ]

参数匹配模型:

  1. 位置:从左而右
  2. 关键字参数:”name = value” ,明确指明哪一个参数传递哪一个值
  3. 默认值:定义函数时直接给变量一个默认值 “name = value”

语法:

函数:
    def func(name) : 
    def fucn(name=value)    默认参数值
    def func(*name)            匹配并收集(在元组中)所有包含位置的参数
    def func(**name)            匹配并收集(在字典中)所有包含位置的参数
    def func(*args,name)    参数必须在调用中按关键字传递

调用者:
    func(value)                         
    func(name=value)
    func(*sequence) : 元组解包对位传送
    func(**dic)   :        字典解包对位传送    

    可以混合使用 func( a, *a )

lambda运算符:

lambda args:expression
首要用途:返回一个函数对象,
 >>> def testFunc(x,y,z) : return x + y + z
 >>>testFunc(4,5,6)
 15

 >>> f = lambda x,y,z : x + y + z
 >>> f(4,5,6)
 15

生成器:返回一个生成器对象,它可用于迭代生成结果,而非一次返回所有结果,对内存非常友好,不占太多内存

obj1  = ( expression for iter_var in iterable )
obj2  = ( expression for iter_var in iterable if condition )    
    调用:    obj1__next__()

生成器只适用一次,不支持列表类型的操作,如append,pop,但可以转换为列表 l1 = list(obj1)

函数正常要用renturn语句,执行返回; 也可以使用yield,但此时对函数的调用,返回的是一个生成器对象,而非函数执行结果;
yield :

    def genNum(n):
        x = 0
        while x <= n:
            x+=1
            yield x

>>>g1 = genNum(10)  :   genNum函数返回生成器对象
>>>g1.__next__()

面向过程:自己去做
面向对象:叫别人去做

猜你喜欢

转载自blog.csdn.net/aarron_dl/article/details/80199265
005