码迷,mamicode.com
首页 > 其他好文 > 详细

函数小结

时间:2019-09-25 15:52:57      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:方法   多个   二层   *args   打破   cti   有关   fun   ref   

函数的定义

def 函数名():
    pass

函数的三种定义方式

空函数

def func():
    pass

有参函数

def func(args):
    pass

无参函数

def func():
    pass

函数的调用

函数名()

函数的返回值

  1. return可以返回值
  2. return可以终止函数
  3. return可以返回多个值,用元组返回

函数的参数

形参

位置形参

从左到右依次接受位置实参

默认形参

具有默认值,必须放在位置实参后面

实参

位置实参

从左到右依次传值给位置实参

关键字实参

按照形参名传值,必须放在放在位置实参后面

可变长参数

*

*形参:接受多余的位置实参,用元组接受

*实参:打散可迭代对象,当作位置实参传给形参

**

**形参:接受多余的关键字实参,用字典接收

**实参:打散字典,当作关键字实参传给形参

def func(*args,**kwargs):  # 接收所有多余的值
    pass

函数对象

def func():
    pass

引用

f1 = func

容器类元素

lt = [func]

函数的返回值

def f2():
    return func

f3 = f2()

函数的参数

def f2(func):
    pass

f2(func)

函数嵌套

def f1():
    def f2():
        pass

名称空间和作用域

内置名称空间

内置函数

全局名称空间

除了内置和局部都是全局

局部名称空间

函数内部的

执行顺序

内置》全局》局部

搜索顺序

从当前开始 局部》全局》内置

全局作用域

全局的x和局部的x没有关系

局部作用域

局部1和局部2的x没有关系

global

nonlocal

可变数据类型会打破作用域关系

闭包函数

def a():
    x =10
    def b():
        print(x)
    return b

装饰器

  1. 本质就是函数
  2. 不修改源代码
  3. 不改变调用方式

二层装饰器

import time
def index():
    pass

def time_count(func):
    def wrapper(*args,**kwargs):
        start = time.time()
        res = func(*args,**kwargs)
        end = time.time()
        print(end - start)
        
        return res
    
    return wrapper

index = time_count(index)
index()  # wrapper()

两层装饰器模板

def deco(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return wrapper


@deco
def index():
    pass
        

三层装饰器

def sanceng(x):
    def deco(func):
        def wrapper(*args,**kwargs):
            res = func(*args,**kwargs)
            return res
        return wrapper
    return deco


@sanceng(x)
def index():
    pass
        

迭代器

可迭代对象

含有iter方法的(除了数字)

迭代器对象

含有iter和next的方法 (文件)

三元表达式

列表推导式

字典生成式

生成器表达式

g = [123,2,3,4]
print(next(g))  # g.__next__()

生成器

含有yield的函数

  1. 暂停函数,
  2. 一个next可以取一个yield的值

递归

函数调用函数本身:有退出条件

count = 0
def a():
    print(count)
    count +=1
    if count == 100:
        return
    a()

递归能做的事,绝大部分能用循环代替

匿名函数

lambda 参数:返回值

一般与max/min/filter/map/sorted/sum

内置函数

enumerate获取索引+值

面向过程编程

类似流水线

函数小结

标签:方法   多个   二层   *args   打破   cti   有关   fun   ref   

原文地址:https://www.cnblogs.com/wick2019/p/11584623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!