python基础(四):函数基础

python函数

1.定义:高可用的模块性重复代码

内置函数,自定义函数

定义函数:

def function(arg1,arg2): # def关键字, function 自定义函数名
    return 

2.参数:参数的传递分为值传递和引用传递

  • 在Python中,strings,tuples,和numbers是不可更改的对象,是值传递,而list,dict则是可以修改的对象,是引用传递;

  • 由于python不是强类型语言,参数没有类型,不做类型检查,不支持重载,不会区分参数名字和个数;多个同名函数时,后一个会覆盖前一个位置参数和关键字参数;

def funA(x,y,z):
    print x,y,z

funA(2018,'你好','我叶良辰表示不服')
funA(z="我叶良辰来了", x=2010, y='你们好')
  • 参数分为三种:必备参数、关键字参数、缺省参数:

    1. 必备参数:必须要有的参数
    2. 关键字参数:指定参数进行赋值,这样可以不用考虑顺序
    3. 缺省参数:参数已经有默认值了,这个时候如果不传值就使用默认值
  • 参数中还有不定长参数:*args接收为元组,**kwargs接收为字典

# 不定长参数:
def funC(x, y, z, *args, **kwargs):
    print x, y, z
    print args
    print kwargs

3.return

return是返回

4.作用域:全局变量,局部变量

使用global 在局部变量中声明,那么这个局部变量就变为使用外面的全局变量

lambda:python中的匿名函数

优点是简洁,性能好

c = lambda x:[i for i in x if i%2 == 0 ] # 生成器,就相当于定义了一个函数c

#不使用匿名函数
def cc(x):
    list1 = []
    for i in x:
        if i % 2 == 0:
            list1.append(i)
    return list1

利用lambda表达式实现了filter(),map(),reduce();

filter()用于过滤序列,过滤掉不符合条件的元素,

5.函数对象与闭包:使用函数里面的变量

#使用fun_a 中的y变量
def fun_a(x):
    y = 0
    def fun_b():
        ...
    return fun_b
ff = fun_a # ff是fun_a的别名
ff = fun_a() 

函数是对象,可以给函数增加属性:

6.装饰器:# 插入日志性能测试,事务处理,缓存,权限校验等拓展功能

装饰器固定写法:

def decorator1(arg):
    # 这个是装饰器函数
    def wrapper(a, b): # wrapper 英文意思是:包装纸
        # 装饰代码块
        arg(a,b)
        # 装饰代码块
    return wrapper

例子:记录某函数执行的总时间

#1.未进行记录时间的函数
def compute_time():
    print 'hello'
    # 在线程里面停止两秒
    time.sleep(2)
    print 'world'

未使用装饰器的记录时间方法是在开头和结尾加上记录时间

def compute_time1():
    start_time = time.time()
    print 'hello'
    time.sleep(2)
    print 'world'
    end_time = time.time()
    msecs = end_time - start_time
    print '时间差是:%d' %(msecs * 1000)

通过装饰器实现上面的记录时间写法:

def decorator1(arg):
    # 这个是装饰器函数
    def wrapper(a, b):
        # wrapper 英文意思是:包装纸
        startTime = time.time()
        arg(a,b)
        endTime = time.time()
        print '时间差是:', (endTime-startTime)*1000
    return wrapper


@decorator1
def fun(a, b):
    print 'hello ,ddd'
    time.sleep(1)
    print (a+b)

猜你喜欢

转载自blog.csdn.net/u010700066/article/details/80819105
今日推荐