Python入门-函数

1.函数的定义及调用

函数:函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。

以此达到一次编写,多次调用的目的

def get_sum(num):   #num叫形式参数s=0for i in range(1,num+1):s+=iprint(f'1到{num}之间的累加和为:{s}')#函数的调用
get_sum(10)  #1-10之间的累加和   10为实际参数
get_sum(100) #1-100之间的累加和
get_sum(1000) #1-1000之间的累加和

2.函数的参数传递

  • 位置参数
    是指调用时的参数个数和顺序必须与定义的参数个数和顺序相同
def happy_birthday(name,age):print('祝',name,'生日快乐')print(str(age),'岁生日快乐')#调用
happy_birthday('Jarvis',18)

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-2位置参数.py 
祝 Jarvis 生日快乐
18 岁生日快乐
  • 关键字参数
    是在函数调用时,使用 “形参名称=值” 的方式进行传参,传递参数的顺序可以与定义时参数的顺序不同
def happy_birthday(name,age):print('祝',name,'生日快乐')print(str(age),'岁生日快乐')#关键字传参
happy_birthday(age=18,name='Jarvis') #定义的形参分别为 age、name#happy_birthday(age=18,name1='Jarvis')  #TypeError: happy_birthday() got an unexpected keyword argument 'name1'happy_birthday('张三',age=19) #正常执行,可以同时使用 位置传参和关键字传参#happy_birthday(name='Jarvis1',18)   #SyntaxError: positional argument follows keyword argument

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-3关键字传参的使用.py 
祝 Jarvis 生日快乐
18 岁生日快乐
祝 张三 生日快乐
19 岁生日快乐

需要位置传参在前,关键字传参在后,否则程序报错

  • 默认值参数
    是在函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值
def happy_birthday(name='Jarvis',age=18):print('祝',name,'生日快乐')print(str(age),'岁生日快乐')#调用
#不传参
happy_birthday()#传参一个
happy_birthday('张三')   #位置传参happy_birthday(age=21)

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-4默认值参数的使用.py 
祝 Jarvis 生日快乐
18 岁生日快乐
祝 张三 生日快乐
18 岁生日快乐
祝 Jarvis 生日快乐
21 岁生日快乐

如果只传一个 19 呢?19会赋值给哪个变量呢???

happy_birthday(19)
19 生日快乐
18 岁生日快乐

如果使用位置传参的方式,19传给了name

当位置参数和关键字参数同时存在时,位置参数一定要放前面!! 位置参数在后会编译报错

def fun(a,b=20):passdef fun2(a=20,b):  #报错了,语法错误    当位置参数和关键字参数同时存在时,位置参数在后会报错pass

3.可变参数

函数的参数传递: 又分为个数可变的位置参数和个数可变的关键字参数两种,
其中个数可变的位置参数是在参数前加 一颗星(*para), para 形式参数的名称
函数调用时刻接收任意个数的实际参数,并放到一个元组中。
个数可变的关键字参数是在参数前加 两颗星 (**para),
在函数调用时可以接受多个任意 “参数=值” 形式的参数,并放到一个字典中

  1. 个数可变的位置参数
def fun(*para):print(type(para))for item in para:print(item)fun(10,20,30,50)
fun(10)
fun(10,20)

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-5可变参数.py 
<class 'tuple'>
10
20
30
50
<class 'tuple'>
10
<class 'tuple'>
10
20

如果可变参数是一个列表呢??

fun([11,22,33,55])
<class 'tuple'>
[11, 22, 33, 55]

如果想把列表里面的每个参数逐步拿出来放在 元组里面,可以在调用时,参数面前加一颗星, 就能将列表进行解包

fun(*[10,20,30,88])
<class 'tuple'>
10
20
30
88
  1. 个数可变的关键字参数
def fun2(**kwpara):print(type(kwpara))for key,value in kwpara.items():print(key,'---->',value)#调用 fun2
fun2(name='JARVIS',age=19,height=173)   #关键字参数

结果:

<class 'dict'>
name ----> JARVIS
age ----> 19

字典可以作为个数可变的关键字入参吗??

# 定义一个字典
d = {'name': 'jarvis', 'age': 24, 'height': 173}
# fun2(d)#TypeError: fun2() takes 0 positional arguments but 1 was given

发现报错了

如果在进行传参时:定义的参数 是个数可变的关键字参数,那么在进行传参的时候,如果参数是个字典,前面必须加上两个星 进行解包

fun2(**d)  # 解包

4.函数的返回值

def calc(a,b):print(a+b)calc(10,20)
print(calc(1,2))  #Nonedef calc2(a,b):s=a+breturn s  #将s返回给函数的调用者去处理get_s=calc2(1,2)
print(get_s)get_s2=calc2(calc2(1,2),3)  #1+2+3  先执行 calc2(1,2) 返回结果为3,再去执行 calc2(3,3)
print(get_s2)

返回值可以是多个::

def get_sum(num):s=0odd_sum=0 #奇数和even_sum=0 #偶数和for i in range(1,num+1):if i%2!=0:  #说明是奇数odd_sum+=ielse:even_sum+=is+=ireturn odd_sum,even_sum,s  #三个值result=get_sum(10)
print(type(result))  # <class 'tuple'> 元组
print(result)

还可以 系列解包赋值::

a,b,c=get_sum(10)  #返回三个值,元组类型,分别赋值给 a,b,c
print(a)
print(b)
print(c)

5.匿名函数lambda

匿名函数:是指没有名字的函数,这种函数只能使用一次,
一般是在函数的函数体只有一句代码且只有一个返回值时,
可以使用匿名函数来简化

def calc(a, b):return a + bprint(calc(10, 20))# 简化:匿名函数
s = lambda a, b: a + b  # s表示的就是一个匿名函数
print(type(s))  # <class 'function'># 调用匿名函数
print(s(10, 20))print('----------------分隔线---------')#
lst = [10, 20, 30, 50, 70]
for i in range(len(lst)):print(lst[i])
print()print('----------------分隔线---------')for i in range(len(lst)):result = lambda x: x[i]  # 根据索引取值, result的类型是 functionprint(result(lst))  # lst是实际参数print('----------------分隔线---------')student_scores = [{'name': 'jarvis', 'score': 98},{'name': '张三', 'score': 60},{'name': '李四', 'score': 90},{'name': '王五', 'score': 45}
]
# 对列表进行排序,排序的规则是 字典中的成绩
student_scores.sort(key=lambda  x:x.get('score'),reverse=True)
print(student_scores)

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-9匿名函数.py 
30
<class 'function'>
30
----------------分隔线---------
10
20
30
50
70----------------分隔线---------
10
20
30
50
70
----------------分隔线---------
[{'name': 'jarvis', 'score': 98}, {'name': '李四', 'score': 90}, {'name': '张三', 'score': 60}, {'name': '王五', 'score': 45}]

6.常用的数学函数

print('绝对值',abs(199),abs(-100),abs(0))print('商和余数',divmod(13,4))print('最大值',max('hello'))print('最大值',max([10,4,56,78,5]))print('最大值',min('hello'))print('最大值',min([10,4,56,78,5]))print('求和:',sum([10,3,55,6]))print('x的y次幂',pow(2,3))#四舍五入
print(round(3.1415926))  #round函数只有一个参数,保留整数print(round(3.1415926,2))  # 2 表示保留两位小数print(round(314.15926,-1))  #314 , -1位 个位进行四舍五入print(round(314.15926,-2))  #300  -2 十位进行四舍五入

7.迭代器操作函数

在这里插入图片描述

  1. 排序操作
lst = [54, 56, 77, 3, 555, 789]# 排序操作
asc_lst = sorted(lst)
desc_lst = sorted(lst, reverse=True)print('原列表', lst)
print('升序', asc_lst)
print('降序', desc_lst)

结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap8\示例8-13迭代器操作函数.py 
原列表 [54, 56, 77, 3, 555, 789]
升序 [3, 54, 56, 77, 555, 789]
降序 [789, 555, 77, 56, 54, 3]
  1. reversed 反向
new_lst = reversed(lst)
print(type(new_lst))  # <class 'list_reverseiterator'> 迭代器对象
print(list(new_lst))  # [789, 555, 3, 77, 56, 54]

结果:

<class 'list_reverseiterator'>
[789, 555, 3, 77, 56, 54]
  1. (zip)
x = ['a', 'b', 'c', 'd']
y = [10, 20, 30, 40, 60]
zipobj = zip(x, y)
print(type(zipobj))  # <class 'zip'>
print(list(zipobj))  # [('a', 10), ('b', 20), ('c', 30), ('d', 40)]

结果:

<class 'zip'>
[('a', 10), ('b', 20), ('c', 30), ('d', 40)]
  1. enumerate
enum = enumerate(y, start=1)
print(type(enum))  # <class 'enumerate'>
print(tuple(enum))  # ((1, 10), (2, 20), (3, 30), (4, 40), (5, 60))

结果:

<class 'enumerate'>
((1, 10), (2, 20), (3, 30), (4, 40), (5, 60))
  1. all
lst2 = [10, 20, '', 30]
print(all(lst2))  # False, 空字符串的布尔值是 False
print(all(lst))  # True
  1. any
print(any(lst2))  # True
  1. next
x = ['a', 'b', 'c', 'd']
y = [10, 20, 30, 40, 60]
zipobj = zip(x, y)
print(next(zipobj))  #('a', 10)
print(next(zipobj))
print(next(zipobj))

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

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

相关文章

MySQL数据库的CURD、常见函数及UNION和UNION ALL

一、概述 MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛应用于各种应用场景。在MySQL中&#xff0c;CURD操作是指创建&#xff08;Create&#xff09;、读取&#xff08;Read&#xff09;、更新&#xff08;Update&#xff09;和删除&#xff08;Delete&#xff09;…

Open3D聚类算法

按照官网的例子使用聚类&#xff0c;发现结果是全黑的。 经过多次测试发现 eps3.3, min_points1这里是关键 min_points必须等于1否则无效果 import time import open3d as o3d; import numpy as np; import matplotlib.pyplot as plt#坐标 mesh_coord_frame o3d.geometry.Tria…

go slice源码探索(切片、copy、扩容)和go编译源码分析

文章目录 概要一、数据结构二、初始化2.1、字面量2.2、下标截取2.2.1、截取原理 2.3、make关键字2.3.1、编译时 三、复制3.1、copy源码 四、扩容4.1、append源码 五&#xff1a;切片的GC六&#xff1a;切片使用注意事项七&#xff1a;参考 概要 Go语言的切片&#xff08;slice…

网络摄像机的网络连接

网络摄像机的网络连接 1. 网络连接2. 网络直通线和网络交叉线的制作方法References 1. 网络连接 网络摄像机完成安装后&#xff0c;需要进行功能的配置及参数的设置&#xff0c;您可以通过浏览器进行相关功能的配置。 有线网络连接 左侧为通过网络直通线连接的示意图&#x…

Spring Boot 整合 Knife4j(快速上手)

关于 Knife4j 官方文档&#xff1a;https://doc.xiaominfo.com/ Knife4j是一个基于Swagger的API文档生成工具&#xff0c;它提供了一种方便的方式来为Spring Boot项目生成在线API文档。Knife4j的特点包括&#xff1a; 自动化生成&#xff1a;通过Swagger注解&#xff0c;Kn…

canvas设置图形的阴影

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

.NET 8.0 本机 AOT

在软件开发领域&#xff0c;优化性能和简化效率仍然至关重要。.NET 平台二十年来不断创新&#xff0c;为开发人员提供了构建弹性且高效的软件解决方案的基础架构。 与本机 AOT&#xff08;提前&#xff09;编译相结合&#xff0c;取得了显着的进步。本文深入研究.NET Native AO…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考&#xff1a;https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示&#xff0c;每个线性变换都对应着一个矩阵 例&#xff1a; 考虑一个变换 T T T&#xff0c;使得平面上的一个向量投影为平面上的另一个向量&#xff0c;即 T : R 2 → R 2 T:R^2 \to R…

DS|图(连通与生成树)

题目一&#xff1a;DS图 -- 图的连通分量 题目描述&#xff1a; 输入无向图顶点信息和边信息&#xff0c;创建图的邻接矩阵存储结构&#xff0c;计算图的连通分量个数。 输入要求&#xff1a; 测试次数t 每组测试数据格式如下&#xff1a; 第一行&#xff1a;顶点数 顶点…

DZ-200系列中间继电器 板后不带底座 DZY-212X DC220V JOSEF约瑟

DZY-200系列中间继电器 系列型号&#xff1a; DZY-201中间继电器 DZY-222中间继电器 DZY-202中间继电器 DZY-203中间继电器 DZY-204中间继电器 DZY-205中间继电器 DZY-206中间继电器 DZY-207中间继电器 DZY-208中间继电器 DZY-209中间继电器 DZY-210中间继电器 DZY-211中间继电…

Java IDEA JUnit 单元测试

JUnit是一个开源的 Java 单元测试框架&#xff0c;它使得组织和运行测试代码变得非常简单&#xff0c;利用JUnit可以轻松地编写和执行单元测试&#xff0c;并且可以清楚地看到哪些测试成功&#xff0c;哪些失败 JUnit 还提供了生成测试报告的功能&#xff0c;报告不仅包含测试…

vue封装基础input组件(添加防抖功能)

先看一下效果&#xff1a; // 调用页面 <template><div><!-- v-model&#xff1a;伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…

​已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法,亲测有效!!!​

已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 报错问题 解决思路 解决方法 总结 Q1 - 报错问题 java.long.ArrayIndexOutOfBoundsException 是Java中的一个运行时异常​&#xff0c…

FreeRTOS——内存管理知识总结及实战

1 freeRTOS动态创建与静态创建 动态创建&#xff1a;从FreeRTOS 管理的内存堆中申请创建对象所需的内存&#xff0c;在对象删除后&#xff0c; 这块内存释放回FreeRTOS管理的内存堆中 静态创建&#xff1a;需用户提供各种内存空间&#xff0c;并且使用静态方式占用的内存空间一…

简单vlan划分和dhcp中继(Cisco Packet Tracer模拟)

文章目录 1. 前言2. 功能实现2.1. dhcp服务器接入2.2. 学校web服务器2.3. 设置学校dns服务器2.4. 设置线路冗余2.5. 配置ac。 1. 前言 在这里我们的计网作业是使用思科的Cisco Packet Tracer进行对校园网的简单规划&#xff0c;这里我对校园网进行了简单的规划&#xff0c;功能…

MySQL之CRUD、常见函数及union查询

文章目录 1.思维导图 1.思维导图

java: 写入数据到HBase

一、添加依赖 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hbase</groupId><art…

python+django超市进销存仓库管理系统s5264

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、由管理员和员工&#…

金和OA C6 MailTemplates.aspx sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 MailTemplates.aspx接口处存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注入漏…