函数

函数简介

1.为何用函数之不使用函数的问题
    组织结构不清晰
    代码冗余
    无法统一管理且维护难度大
2.函数分类:
    内置函数
    自定义函数
3.为何要定义函数
    函数即变量,变量必须先定义后使用,未定义而直接引用函数,就相当于在引用一个不存在的       变量名

#1 定义阶段
     def bar():
    print('懒蛋蛋')
def foo():
    bar()
    print('开始学习函数了')
#2 调用阶段
foo()
'''
懒蛋蛋
开始学习函数了
'''

4.函数的概念

  工具就具备某一种功能的物件,就是程序中的函数概念  功能

   事先准备工具的工程称为函数的定义  过程

   遇到特定的场景拿来就用称为函数的调用  拿来用
5.定义函数都干了哪些事?
    只检测语法,不执行代码
6.如何定义函数(函数名要能反映其意义)
    def ...

    基本格式:

def 函数名(arg1,arg2,arg3):
    '''注释'''
     函数体
    return 返回值

return的特性/函数的返回值 **

#return 的返回值没有类型限制
1> 只返回一次值 并且会终止函数 会把return后的值作为函数执行的返回结果
2> 没有return返回None,相当于 return None
3> 指定return 返回的值(1个),就返回该值
4> 指定return 返回多个值,逗号风格,默认返回元组
def func():
    print('return特性')
    #return 0 #返回 0
    #return 1,2,3 # (1,2,3) 多个值返回元组
    return [1,3],{'name':'alex'} #([1, 3], {'name': 'alex'}) 多个值返回元组
print(func())


def foo():
    print('==============>')
    return 123
    return 456
    print('==============>')
    print('==============>')
    print('==============>')
foo()
'''
打印结果:
==============>
'''
print(foo())
'''
==============>
'''
例子

什么时候该有?
    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
    通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有?
    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
    通常无参函数不需要有返回值

定义函数的三种形式

无参: 应用场景仅仅只是执行一些操作,比如与用户交互,打印
有参: 需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
空函数:设计代码结构
无参函数
def func():
    print('无参数函数')
    #return 0 #无参函数有没有return都可以
res=func()
print(res)
'''
无参数函数
None 没有return 返回 None,相当于return None
'''
View Code
有参函数
有参函数通常有个返回值

#有参函数的例子
#求最大值和最小值
#方式1
def my_max(x,y):
    if x>y:
        print(x)
    else:
        print(y)
my_max(1,2)
#定义了一个函数 并 函数名()执行了函数  函数体里有打印操作
'''
打印结果是 2
'''
print(my_max(1,2))
# 打印函数 会执行函数并且打印函数返回值
'''
2 函数的执行结果
None 函数的返回值 因为没有定义返回值 所以是None
'''
#方式2
def my_max(x,y):
    if x>y:
        return x
    else:
        return y
my_max(1,2)
#没有打印结果 因为定义的函数里就没定义执行的时候出打印结果
res=my_max(1,2)
print(res)
'''
打印结果:2  打印函数的执行才会出现函数的返回值
'''
求最大值和最小值

空函数

def foo():
    pass #代表什么也不干

函数的调用

1 先找到名字

2 根据名字调用代码

函数调用的三种形式

1 语句形式:foo()

2 表达式形式:3*len('hello')

4 当中另外一个函数的参数:range(len('hello'))

def my_max(x,y):
    if x>y:
        return x
    else:
        return y

my_max(1,2) #调用函数的语句形式
res=my_max(1,2)*10 #调用函数的表达式形式
print(res)

v=my_max(my_max(1,2),3) #当做另外一个函数的参数
print(v)
例子

函数的参数 ****

形参 -变量名

实参-变量值

# 形参: 在定义是定义函数阶段 在()内的参数 就是 x y 形式上的参数  不占用内存空间
def foo(x,y): # x=1 y=2
    print(x)
    print(y)

#实参: 在调用函数阶段 在()内的参数 就是1,2 实际的参数 占用内存空间
foo(1,2)

#形参即变量名,实参即变量值,函数调用则将值绑定到名字上,函数调用结束,解除绑定

参数的分类

位置参数

位置参数:按照从左到右的顺序依次定义的参数

  位置形参:按照从左到右的顺序依次定义的形参  定义阶段

    特性:必须被传值,多一个不行,少一个也不行

  位置实参:按照从左到右的顺序依次定义的实参  调用阶段

    特性:与形参按照位置一一对应

#位置参数
def foo(name,age):
    print(name)
    print(age)

foo('egon',3) #name='egon' age=3
foo(3,'egon') #name=3 age='egon' #位置换 对应的值换

关键字参数(实参)/关键字实参

关键字实参:指的是按照name=value的形式,指名道姓的给name传值

#关键字参数
def foo(name,age):
    print(name)
    print(age)

foo(name='egon',age=18)
foo(age=18,name='egon') #与位置无关 都一样
#########个人觉得 应该没人这么作死吧 不用费力看
#注意的问题
#1> 位置实参必须在关键字实参的前面
#2> 一定不要对同一个形参传多次值
#站在调用阶段  研究实参的变化  位置实参和关键字实参的混合体
def foo(name,age,sex):
    print(name)
    print(age)
    print(sex)
foo('egon',18,'male') #位置实参
foo(name='egon',sex='male',age=18,) #关键字实参
foo('egon',sex='male',age=18) #混合体实参

#问题1
foo(sex='male',age=18,'egon') #错误 位置实参必须在关键字实参的前面
#问题2
foo('egon',sex='male',age=18,name='egon') #错误 一定不要对同一个形参传多次值

 

默认参数

可变长参数

闭包函数

装饰器

迭代

生成器

协程函数+面向过程+递归+二分法

点我走起吧

匿名函数

有名参数

定义一个工具 以后重复后使用

def func(x,y,z=1):
    return x+y+z
func()

匿名函数lambda
1.没有名字
2.函数体自带return

lambda x,y,z=1:x+y+z

没有名字 参数:返回值  默认调用return 返回值
应用场景:应用于一次性场景 临时使用
应用:max,min,sorted,map,reduce,filter
关于匿名函数的使用方法 参考内置函数里 max,min,sorted,map,reduce,filter的讲解

内置函数

想知道点我吧

原文地址:https://www.cnblogs.com/lazyball/p/7286579.html