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.mzph.cn/news/600275.shtml

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

相关文章

数字后端设计实现 | 数字后端PR工具Innovus中如何创建不同高度的row?

吾爱IC社区星球学员问题&#xff1a;Innovus后端实现时两种种不同高度的site能做在一个pr里面吗&#xff1f; 答案是可以的。 Innovus支持在同一个设计中中使用不同的row&#xff0c;但需要给各自子模块创建power domain。这里所说的不同高度的row&#xff0c;有两种情况。 1…

Docker一键极速安装Nacos,并配置数据库!

1 部署方式 1.1 DockerHub javaedgeJavaEdgedeMac-mini ~ % docker run --name nacos \ -e MODEstandalone \ -e JVM_XMS128m \ -e JVM_XMX128m \ -e JVM_XMN64m \ -e JVM_MS64m \ -e JVM_MMS64m \ -p 8848:8848 \ -d nacos/nacos-server:v2.2.3 a624c64a1a25ad2d15908a67316d…

指针大礼包6

第6题 &#xff08;10.0分&#xff09; 题号:5 难度:中 第8章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目&#xff1a;下列给定程序中函数fun的功能是…

代码随想录刷题第三十九天| 62.不同路径 ● 63. 不同路径 II

代码随想录刷题第三十九天 不同路径 (LC 62) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def uniquePaths(self, m: int, n: int) -> int:dp [[0 for _ in range(n1)] for _ in range(m1)]dp[0][1] 1for i in range(1,m1):for j in range(1, n1):dp[i]…

使用IDEA官方docker插件构建镜像

此方法同样适用于jetbrains系列的其他开发软件 在IDEA中&#xff0c;如果是maven项目&#xff0c;可以使用插件 <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version> &…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…

WPF 如何知道当前有多少个 DispatcherTimer 在运行

在 WPF 调试中&#xff0c;对于 DispatcherTimer 定时器的执行&#xff0c;没有直观的调试方法。本文来告诉大家如何在 WPF 中调试当前主线程有多少个 DispatcherTimer 在运行 在 WPF 中&#xff0c;如果有 DispatcherTimer 定时器在执行&#xff0c;将会影响到主线程的执行&a…

Qt6入门教程 2:Qt6下载与安装

Qt6不提供离线安装包&#xff0c;下载和安装实际上是一体的了。 关于Qt简介&#xff0c;详见&#xff1a;Qt6入门教程1&#xff1a;Qt简介 一.下载在线安装器 Qt官网 地址&#xff1a;https://download.qt.io/ 在线下载器地址&#xff1a;https://download.qt.io/archive/on…

Unity | NGO网络框架

目录 一、相关属性及变量 1.ServerRpc属性 2.ClientRpc属性 3.NetworkVariable变量 二、相关组件 1.NetworkManager 2.Unity Transport 3.Network Object 4.NetworkBehaviour&#xff1a; 5.NetworkTransform Syncing(Synchronizing) Thresholds Interpolation 三…

Linux下Redis6下载、安装和配置教程-2024年1月5日

Linux下Redis6下载、安装和配置教程-2024年1月5日 一、下载二、安装三、启动四、设置开机自启五、Redis的客户端1.Redis命令行客户端2.windows上的图形化桌面客户端 一、下载 1.Redis的官方下载&#xff1a;https://redis.io/download/ 2.网盘下载&#xff1a; 链接&#xff…

Docker overlay2文件busy,容器不能删除问题解决

文章目录 在删除docker容器的时候报错,说设备正忙通过 docker ps -a 查看有两个状态的dead的容器解决方法&#xff1a;1.查看所有挂载的设备2.截取设备的进程id3.清理进程(kill掉即可) 在删除docker容器的时候报错,说设备正忙 Error response from daemon: Driver overlay2 fai…

Linux的ping命令、wget命令、curl命令

一、ping命令 通过ping命令&#xff0c;可以检查指定的网络服务器是否是可联通状态 形式&#xff1a;ping [-c num] ip或主机名 -c&#xff1a;检查的次数&#xff0c;不使用-c&#xff0c;将无限次数持续检查 ip或主机名&#xff1a;被检查的服务器的ip地址或主机名地址 …

AOP(面向切面编程)基于XML方式配置

概念解释&#xff1a;&#xff08;理解基本概念方可快速入手&#xff09; 连接点&#xff08;joinpoint&#xff09; 被拦截到的点&#xff0c;因为Spring只支持方法类型的连接点&#xff0c;所以在Spring中连接点指的就是被拦截到的方法。 切入点&#xff08;pointcut&#x…

系列一、如何正确的获取Spring Cloud Alibaba Spring Cloud Spring Boot之间的版本对应关系

一、正确的获取Spring Cloud Alibaba & Spring Cloud & Spring Boot之间的版本对应关系 1.1、概述 Java发展日新月异&#xff0c;Spring Cloud Alibaba 、 Spring Cloud 、 Spring Boot在GitHub上的迭代也是异常的频繁&#xff0c;这也说明其社区很活跃&#xff0c;通…

【持续学习系列(六)】《iCaRL》

一、论文信息 1 标题 iCaRL: Incremental Classifier and Representation Learning 2 作者 Sylvestre-Alvise Rebuffi, Alexander Kolesnikov, Georg Sperl, Christoph H. Lampert 3 研究机构 University of Oxford/IST Austria 二、主要内容 论文主要探讨了如何开发能…

红队专题-Web安全/渗透测试-文件上传/下载/包含

文件上传/下载/包含 招募六边形战士队员利用目录穿越反弹SHELL实战测试2.2 提交报文修改检测3.2 文件内容检测绕过完整文件结构 检测 第四章&#xff1a;解析漏洞第一节 常见解析漏洞iis/nginx php fastcgi 取值错误 解析漏洞 &#xff08;配置错误&#xff09;nginx 文件名逻…

力扣labuladong一刷day52天LRU算法

力扣labuladong一刷day52天LRU算法 文章目录 力扣labuladong一刷day52天LRU算法概念一、146. LRU 缓存思路一&#xff1a;使用双向链表加map来手动实现。思路二&#xff1a;使用LinkedHashMap 概念 LRU的全称为Least Recently Used&#xff0c;翻译出来就是最近最少使用的意思…

有网友希望我推荐几个创建产品手册工具,这不就来了!

上次我有说到&#xff0c;企业应该充分认识到产品手册的重要性&#xff0c;并采取有效的策略和措施来制作和传播高质量的产品手册&#xff0c;以提升品牌知名度和市场份额。后台有网友问我除了设计排版的那种产品手册工具&#xff0c;还有什么方式可以去做产品手册。今天就介绍…

『App自动化测试之Appium应用篇』| Appium常用API及操作

『App自动化测试之Appium应用篇』| Appium常用API及操作 1 press_keycode1.1 键盘操作1.2 关于KeyCode1.3 press_keycode源码1.4 电话键相关1.5 控制键相关1.6 基本按键相关1.7 组合键相关1.8 符号键相关1.9 使用举例 2 swip方法2.1 swip说明2.2 swip使用方法2.3 使用示例 3 sc…

用redis广播消息更新集群环境下本地缓存

前言 在软件系统开发中&#xff0c;有时需要将系统元数据放在数据库中&#xff0c;使用时再从数据库中查询。为避免频繁访问数据库&#xff0c;提升系统性能&#xff0c;需要将更新不频繁的数据放到本地缓存中。在元数据变动的时候再更新本地缓存。如果单节点时不存在问题&…