Python初级笔记6 函数

函数概念

  • 函数是一段具有特定功能的代码的集合。
  • 函数的目的主要在于降低编程难度与增加代码复用。
  • 一组语句等价于一个函数,,需要使用这组语句的地方直接调用函数名即可。
  • 函数的定义也叫函数的声明,定义后的函数不能直接运行需要通过调用

函数定义 

python使用保留字def定义函数

def 函数名(参数):

        函数体

        return(返回值列表)

  • 函数遇见return会立即返回退出,不会执行函数内return下边的代码
  • 没有设置返回值时,默认的返回值时null
  • return只能返回一个值
  • 不需要定义参数类型,因为python是弱数据语言
def print_hi():print("helo world")
print_hi()

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.28/函数.py
helo world


 本地变量(局部变量)和全局变量:

  • 局部变量:

  • 声明在函数内部的变量,可以return出去,外面可以拿个变量接住
  • 形参,在函数括号中,是局部变量
  • 局部变量只能在函数内部被访问

  • 全局变量:

  • 不在函数内定义,在任何地方都可以被读取
  • 函数内部可以访问全局变量
  • 默认情况下全局变量不能被函数内更改
  • 在函数内用global就可以更改全局变量 
a=0
def hello():print("hello world!!")global aa+=1
for i in range(0,4):hello()
print(f"一共运行了{a}遍")

  • :每当一个程序被调用的时候 ,会立刻在内存中形成一个执行栈(先进后出),函数调用的时候会把堆中函数程序地址压入栈中,函数执行完毕会立刻弹栈。
  • 磁盘:存储数据的地方,cpu不可能直接从磁盘读取数据,因为读写速度慢。
  • 内存:可以理解为一个缓冲区,内存读写速度快。
  • 比如,要运行一段程序,程序在磁盘中存着,将磁盘中的程序加载到内存中向CPU提供数据
  • 函数存放到堆中,因为栈的空间有限,
  • 局部变量在被函数调用的时候会被压入栈中,函数执行完毕会出栈,失去内存地址,访问不到局部变量

运算器+控制器=cpu
存储器=内存+磁盘


值传递与引用传递 

1、值传递

  • 传递的是值
  • 将数值赋给形参,形参传回去变成局部变量,函数无法直接修改全局变量
def t(a,b):a+=6b+=2
x=1
y=9
t(x,y)
print(x)
print(y)

函数外的X,Y没有改变 

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/值传递与引用传递.py
1
9

2、引用传递 

  • 传递的是内存地址
  • 列表是引用对象
def k(a):a.append("zhang")list1=[1,2,3,5,"tyu"]
k(list1)
print(list1)

数组在函数中被修改,是因为地址被传回去了 

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/值传递与引用传递.py
[1, 2, 3, 5, 'tyu', 'zhang']


练习 

def isvalid(a,b,c):if a+b>c and a+c>b and b+c>a:return 1else:print("错误")return 0
def valid(a,b,c):if isvalid(a,b,c)==1:p=0.5*(a+b+c)v=(p*(p-a)*(p-b)*(p-c))**0.5print(f"三角新面积为:{v}")else:passa,b,c=eval(input("enter three num="))
valid(a,b,c)

 默认参数值

大多情况下,该参数值不需要改变,书写位置一般在正常参数后面,方便用户调用函数

def t(a,b=5):return a+b
a,b=eval(input("enter the num="))
k=t(a)
print(k)

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/默认参数.py
enter the num=1,3
6

若指向列表:

def test(num=[]):num.append("zhangsan")print(num)
test()
test()

 结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/默认参数.py
['zhangsan']
['zhangsan', 'zhangsan']

注意:默认参数指向不可变数据类型


可变参数(*args)

返回一个元组

def s(a,b,*c):print(f"c={c}")sum=a+bfor i in c:sum+=ireturn sum
print(f"sum={s(1,1,2,2,3)}")

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/可变参数.py
c=(2, 2, 3)
sum=9

让第一个参数不是数组

如果说传进去的是元组或者列表,只需要在元组或者列表前加*,就会把元组或列表作为可变参数传进去

def s(*c):print(f"c={c}")a=[6,9,0]
print(s(*a))
print(s(a))

 结果:
PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/可变参数.py
c=(6, 9, 0)
None
c=([6, 9, 0],)
None


关键字参数 (命名参数)

将键值对传回去

def x(name,age,**kw):print(f"name={name},age是{age},其他是{kw}")# x("zhangsan",13,job="画家",hobby="sing")
d={"job":"漫画家","hobby":"画画睡觉吃饭"}
x("zhangsan",13,**d)

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/关键字参数.py
name=zhangsan,age是13,其他是{'job': '漫画家', 'hobby': '画画睡觉吃饭'} 


函数作为参数

def t():print("test1----")def t2(fn):fn()print("test2~~~")
t()
t2(t)

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/函数参数.py
test1----
test1----
test2~~~

匿名函数 lambda表达式

lambda 参数[参数]:函数 

def t2(fn):fn()print("test2~~~")
t2(lambda:print("佳人们谁懂"))

结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/函数参数.py
佳人们谁懂
test2~~~

def t2(fn):print(fn(1,4))print("test2~~~")
t2(lambda a,b:a+b)#自动返回,不用return

 结果:

PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/3.29/函数参数.py
5
test2~~~

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

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

相关文章

《苍穹外卖》Day12部分知识点记录——数据统计-Excel报表

一、工作台 需求分析和设计 接口设计 今日数据接口订单管理接口菜品总览接口套餐总览接口订单搜索(已完成)各个状态的订单数量统计(已完成) 代码实现 今日数据接口 1. WorkspaceController 注意不要导错包了 package com.sk…

【经典算法】LeetCode104二叉树的最大深度(Java/C/Python3实现含注释说明,Easy)

目录 题目描述思路及实现方式一:递归思路代码实现Java版本C语言版本Python3版本Go语言版本 复杂度分析 方式二:广度优先搜索(BFS)思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型):树、深度优先搜索(DFS)、…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

多进程编程:原理、技术与应用

title: 多进程编程:原理、技术与应用 date: 2024/4/26 12:14:47 updated: 2024/4/26 12:14:47 categories: 后端开发 tags: 多进程并发编程网络服务分布式系统任务处理进程池线程对比 第一章:进程与线程 进程与线程的概念及区别: 进程&am…

gitcode 上传文件报错文件太大has exceeded the upper limited size

报错 remote: Start Git Hooks Checking Error: Deny by project hooks setting ‘default’ has exceeded the upper limited size (10 MB) in commit 当前有效的解决方案 项目设置->提交设置->勾选管理员不受规则限制->提交 重新push,提交成功

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行(windows) 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

Oracle集群ORA-03113:end-of-file on communication channel

一、问题场景描述 今天Oracle集群要更新各数据库的数据,折腾的启动不了了: --》数据量比较大,数据泵方式导出的dmp文件 准备导入集群 --》由于之前的生产数据库数据比较少,需要增大表空间。 --》于是在sqlplus命令窗口&#xff0c…

【JavaWeb】Day51.Mybatis动态SQL(一)

什么是动态SQL 在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

进程地址空间 【Linux】

文章目录 进程地址空间 进程地址空间 进程地址空间,本质是一个描述进程可视范围的大小, 地址空间内一定要存在各种区域划分,对线性地址进行start,和end即可 在每一个区的_start 到_end 范围内,这段连续的空间中&…

深入探索计算机视觉:高级主题与前沿应用的全面解析

引言 计算机视觉,作为人工智能领域的一个重要分支,旨在让计算机能够“看”懂世界,理解和解释视觉场景。随着深度学习技术的迅猛发展,计算机视觉已经在许多领域取得了显著的进展,如自动驾驶、安防监控、医疗诊断等。在…

JDBC查询大数据时怎么防止内存溢出-流式查询

文章目录 1.前言2.流式查询介绍3.使用流式查询3.1不开启流式查询的内存占用情况3.2开启流式查询的内存占用情况 4.开启流式查询的注意点 1.前言 在使用 JDBC 查询大数据时,由于 JDBC 默认将整个结果集加载到内存中,当查询结果集过大时,很容易…

刷机维修进阶教程----小米6 6x 5x机型修复基带 改写参数 改写串码实例步骤操作解析

在于众多工作室 业务接洽中有很多需要过新机的业务需求。那么大多都在机型参数和型号上面有关联。众所周知,改写机型参数为不允许的行为。操作只为解惑参数的一些常识,修复合规参数和修复手机系统为目的,请遵守国安家法律法规,今天将详细通过实例演示来解析小米6 6x 5x这些…

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT,无需训练,直接使用开源小语言模型检测各种大语言模型,如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍,将检测准确率相对提升了 75%,超过商用系…

【中级软件设计师】上午题12-软件工程(1):软件工程模型、敏捷方法、软件需求、系统设计

上午题12-软件工程(1) 1 软件过程1.1 CMM 能力成熟度模型1.1 CMMI (建议直接看思维导图) 2 软件过程模型2.1 瀑布模型2.2 增量模型2.3 演化模型2.3.1 原型模型2.3.2 螺旋模型 2.5 喷泉模型 3 统一过程(UP)模型4 敏捷方…

【python】利用 GridSearchCV 和 SVM 进行学生成绩预测

在机器学习领域,寻找最优模型参数是一个重要的步骤,它直接影响模型的泛化能力和预测准确性。本文将通过一个具体案例介绍如何使用支持向量机(SVM)和网格搜索(GridSearchCV)来预测学生的成绩,并通…

可审批可审计追溯的单网络导出文件方案,了解一下

在物理隔离状态下,单网络导出文件是一个重要的安全需求,特别是在处理敏感数据时。在这种环境下,数据导出需要采取特殊的安全措施,以确保数据传输的安全性和合规性。需要考虑以下因素: 安全性:确保传输过程加…

筛选日志并生成序列化文件

1.在idea中创建项目 selectData. 2.添加依赖,插件包,指定打包方式,日志文件 大家可以直接从前面项目复制。 3.本次只需要进行序列化操作,所以不需要Reducer模块,编写Mapper模块 package com.maidu.selectdata;import…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别(NER)是自然语言处理(NLP)中的一项关键技术,它的目标是从文本中识别出具有特定意义或指代性强的实体,并对这些实体进行分类。这些实体通常包括人名、地名、组织…

极简shell制作

🌎自定义简单shell制作 (ps: 文末有完整代码) 文章目录: 自定义简单shell制作 简单配置Linux文件 自定义Shell编写 命令行解释器       获取输入的命令       字符串分割       子进程进行进程替换 内建命令…

28.Gateway-网关过滤器

GatewayFilter是网关中提供的一种过滤器,可以多进入网关的请求和微服务返回的响应做处理。 GatewayFilter(当前路由过滤器,DefaultFilter) spring中提供了31种不同的路由过滤器工厂。 filters针对部分路由的过滤器。 default-filters针对所有路由的默认…