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

python 函数

一、定义

        将部分语句放到一个区域,使用时调用次区域名称。

1、def 

      def 函数名称(参数列表):,多个参数用逗号相隔,没有则置空。

2、return 

        return [表达式],表示函数返回该表达式,一旦执行到return语句,此次函数执行已经完毕。

3、调用

        无参数函数,直接使用 函数名称()  形式调用。有参数函数使用 函数名称(参数1,参数2等) 形式调用

        若存在return ,需要使用变量接收返回值,无 return ,默认为 None。

二、参数

1、参数传递方式

        参数分为 实参形参 ,传参分为 位置传参关键字传参

        当位置传参与关键字传参并存时,需要注意位置优先级高于关键字且需要关键字传参在右(若存在函数(a,b,c)三个参数,若写(c=2,1,2)、(1,b=2,2)会报错,若是(1,2,c=2)不会报错)

2、参数类型

 2.1、缺省参数

        def 函数名称(a,b=1,c=1),必须从右向左依次存在,当b和c未传递时默认为1。

2.2、位置形参

       将需要传递内容按照函数定义的参数位置进行放置(若函数定义为(a,b,c,d)四个参数,那传递时,默认第一个元素为a,第二个为b形式

2.3、星号元组传参

        一般为 *args ,顾名思义其用法与元组一样,将多个用逗号隔开的参数包装成元组进行传递。

 

def func(*args):print(f"{args}")
func()  # ()
func(1, 2, 3)#(1, 2, 3)

         值得注意的是,当你只传递一个参数时,*args会处理为一个元素和一个逗号的元组,所以在使用时得按照元组的方式使用(用括号在嵌套一层也会被认为一个元组作为第一个元素)

2.4、关键字形参

        传递形式为 (a=1,b=2),位置可以互换,无先后之分。

2.5、双星号字典形参

        一般为 **kwsrgs ,同星号元组传参,传递内容变更为字典这样的复杂类型。

 

def func(**kwargs):print(kwargs) # {'name': 'tarena', 'age': 18}-->kwargs
func(a=1,b=2)  #{'a': 1, 'b': 2}

 2.6、混合使用

        优先级:位置传参>星号元组形参>命名关键字参数>双星号字典形参

        星号和双星号传参对参数个数无要求

三、匿名函数

        使用  lambda 关键字来创建(一行): lambda  [函数的参数列表]: 表达式 例如: 

add = lambda x, y: x + y
print(add(3, 4))

四、可变和不可变

        不可变:整数、、布尔值、空值、字符串、元组等;

        可变:列表、字典、集合。

        

 五、变量作用域

         变量作用域是 变量被声明后,在哪里能够被访问使用。

1、局部变量与全局变量

        局部变量:定义在函数内变量,不能在函数外面使用,那么函数便是该变量的作用域,该变量也是局部变量(局部变量在函数被调用时生效,调用结束自动销毁)。

        全局变量:函数内外都可以访问的变量(调用可以,若是赋值语句等改变该值的方式,则默认创建一个相同名称的局部变量);不可变类型作为全局变量在局部中不可改变,只能使用,而可变类型没有限制。

2、局部作用域修改全局变量

        关键字 global ,在局部需要修改全部变量时,使用 global 变量名称 声明这是一个全局变量,可以进行修改了,而不是直接创建了同一个名字的局部变量。

3、局部作用域修改外部变量(非全局)

        关键字nonlocal,在两层函数下,里层函数需要修改外层变量,使用 nonlocal 变量名称 声明。

        若是多层嵌套下来发现存在重复名称的变量,那么其寻找的逻辑为 LEGB (local -> enclosin(local -> enclosing -> clobal -> built-in ),就是从本地作用域查找、外层函数作用域查找、全局作用域查找、内建作用域(python预定义)。

六、内存分配

        函数调用时,内存开辟栈帧,用来存放函数变量,在调用完成后,栈帧释放。

七、递归(函数自调)

        递归要求:递归界限(达到某个条件,结束递归)

 

def factorial(n):result = 1i = 1while i <= n:result *= ii+=1return result
print("factorial: ", factorial(5))

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

相关文章:

  • Flutter Google安卓手机图标不能铺满整个圆形空间
  • 接口测试(三)jmeter——连接mysql数据库
  • JVM参数
  • C语言【调试】(个人笔记版)
  • Python基础之输入与输出
  • 前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
  • 嘉兴自闭症咨询全托机构:全面支持孩子成长的专业团队
  • 如何让审批更加的省钱?
  • 什么是DevOps,如何才能获取DevOps相关实践
  • 石墨烯磁表面等离子体
  • 对接金蝶云星空存货档案到MES系统的详细步骤及javajs动态脚本拉取的实现
  • 【C++初阶】一文讲通默认成员函数~类和对象(中)
  • Java项目-基于springboot框架的社区疫情防控平台系统项目实战(附源码+文档)
  • 【MySQL】设置二进制日志文件自动过期,从根源上解决占满磁盘的问题:通过修改 binlog_expire_logs_seconds 配置项
  • 使用C语言实现一个任务调度系统
  • 现代数字信号处理I-P4 CRLB+LMMSE 学习笔记
  • Olap数据处理
  • 智慧社区Web平台:Spring Boot技术实现
  • 高级SQL技巧:掌握数据分析与优化的艺术
  • 自由学习记录(10)
  • 【win11】终端/命令提示符/powershell美化
  • ProteinMPNN中EncLayer类介绍
  • 软件设计的依赖反转原则
  • 这种V带的无极变速能用在新能源汽车上吧?
  • Python配合Yolov11开对象检测训练软件
  • 019_基于python+django食品销售数据分析系统2024_4032ydxt