Python学习记录 #4、函数

1. 函数的使用

1.1 定义

def 函数名(参数):

        代码1

        代码2

        ......

1.2 调用

函数名(参数)

注意:

  • 不同的需求,参数可有可无。
  • 在Python中,函数必须’先定义后使用‘。 

2. 函数说明文档

         保存函数解释说明的信息,各个参数的含义。

2.1 形式

def 函数名(参数):

        """ 说明文档的位置 """

        代码

        ......

2.2 查看说明文档

 help(函数名)

3. 参数

3.1 分类

形参:函数定义时书写的参数(非真实数据)。

实参:函数调用时书写的参数(真实数据)。

3.2 写法

3.2.1 位置参数

         调用函数时根据函数定义的参数位置来传递参数,传递和定义参数的顺序及个数必须一致。

def  函数名(参数1, 参数2, 参数3):       

        """ 说明文档的位置 """

        代码

        ......

函数名(参数1, 参数2, 参数3)

3.2.2 关键字参数

        通过“键=值”形式加以指定。函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

def  函数名(参数1, 参数2, 参数3):       

        """ 说明文档的位置 """

        代码

        ......

函数名(参数1, 参数3 = 值x, 参数2 = 值y)

3.2.3  缺省参数 (默认参数)

        函数调用时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。用于定义函数,为参数提供默认值。

def 函数名(name, age, gender='男'):

        print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')

函数名('TOM', 20)            #您的名字是TOM, 年龄是20, 性别是男

函数名('Rose', 18, '女')    #您的名字是Rose, 年龄是18, 性别是女

3.2.4 不定长参数 (可变参数)

        不确定调用的时候会传递多少个参数(不传参也可以)

 ① 包裹(packing)位置参数

def 函数名(*args):

        print(args)

# ('TOM',)

函数名('TOM')

# ('TOM', 18)

函数名('TOM', 18)

 注:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型。

② 包裹关键字参数

def 函数名(**kwargs):

        print(kwargs)

# {'name': 'TOM', 'age': 18, 'id': 110}

函数名(name='TOM', age=18, id=110)

注:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程。 

4. return返回值

4.1 作用

  • 负责函数返回值(谁调用,返回给谁,也可作为参数传递);
  • 退出当前函数:导致return下方的所有代码(函数体内部)不执行。

4.2 写法

4.2.1 单返回值

return 值

4.2.2 多返回值

 return 值1, 值2

注意:

  •  多返回值,默认是元组类型;
  • return后面可以连接列表、元组或字典,以返回多个值

5. 变量作用域

5.1 局部变量

        定义在函数体内部的变量,即只在函数体内部生效。当函数执行结束后,局部变量就会被销毁(除了一些特殊情况)。

5.2 全局变量

        在函数体内、外都能生效的变量

5.3 global关键字

        关键字声明全局变量

5.4 体验变量作用域

a = 4

# 全局变量

def 函数1 ():

        a = 17

        # 局部变量

        print("在函数中1 a = ", a)

def 函数2 ():

        print("在函数中2 a = ", a)

函数1 ()              #在函数中1 a = 17

函数2 ()              #在函数中2 a = 4

print("a = ", a)    # a = 4

6.  函数嵌套

        一个函数里面又调用了另外一个函数。

 def testB():

        print('---- testB start----')                                        二

        print('这里是testB函数执行的代码...(省略)...')       三

        print('---- testB end----')                                         四

def testA():

        print('---- testA start----')                                         一

        testB()

        print('---- testA end----')                                          五

testA()    # 一 二 三 四 五

7.  匿名函数-lambda

        一个函数有一个返回值,并且只有一句代码,可以使用 lambda表达式简化。

7.1 语法

lambda 参数列表 : 表达式

7.2 体验 

def fn1(x,y):                                                

        return x+y 

result = fn(4,5)  # 9

#使用匿名函数后

fn1 = lambda x, y : x + y

print(fn(4,5))      # 9

#三元运算换成匿名函数

fn2 = lambda x, y : x * y if x > y else x / y

print(fn2(2,5))   # 0.4

8. 高阶函数

        把函数作为参数传入

8.1 map

8.1.1 语法

map(func, lst)

         将传入的函数变量func作用到lst变量的每个元素中,对lst里面的列表执行func里的表达式 。

8.1.2 体验

numbers = [1, 2, 3, 4, 5]

squared = list(map(lambda x: x**2, numbers))

print(squared) # 输出: [1, 4, 9, 16, 25]

8.2 reduce(func,lst)

8.2.1 语法

reduce(func,lst)

        每次func计算的结果继续和序列的下一个元素做累积计算

注意:reduce()传入的参数func必须接收2个参数

8.2.2 体验

# 导入模块

import functools

list1 = [1, 2, 3, 4, 5]

# 方法一

def func(a, b):

        return a + b

result = functools.reduce(func, list1)

print(result) # 15

#方法二

result2 = functools.reduce(lambda x, y: x + y, list1)

print(result2)

8.3 filter

8.3.1 语法

filter(func, lst)

        用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象 

8.3.2 体验 

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def func(x):

        return x % 2 == 0

        result = filter(func, list1)

        print(result)     # <filter object at 0x0000017AF9DC3198>

print(list(result))      # [2, 4, 6, 8, 10]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值