Python入门-函数

1.函数的定义及调用

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

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

def get_sum(num):   #num叫形式参数
    s=0
    for i in range(1,num+1):
        s+=i
    print(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):
    pass

def 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))  #None

def calc2(a,b):
    s=a+b
    return 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=0
    odd_sum=0 #奇数和
    even_sum=0 #偶数和
    for i in range(1,num+1):
        if i%2!=0:  #说明是奇数
            odd_sum+=i
        else:
            even_sum+=i
        s+=i
    return 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 + b


print(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的类型是 function
    print(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))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 发布自定义镜像到公共仓库

Docker 发布自定义镜像到公共仓库 引言 Docker 是一种轻量级、便携式的容器化技术&#xff0c;可以使应用程序在不同环境中更加可移植。在本文中&#xff0c;我们将学习如何使用 Docker 从公共仓库拉取 Nginx 镜像&#xff0c;定制该镜像&#xff0c;添加自定义配置文件&…

中国到雅加达专线,快速双清到门!

中国到雅加达专线&#xff0c;快速双清到门&#xff01;&#x1f680;&#x1f30f; 嘿&#xff0c;亲爱的小伙伴们&#xff01;有关中国到雅加达的专线&#xff0c;快来了解一下吧&#xff01;&#x1f1e8;&#x1f1f3;✈️&#x1f1ee;&#x1f1e9; 专线亮点&#xff1a…

Python从入门到网络爬虫(面向对象详解)

前言 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本…

thingsboard前端缓存--nginx

thingsboardnginx thingsboard部署到阿里云服务器之后&#xff0c;由于登录界面要发送的文件很大&#xff0c;并且服务器的带宽目前有限&#xff0c;因此配置一个nginx&#xff0c;进行前端页面的一些缓存&#xff0c;参考了https://qianchenzhumeng.github.io/posts/Nginx%E5…

如何解决大语言模型的幻觉问题

如何解决大模型的「幻觉」问题&#xff1f; 什么是大模型「幻觉」 在人类生活中&#xff0c;幻觉表示虚假的但是我们分辨不清楚的事物&#xff0c;在大语言模型中&#xff0c;[幻觉]即代表模型生成的虚假的文本&#xff0c;这中情况很容易导致一些错误的发生 造成大模型「幻觉…

静态网页设计——网上书店(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;网上式的书店。是一种高质量&#xff0c;更快捷&#xff0c;更方便的购书方式。网上书店不仅可用于图书的在线销售…

简易2048游戏的实现(C++)

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09; 目录 一、效果图二、代码&#xff08;带注释&#xff09;三、说明 一、效果图 二、代码&#xff08;带…

yolov8实战第五天——yolov8+ffmpg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署&#xff08;python推理&#xff09;&#xff08;保姆教学&#xff09;-CSDN博客 今天&#xff0c;我们继续y…

比例阀放大器控制阀类型

控制各种不带电气位移反馈的单电磁铁比例方向阀、比例压力阀、比例流量阀、比例减压阀、比例节流阀、比例插装阀的BEUEC比例放大器&#xff0c;供电24VDC&#xff0c;输入指令、输出电流、颤振频率、斜坡时间等可现场设置&#xff0c;适用不同阀易匹配&#xff0c;带参考电压输…

openwrt使用docker部署adguard home

docker创建macvlan&#xff0c;目的使adguard home具备宿主机同网段IP docker network create -d macvlan --subnet192.168.88.0/24 --gateway192.168.88.254 -o parentbr-lan bridge-host&#xff08;虚拟网卡名字)拉取adguard home镜像 docker pull adguard/adguardhome:la…

记一次:职业规划与心灵成长

前言&#xff1a;csdn组织了2023年的年度征文&#xff0c;为了响应号召&#xff08;嘘~其实为了那个铭牌&#xff09;&#xff0c;加上这么多年了也该总结一下了&#xff0c;就写了这么一篇&#xff08;公司正好让写年终总结&#xff0c;巧了么这不是&#xff09; 一、感谢部分…

对图片进行数据增强(基于pytorch)

背景 在进行机器学习的任务中&#xff0c;我们的训练数据往往是有限的&#xff0c;在有限的数据集上获得较好的模型训练结果&#xff0c;我们不仅要在模型结构上下功夫&#xff0c;另一方面也需要对数据集进行数据增强 图片数据增强 图像数据增强是一种在训练机器学习和深度学…

CentOS 8 基于官方源码制作openssh 9.6 rpm包(含ssh-copy-id、openssl) —— 筑梦之路

CentOS 8 制作openssh9.6 rpm(含ssh-copy-id命令)包 —— 筑梦之路_centos8 rpmbuild -ba openssh.spec 9.6-CSDN博客 CentOS 8 制作openssh9.0/9.2/9.3 rpm包——筑梦之路_centos8 openssl rpm包-CSDN博客 效果截图&#xff1a; 和使用官方默认的spec文件制作的区别&#xff…

Redis命令---List篇

目录 1.Redis Lindex 命令 - 通过索引获取列表中的元素简介语法可用版本: > 1.0.0返回值: 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内&#xff0c;返回 nil 。 示例 2.Redis Rpush 命令 - 在列表中添加一个或多个值简介语法可用版本: > 1.0.0返…

springboot社区养老服务系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1 研究背景 当…

记一次 .NET 某药厂业务系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 前段时间有位朋友找到我&#xff0c;说他们的程序出现了CPU爆高&#xff0c;让我帮忙看下怎么回事&#xff1f;这种问题好的办法就是抓个dump丢给我&#xff0c;推荐的工具就是用 procdump 自动化抓捕。 二&#xff1a;Windbg 分析 1. CPU 真…

drf知识--11

补充 # 研究simple-jwt提供的Token类&#xff1a; 1、RefreshToken:生成refresh token的类 2、AccessToken:生成refresh token的类 3、Token&#xff1a;他们俩的父类 4、str(RefreshToken的对象)---得到字符串 refresh token&#xff0c;Token类写了 …

【小白专用】PHP识别是电脑或手机访问网站

现在通过手机访问网站越来越流行了&#xff0c;如果我们希望统计一下网站通过pc&#xff0c;手机移动端的各自访问量的情况&#xff0c;或者需要为手机移动端做一些特别的处理的话&#xff0c;那么我们就需要对访问网站的用户的客户端做一下鉴别了&#xff0c;下面这个实例就是…

vue2 消息弹框

父页面 <template><div style"margin-top: 20px"><div class"nav-style msg-style"><el-badge :value"value" :max"99" class"num" v-if"value > 0"><i class"el-icon-bell&…

关于开关量信号隔离器在水泥厂的应用探讨-安科瑞 蒋静

摘要&#xff1a;在水泥厂生产过程中&#xff0c;需要皮带与提升机进行运输物料&#xff0c;回转下料器进行投放物料。其中涉及大量电动机相关的机械运动&#xff0c;对这些机械运动状态进行检测&#xff0c;可以及时发现问题避免造成事故。针对机械位置检测&#xff0c;通常使…