第十课 函数

第十课  函数

一.定义函数

def 函数名(参数1,参数2,...):
    """文档描述"""
    函数体
    return 值

def: 定义函数的关键字;
函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
"""文档描述""": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
函数体:由语句和表达式组成;
return 值:定义函数的返回值,return是可有可无的。

二. 函数的调用

函数的使用分为定义阶段与调用阶段,定义函数时只检测语法,不执行函数体代码,函数名加括号即函数调用,只有调用函数时才会执行函数体代码。

#定义阶段
def foo():
    print('in the foo')
    bar()

def bar():
    print('in the bar')

#调用阶段
foo()

三.函数的返回值
 使用关键字return

若需要将函数体代码执行的结果返回给调用者,则需要用到return。return后无值或直接省略return,则默认返回None,return的返回值无类型限制,且可以将多个返回值放到一个元组内。

四.形参和实参

>>>def Myfirstfunction(name):
       函数定义过程中的name是形式参数叫形参
       name只是一个形式,表示占据一个参数位置
>>>Myfirstfunction(‘小甲鱼’)
传递进来的小甲鱼叫做实参,因为他是具体的参数值


关键字实参:在调用函数时,实参可以是key=value的形式,称为关键字参数,凡是按照这种形式定义的实参,可以完全不按照从左到右的顺序定义,但仍能为指定的形参赋值
eg:
>>> register(sex='male',name='lili',age=18)
Name:lili Age:18 Sex:male
需要注意在调用函数时,实参也可以是按位置或按关键字的混合使用,/*但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值*/

默认形参:默认形参调用时,可以不传值,那么就是默认值,传值就覆盖默认值。
eg:
>>> def register(name,age,sex='male'): #默认sex的值为male
        print('Name:{} Age:{} Sex:{}'.format(name,age,sex))
 notes:
 默认参数必须在位置参数之后
 默认参数的值仅在函数定义阶段被赋值一次
 默认参数的值通常应设为不可变类型

五.变量的作用域
​ 在局部作用域查找名字时,起始位置是局部作用域,所以先查找局部名称空间,没有找到,再去全局作用域查找:先查找全局名称空间,没有找到,再查找内置名称空间,最后都没有找到就会抛出异常
x=100 #全局作用域的名字x
def foo():
    x=300 #局部作用域的名字x
    print(x) #在局部找x
foo()#结果为300
print(x) #在全局找x,结果为100

global关键字
在函数内,无论嵌套多少层,都可以查看到全局作用域的名字,若要在函数内修改全局名称空间中名字的值,当值为不可变类型时,则需要用到global关键字
 x=1
def foo():
    global x #声明x为全局名称空间的名字
    x=2
foo()
print(x) #结果为2

六.闭包

如果在一个内部函数里,对在外部作用域的变量进行应用,测成为闭包

x=1
def outer():
    x=2
    def inner():
        print(x) #此处的x就是外部函数的变量x,因此inner为闭包函数
    return inner

func=outer()
func() # 结果为2

“闭”代表函数是内部的,“包”代表函数外’包裹’着对外层作用域的引用。因而无论在何处调用闭包函数,使用的仍然是包裹在其外层的变量。

七.lambda表达式

>>>def ds(x):
              return 2 *x+1
>>>ds(5)
11

>>> lambda x : 2*x+1   // 冒号左边是函数值 右边是函数的表达式
>>>g = lambda x : 2*x+1
>>>g(5)
11

# 1、定义
lambda x,y,z:x+y+z

#等同于
def func(x,y,z):
    return x+y+z

# 2、调用
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)

# 方式二:
func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的
res=func(1,2,3)
12

两个BIF
filter()   //相当于一个过滤器。只保留true,删除false
map()  // 将一串数字一次作为函数的实参进行运算并返回结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值