python基础——05函数

一、函数

1.1 函数定义

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

函数的作用:

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

函数三要素:功能、参数、返回值

函数定义的语法格式:

函数分类:

从定义的角度——内置函数        自定义函数

从参数的角度——无参函数        有参函数

从返回值的角度——无返函数None        有返函数

函数名就是函数的地址
def fun():print("hello world")
print(fun)#<function fun at 0x0000021D9FC8A2A0>有参无返函数
def fun(num):print(num)
fun(5)#5有参有返函数
def fun(num):return num
print(fun(5))#5

1.2 函数的参数传递

位置参数

位置参数:调用函数时根据函数定义的位置来传递参数

def user_into(name , age , gender):print(f'您的名字是{name},年龄是{age},性别是{gender}')user_into('tom',18,'男')#您的名字是tom,年龄是18,性别是男

注意:传递参数和定义参数的顺序和个数必须一致

关键字参数

关键字参数:函数调用时通过“键 = 值”形式传递参数

作用:可以让函数更加的清晰,容易使用,同时也清除了参数的顺序需求

def user_info(name , age , gender):print(f'您的名字是{name},年龄是{age},性别是{gender}')# 关键字传参
user_info(name = "小明",age = 18,gender = "男")
# 可以不按照固定顺序传参
user_info(age = 18,gender='男',name = '小李')
# 可以位置和参数进行混用,位置参数必须在前,且匹配参数顺序
user_info("小苑",age = 20,gender = "女")

注意:函数调用时,如果有参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

缺省参数

缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值

def user_info(name , age , gender = "男"):print(f'您的名字是{name},年龄是{age},性别是{gender}')user_info('jack',age = 18) #您的名字是jack,年龄是18,性别是男
user_info('rose',18,'女') #您的名字是rose,年龄是18,性别是女

注意:函数调用时,如果为缺省参数传递值则修改默认参数值,否则使用这个默认值

不定长参数

不定长参数:不定长参数也叫可变参数,用于不确定 调用的时候会传递多少个参数(不传参也可以)的场景。

作用:当调用函数时不确定参数的个数时,可以使用不定长参数

不定长参数的类型:

1、位置传递

2、关键字传递

位置传递

def user_info(*args):print(args)user_info('tom') #tom
user_info('tom',18) #tom,18当多条输入时候避免输入值都存入args中,要进行关键字传值
def user_info2(*args, a, b):print(args,a,b)
user_info2(1,2,3,4,a=5,b=6)#(1, 2, 3, 4) 5 6当其他输入在前,只考虑位置就行
def user_info2(a, b,*args):print(args,a,b)
user_info2(1,2,3,4,5,6)#(3, 4, 5, 6) 1 2

注意:它会根据传进的参数的位置合并为一个元组(tuple),args是元组的类型,这就是位置传递

关键字传递

向函数内传递的时候要按照 key = value 的形式传递

def user_info(**kwargs):print(kwargs)user_info(name = 'tom',age = 18,id = 110)
#{'name': 'tom', 'age': 18, 'id': 110} 是一个键值对 字典的形式

注意:参数是”键 = 值“ 形式的情况下,所有的”键 = 值“ 都会被kwargs接受,同时会根据 “键 = 值” 组成字典

习题:定义函数,参数为关键字可变长参数,请将其中HuaHua的身高修改为160, 然后打印出所有身高不足180的姓名, 使用fun(XiaoMing=155,XiaoHong=171,XiaoHei=192,HuaHua=2333)调用测试

def fun(**num):if 'HuaHua' in num: num['HuaHua'] = 160for i in num.keys():if num[i]<180:print(i,end = ' ')
fun(XiaoMing=155,XiaoHong=171,XiaoHei=192,HuaHua=2333)#XiaoMing XiaoHong HuaHua 

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

  • def fun(a)
  • def fun(a:int)
  • def fun(*a)
  • def fun(**a)

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

  • fun(1, 'a', 13.14, True, [1,2], (3,4), {1,2})
  • fun( len(s) )

1.3 函数的返回值

  1. 如果函数的运行结果想在函数外使用,就需要设置返回值。
  2. 使用关键字 return 进行返回。
  3. return 可以在函数中出现多次,但是只执行 1 次,遇见return返回值并结束函数。
  4. 与C语言不同,python中的return可以返回一个值或多个值,用逗号隔开这个时候将返回的多个值到打包成一个元组。
#求输入的列表的最大值和最小值
def fun(num):return max(num),min(num)
print(fun([1,2,3,4,5,6]),type(fun([1,2,3,4,5,6])))
#(6, 1) <class 'tuple'>

练习题:定义函数,参数为关键字可变长参数,请计算并返回他们的平均身高, 使用(xiaoming='178cm',xiaobai='182cm',xiaohong='166cm',xiaohei='174cm')

#利用切片
def fun(**kwargs):sum = 0for i in kwargs.values():sum+=int(i.split('cm')[0])#利用字符串替换函数(replace)sum+=int(i.replace("cm",""))return sum/len(kwargs)
print(fun(xiaoming='178cm',xiaobai='182cm',xiaohong='166cm',xiaohei='174cm'))#175.0

1.4 递归函数

函数调用方式

  • 直接调用        A调用A
  • 间接调用        B调用B

递归的思想:把一个大规模问题分解成相似的小规模问题,再将小规模问题分解成相似的小小规模问题……。

#递归求前n项和
def fun(n):if n ==0:return 0else:return fun(n-1)+n
n = int(input(">>"))
print(fun(n))#利用循环求前n项和
n = int(input(">>"))
sum=0
for i in range(n+1):sum+=i
print(sum)

对比发现:循环和递归很相似,基本上他们两个可以相互转换。

  1. 大多数情况下,循环的效率、性能更好一些
  2. 循环代码容易书写,阅读性差
  3. 递归代码写起来稍难,阅读性好

递归函数有三要素:

  1. 边界条件/基线条件 跳出/结束递归的条件
  2. 递归返回段 满足结束条件时,返回
  3. 递归前进段 不满足结束条件时,前进/继续递归

1.5 函数中变量的作用域

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

  1. 全局变量:定义在函数外,作用范围是整个程序,程序结束时全局变量声明周期结束。
  2. 局部变量:定义在函数代码块里或者函数的参数里,作用范围是整个函数,函数执行结束时局部变量生命周期结束。
# 全局变量作用域全局
a = 10
def fun1():print(a)
def fun2():print(a)fun1()#10
fun1()#10# 局部变量不能被外部调用作用域只能在直接函数体内
def fun3():a = 20print(a) #可以与全局变量重名但局部变量会覆盖全局变量【就近原则】
# def fun4():
#     print(a)
fun3()#20
# fun4()#error

1.6 函数嵌套

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

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

#无返回值
def out_func():print('欢迎',end='')def in_func():print('光临')in_func()
out_func()#欢迎光临#内函数有返回值
def out_func():print('欢迎',end='')def in_func():print('光临')return in_func()
out_func()#欢迎光临

1.7 global 和 nonlocal的区别

x = 200
def out_func():def in_func():global xx = 100print('内函数',x)in_func()print('外函数',x)
out_func()
"""
global会把函数里的局部变量变成全局变量
内函数 100
外函数 100
"""def out_func():x = 666def in_func():nonlocal xx = 888print('内函数',x)in_func()print('外函数',x)
out_func()
"""
nonlocal只能修饰上一层的局部变量
内函数 888
外函数 888
"""

内函数局部变量 > 外函数局部变量 > 全局变量

对比global 和 nonlocal:

① global 修饰全局变量

② nonlocal 修饰该函数上一层的局部变量

1.8 闭包函数

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

形成闭包的条件:

  1. 函数嵌套
  2. 将内函数作为返回值返回
  3. 内函数要使用外函数的局部变量
#利用闭包计算两个数相乘
def out_fun(n1):def in_fun(n2):return n1*n2return in_fun
print(out_fun(4)(5))#20#也可以定义一个变量来接收out_fun()返回的in_out()的地址
def out_fun(n1):def in_fun(n2):return n1*n2return in_fun
result = out_fun(5)
print(result(4))#20

未完待续……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Redis] Redis哨兵机制

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【Eclipse系列】eclipse安装与常规配置(含插件)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、下载与安装 二、常规设置 1.1.设置工作空间(workspace) 1.2.设置字体和字体大小 ​编辑 1.3.设置编码 1.4.去除验证(validation) 1.5.去除单词验证(spelli…

注册登录学生管理系统小项目

头文件 #ifndef _LOGINLINK_H_ #define _LOGINLINK_H_ #include<myhead.h> typedef struct {int id;char name[20];int age; }stu,*Pstu; typedef struct node {union{int len;stu data;};struct node *next; }node,*Pnode; int regist(); int login(); Pnode create()…

【在clion中构建python interpreter环境用于debug fastlio2】

在CLION中构建python interpreter环境 数据包在clion中构建python interpreter环境 数据包 数据包链接&#xff1a;fastlio2_ros2 在clion中构建python interpreter环境 通过clion中的remote development 通过SSH远程构建fastlio2 workspace 打开远程clion工作空间后&#x…

HTML+CSS基础【快速上手】

目录 一、HTML展示 1、HTML基础结构 2、认识元素属性 &#xff08;1&#xff09;元素属性理解 &#xff08;2&#xff09;实例 3、自结束标签和注释 &#xff08;1&#xff09;自结束标签 &#xff08;2&#xff09;注释 4、语义化标签 &#xff08;1&#xff09;语义…

6000字加图文 | 抓包带你深入了解网关到底起什么样的作用?不同网段通信的过程详解

不同网段通信的过程 不同网段就分两种了&#xff0c;同一个局域网下面&#xff0c;不同网段之间的通信&#xff0c;或者是从局域网去往互联网的通信&#xff0c;那么这个过程又是怎么样的呢&#xff1f; 还记得第二篇这个内容吗&#xff0c;访问者把数据交给网关&#xff0c;当…

Gpt4.0最新保姆级教程开通升级

如何使用 WildCard 服务注册 Claude3 随着 Claude3 的震撼发布&#xff0c;最强 AI 模型的桂冠已不再由 GPT-4 独揽。Claude3 推出了三个备受瞩目的模型&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 以及 Claude 3 Opus&#xff0c;每个模型都展现了卓越的性能与特色。其中&a…

Python毕业设计选题:基于django+vue的网上购物系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商品类型管理 商品信息管理 系统管理 订单管理…

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…

关于Flutter空安全升级方案整理

前言 Flutter 从 2.0 版本开始支持空安全&#xff08;Null Safety&#xff09;。dart 版本为&#xff1a; environment:sdk: ">2.12.0 < 3.0.0"升级到空安全后&#xff0c;由于语法的变动&#xff0c;基本上整个工程&#xff0c;代码都爆红&#xff0c;这对项…

免费送源码:Java+ssm+MySQL ssm家电售后服务 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对家电售后服务等问题&#xff0c;对家电售后…

共享汽车管理新纪元:SpringBoot框架应用

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

yaml文件编写

Kubernetes 支持YAML和JSON格式管理资源 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式;用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化容易读懂 一&#xff0c;yaml语法格式 1.1 基本语法规则 使用空格进行缩进&#xff08;不使用制表符&#xff0…

ssm071北京集联软件科技有限公司信息管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;北京集联软件科技有限公司信息管理系统 \ 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本信息…

满足大众需求的理想选择:1000平米气膜羽毛球馆—轻空间

随着全民健身热潮的兴起和羽毛球运动的广泛普及&#xff0c;越来越多的企事业单位、学校以及社区开始寻求适合的大型羽毛球场地。对于大众需求者而言&#xff0c;如何在有限的预算和时间内建设一个高效且灵活的羽毛球馆&#xff1f;1000平米气膜羽毛球馆正是应运而生的理想解决…

原生鸿蒙应用市场:赋能开发者全生命周期服务体验

文章目录 背景自动化检测前移&#xff1a;早发现&#xff0c;早解决技术细节&#xff1a;静态代码分析与兼容性测试应用场景 按需加载&#xff1a;优化性能&#xff0c;提升用户体验技术细节&#xff1a;模块化与懒加载实现应用场景 应用加密&#xff1a;保护应用代码安全&…

vue3组合式API下封装hooks使用生命周期,在await之后调用hooks会有警告

起因&#xff1a;想封装一个hooks实现echarts图表随屏幕大小resize并且组件销毁时移除监听。结果在组件里面调用这个hooks&#xff0c;有个告警提示 [Vue warn]: onBeforeUnmount is called when there is no active component instance to be associated with. Lifecycle inje…

wget命令之Tomcat(三)

引言 Tomcat是一个开源的Java Web应用服务器&#xff0c;实现了多个关键的Java EE规范&#xff0c;包括Servlet、JSP&#xff08;JavaServer Pages&#xff09;、JavaWebSocket等。由于Tomcat技术先进、性能稳定且免费&#xff0c;它成为了许多企业和开发者的首选Web应用服务器…

【机器学习】决定系数(R²:Coefficient of Determination)

决定系数&#xff0c;也称为 R 平方&#xff0c;是一种用于衡量回归模型预测效果的统计指标。它表示了模型解释目标变量总变异的程度&#xff0c;数值介于 0 和 1 之间&#xff0c;数值越接近 1 表明模型的解释力越强。 1. 的定义和公式 的公式如下&#xff1a; 其中&#xf…

Cross Modal Transformer: Towards Fast and Robust 3D Object Detection

代码地址 https://github.com/junjie18/CMT 1. 引言 在本文中&#xff0c;我们提出了Cross-Modal Transformer&#xff08;CMT&#xff09;&#xff0c;这是一种简单而有效的端到端管道&#xff0c;用于鲁棒的3D对象检测&#xff08;见图1&#xff08;c&#xff09;&#xf…