python基础07——函数,想重复使用自己的代码就写个函数吧

1 函数定义与调用

  • 函数定义:def return 语句,形参
  • 函数调用:实参
    • 实参是实际占用内存地址的实实在在的参数,而形参只是意义上的一种参数,在定义的时候是不占内存地址的
def 函数名(参数1,参数2...:
    代码块(函数要实现的功能)
    return 返回值
#其中,函数的参数和返回值不是必须要写的,如果一个函数没有reutrn语句(也就是没有返回值),它实际上有一个隐式return语句,返回值为None,类型为'NoneType'。
  1. 函数没有给定参数和返回值
    print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
  • 案例一
    在这里插入图片描述
  • 案例二
def PR():
    print("===================")
    print("人生苦短,我学Python")
    print("===================")

在这里插入图片描述

  1. 函数给定参数,没有给返回值
    在这里插入图片描述

1.1 自定义模块函数

  1. 编写想要封装进模块的函数
  2. 把这些函数放到一个空的ipynb文件里
  3. 重命名(给文件取名),另存为.py格式
  4. 查看Python的搜索路,把 .py文件放到任意一个搜索路径的文件夹里(只需要放一个可以)
import sys
sys.path   #查看Python的搜索路径
  1. 导入模块,通过模块调用里面的函数

1.2 函数的返回值 return

  1. print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
  2. 将函数处理结果送出函数外部,可以进行接收
  3. 当函数运行到return,函数终止
  4. 返回多个值, 多个变量加逗号分隔

在这里插入图片描述

2 参数的传递方式

2.1 位置参数

按照位置传参,位置参数

在这里插入图片描述

2.2 默认值参数

函数定义阶段直接赋值了的形参
在这里插入图片描述

如果调用的时候为参数指定值,则指定值覆盖默认值,按照指定值进行计算
在这里插入图片描述

2.3 关键参数

函数调用阶段按照形参名赋值的实参
在这里插入图片描述
注意:当位置参数和关键字参数混用,位置参数在前,关键字参数在后

在这里插入图片描述

2.4 可变长度参数(收集和分配参数)

就是说只指定一个参数,然后允许调用函数时传入任意数量的参数。

  • 在定义的时候,一颗星表示收集位置参数,两颗星表示收集关键字参数
  • 在调用的时候,一颗星表示分配位置参数,两颗星表示分配关键字参数

2.4.1 收集位置参数

*args 把多余的位置参数以元组的形式储存
在这里插入图片描述

2.4.2 分配位置参数,函数参数的序列解包

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.4.3 收集关键字参数

**args 把多余的关键字参数以字典的形式存储
在这里插入图片描述

2.4.4 分配关键字参数

在这里插入图片描述

3 变量的作用域

3.1 局部变量

  • 函数内部的变量叫做局部变量, 局部变量只能在函数内部被使用, 用完就释放

在这里插入图片描述

  • 当局部变量和全局变量名字相同时, 自定义函数内优先使用局部变量
    在这里插入图片描述

  • 自定义函数内部有局部变量的用局部变量,没有局部变量的,用全局变量
    在这里插入图片描述

3.2 全局变量

  • 在自定义函数外边定义的变量叫做全局变量
  • 全局变量能在函数的任意位置被使用

3.3 global:可以将局部变量变成全局变量

  • 可以使用global关键字在函数内部定义一个全局变量, 全局变量能在函数的任意位置被使用
  • 如果在自定义函数中修改全局变量,那么就需要使用global进行声明,否则出错

4 匿名函数 Lambda

Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数。

a = lambda x,y,z: x+y+z
a(1,2,3)
#out:6

在这里插入图片描述

4.1 lambda函数和filter函数连用

filter()过滤后,返回的是结果为真(即不等于0)的对象

'''
filter函数:

 - filter()有两个参数。第一个参数可以是一个函数,也可以是一个None。
	
	 - 如果是第一个参数是函数的话,则将第二个迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;
	 - 如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
filter()过滤后,返回的是结果为真(即不等于0)的对象
'''
temp = filter(None,[1,2,0,False,True])

list(temp)  #filter保留结果为真的原数据,筛除结果为假的原数据
#[1, 2, True]

案例:

#写一个筛选奇数的过滤器
def is_odd(n):
    return n%2
list(filter(is_odd,range(10)))

#使用lambda简化上述函数
list(filter(lambda n:n%2,range(10)))

4.2 lambda函数和map函数连用

map()遍历,返回的是计算结果

'''
map:映射
map()也有两个参数,仍然一个是函数,一个是可迭代序列,将序列的每一个个元素作为函数的参数进行运算加工,直到可迭代序列每个元素加工完毕,返回所有加工后的元素构成的新序列。
map()遍历,返回的是计算结果
'''
[*map(lambda x:x%2,range(10))]
#out: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

4.2 应用场景

  1. python编写一些程序的脚本时,使用lambda就可以省下来定义函数的过程。比如写一个简单的脚本管理服务器,就没有必要定义函数,再去调用它。直接使用lambda函数,可以使程序更加简明。
  2. 一些只需要调用一两次的函数,就没有必要为了想个合适的函数名字而费精力了,直接使用lambda函数就可以省去取名的过程。
  3. 阅读普通函数,通常需要跳到开头def定义的位置,使用lambda函数可以省去这样的步骤。

5 递归

函数自己调用自己,注意递归停止条件

#累加
def add_sum(n):
    if n == 1:
        return 1
    else:
        return n+add_sum(n-1)
add_sum(10)
#out: 55

6 内置函数

可以直接用函数名调用

6.1 数据类型相关

int() , bool() , float() , str() , list() , set() , tuple() ,dict() ,type()

在这里插入图片描述

6.2 逻辑判断相关

6.2.1 all()函数

如果bool(x)对于可迭代的所有值x为True,则返回True。如果iterable为空,则返回True
在这里插入图片描述

6.2.2 any()函数

如果bool(x)对于可迭代的任何x为True,则返回True。如果iterable为空,则返回False。
在这里插入图片描述

6.3 数学相关

求和:sum()
求绝对值:abs()
求最小值:min()
求最大值:max()
求长度:len()
生成随机数:range(),
求m的n次幂:pow(m,n)
四舍五入:round()【*.5的时候,返回距离原数据最近的偶数,精度可以取负值:round(156.433,-1)】
求商和余数: divmod()
zip函数:将等长的列表或元组组合成字典
在这里插入图片描述

7 模块函数

通过模块名进行调用,如math.sin()等 (前提是先导入(import)第三方模块)

7.1 导入模块

  1. import math #第一种导入模块的方式
  2. import math as mt #第二种导入模块的方式 最常用的
  3. from math import sin #第三种导入模块的方式

7.2 random模块

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.3 math模块

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值