当前位置: 首页 > news >正文

Python的函数

一、定义

函数的定义:实现【特定功能】的代码块。

形参:函数定义时的参数,没有实际意义

实参:函数调用/使用时的参数,有实际意义

函数的作用:

    1. 简化代码
    2. 提高代码重用性
    3. 便于维护和修改
    4. 提高代码的可扩展性

函数的三要素:

    1. 功能 len() max() sum()
    2. 参数 s.clear() s.append('华清远见')
    3. 返回值 s.sort() s1 = sorted(s)

函数定义的语法格式:

函数的分类:

    1. 从定义角度—— 内置函数【别人写好的,你直接用】 自定义函数
    2. 从参数角度——无参函数 有参函数
    3. 从返回值角度——无返函数 None 有返函数

函数的调用/使用:

    1. 无返函数 函数名()
    2. 有返函数 方法1:print(函数名())
    3. 方法2:变量名 = 函数名()
def my_fun():print("这是我的函数")print(my_fun)
# 输出结果是   <function my_fun at 0x000002AA6DF7A3E0>
# 说明函数名是一个内存地址# 无返函数直接调用
my_fun()def you_fun():return 100# 有返函数,输出调用
print(you_fun())# 有返函数,使用变量接收调用
ret = you_fun()
print(ret)

二、函数的参数传递

函数在进行参数传递的时候,分为:位置参数、关键字参数、默认参数、位置不定长参数、关键字不定长参数。

位置参数:

传递参数时应该 和 定义时的参数 保持位置和数量一 一对应。

def fun(a, b, c):print(a, b, c)# fun()
# TypeError: fun() missing 3 required positional arguments: 'a', 'b', and 'c'fun(1, 2, 3)
#运行结果 1 2 3
fun('张三', 18, '男')
#运行结果 张三 18 男
fun([1,2,3], (4,5,6), {7,8,9})
# 运行结果 [1, 2, 3] (4, 5, 6) {8, 9, 7}

 关键字参数

调用函数传递参数时,按照 参数名=值 的方式,传参的顺序可以和定义参数的顺序不一致。

def fun(name, age, sex):print(name, age, sex)# 关键字参数
fun(name='张三', age=18, sex='男')
fun(age=18, sex='男', name='张三')

默认参数:

在函数定义时给参数设置默认值,那么在函数调用时,若不传参就是用默认值,若传参就是用传参的值。

def fun(name='张三', age=18, sex='男'):print(name, age, sex)# 默认参数
fun()
fun('李四')
fun(age=66)
fun('小明', 30)
fun('小华', 23, '女')

位置不定长参数:

在定义函数时参数名前加 * ,也就是def fun( *args ),那么在传参的时候就可以传若干个位置参数。

将参数打包成——元组。

def fun(*num):print(num)
fun(1)
fun(1,2)
fun(1,2,3,4,5,6)# 问:在一个函数中,位置不定长参数,可以有两个吗?
# 不允许
# 再问:一旦定义了位置不定参参数,是不是就不可以定义其他参数了呢?
# 答:可以定义,但是传参时必须是关键字参数

关键字不定长参数:

在定义函数参数名前加 ** ,也就是 def fun( **kwargs ),那么传参的时候就可以传若干个 关键字参数。

将参数打包成——字典。

def fun(**kwargs):print(kwargs)fun(a=12, b=13, c=15)
fun(姓名='张三', 年龄=18, 性别='男')

 三、函数的返回值

  1. 如果函数的运行结果想在函数外使用,就需要设置返回值。
  2. 使用关键字 return 进行返回。
  3. return 可以在函数中出现多次,但是只执行 1 次,遇见return返回值并结束函数。
  4. 与C语言不同,python中的return可以返回一个值或多个值,这个时候将返回的多个值到打包成一个元组。
def fun(*num):my_sum = 0for i in num:my_sum += ireturn my_sumret = fun(3,7,2,9,8)
print(ret, type(ret))

 四、递归函数

递归函数有三要素:

  1. 边界条件/基线条件 跳出/结束递归的条件
  2. 递归返回段 满足结束条件时,返回
  3. 递归前进段 不满足结束条件时,前进/继续递归
def rec(n):"""求一个数n的阶乘:param n: 接收到一个整型值:return: 计算的阶乘结果"""if n==1:return 1else:return n * rec(n-1)n = 5
print(rec(n))

五、函数中变量的作用域

变量的作用域:是指变量能起作用的范围,根据作用范围大小不同分为全局变量和局部变量。

  1. 全局变量:定义在函数外,作用范围是整个程序,程序结束时全局变量声明周期结束。
  2. 局部变量:定义在函数代码块里或者函数的参数里,作用范围是整个函数,函数执行结束时局部变量生命周期结束。

六、函数嵌套

函数嵌套:在一个函数的内部 还嵌套定义了 另外一个函数。

外部的我们称之为 外函数,内部的我们称之为 内函数。

x = 100
def out_fun():# global xx = 200def in_fun():# global xx = 300print(f"内函数中输出{x}")in_fun()print(f"外函数中输出{x}")out_fun()
print(f"函数外输出{x}")

七、闭包函数

什么是闭包函数?——如果内函数中使用了外函数的局部变量,并且外函数把内函数返回的过程就叫闭包。

形成闭包的条件:

  1. 函数嵌套
  2. 将内函数作为返回值返回
  3. 内函数必须使用外函数的局部变量
def out():x=200def in1():return x+100return in1
print(out()())


http://www.mrgr.cn/news/68736.html

相关文章:

  • 谈谈分布式开发的优点和缺点?
  • 地图框架之mapbox——(二)
  • [JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
  • CTF-RE: 运行状态解密代码来加密程序
  • ChatGPT辅助完成论文开题报告撰写的全流程提示词示例分享
  • 【CSS】“flex: 1“有什么用?
  • CDN到底是什么?
  • C++算法探索:从排序到动态规划
  • java卷上天,转行可以干什么?
  • 声纹识别中,向量距离那种计算方式最合适
  • aLoNg3x.2 | CrackMe
  • Servlet-Filter
  • Linux 常用操作指令大揭秘(上)
  • PaddleOCR安装教程
  • 一文读懂肖特基二极管
  • C#语言:现代软件开发的核心工具
  • 数据结构_哈夫曼树及其应用
  • 智慧矿山建设方案
  • Github的OAuth2登录
  • 块存储、文件存储和对象存储详细介绍
  • 自制头文件:BetterPrint(更好的输出)
  • 首批入驻 | ZStack AIOS平台智塔入驻信通院“铸基计划”应用商店
  • 【Qt】Macbook M1下载安装
  • Python 虚拟环境创建
  • 用户登录密码存储加密策略(附Python 和 bcrypt 库进行安全密码验证)
  • 人工智能——小白学习指南