Python入门-函数

news2024/9/25 3:20:10

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))

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

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

相关文章

web期末作业数字时钟,实时更新,音乐播放

文章目录 月球动态引导页加载引导页主页面主页面html需要完整代码私信我 月球动态引导页 加载引导页 主页面 主页面html <!DOCTYPE html> <html lang"zh-CN"><head><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&…

OpenAI 拟每年投入 100-500 万美元,以获取新闻使用许可

最近两位媒体公司高层透露&#xff0c;OpenAI正积极与新闻出版公司进行谈判&#xff0c;提出每年投入100万至500万美元的费用&#xff0c;以获取将新闻文章用于训练大型语言模型的授权。 OpenAI目前正与大约十几家媒体公司进行谈判&#xff0c;但有报道称&#xff0c;即使对于…

【自学笔记】01Java基础-07面向对象基础-01封装

记录学习Java基础中有关面向对象编程的基础知识&#xff0c;包括面向对象思想&#xff0c;构造方法&#xff0c;封装思想&#xff0c;JavaBean。 1 面向对象概述 1.1 什么是面向对象编程 严谨来说&#xff1a;   面向对象编程&#xff08;Object-Oriented Programming&…

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围&#xff0c;需要监听onDrop配合.onDragEnter((event: DragEvent) …

ARCGIS PRO SDK 使用条件管理 Pro UI

ARCGIS PRO UI简单介绍以下&#xff1a; 第一步&#xff1a;在Config.daml中在</AddInfo>标签下加上条件<conditions>标签&#xff08;必须添加的&#xff09; <conditions><!-- 定义条件 &#xff0c;此处定义了两个--Tab 另一个为 group><insert…

【AI视野·今日CV 计算机视觉论文速览 第280期】Mon, 1 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 1 Jan 2024 Totally 46 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning Vision from Models Rivals Learning Vision from Data Authors Yonglong Tian, Lijie Fan, Kaifeng Chen, Dina K…

Nodejs+express后端学习笔记(1)

1 Node.js安装 1、下载安装包&#xff1a;进入官网&#xff08;https://nodejs.org/en&#xff09;&#xff0c;下载左侧的稳定版。 2、选择安装位置&#xff0c;不用勾选自动安装必要工具。 其他都默认Next。 配置环境&#xff0c;具体参考本文章&#xff1a; https://blo…

java字节码

1. 字节码 1.1 什么是字节码&#xff1f; Java之所以可以“一次编译&#xff0c;到处运行”&#xff0c;一是因为JVM针对各种操作系统、平台都进行了定制&#xff0c;二是因为无论在什么平台&#xff0c;都可以编译生成固定格式的字节码&#xff08;.class文件&#xff09;供…

二叉树的直径,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 解题方法分析&#xff1a; 解题分析&#xff1a; 补充说明&#xff1a; 代码优化&#xff1a; 题目地址&#xff1a; 543. 二…

​电脑技巧:​笔记本电脑电流声的原因和解决方案

目录 一、音频设备接口接触不良 二、笔记本电源问题 三、笔记本电脑驱动程序问题 四、音频硬件问题 五、操作系统内部电磁干扰 六、最后总结 大家在日常生活当中&#xff0c;笔记本电脑已经成为我们工作、学习和娱乐的重要工具。但有时我们在使用过程中可能会遇到一个令人…

MySQL-数据库概述

数据库相关概念&#xff1a; 数据库(DateBase)简称DB,就是一个存储数据的仓库&#xff0c;数据有组织的进行存储。 数据库分为关系型数据库简称RDBMS和非关系型数据库 关系型数据库简称RDBMS:建立在关系模型的基础上&#xff0c;由多张相互连接的二维表组成的数据库.简单来说…

项目整合积木报表-设计页面

项目整合积木报表-设计页面 <template><div><iframe id"dome" :srcsrc ></iframe></div> </template><script>export default {data(){return{src:configSrc.src"/jmreport/view/836138868821839872"}}} </…

CentOS 7.6下的HTTP隧道代理配置详解

在CentOS 7.6操作系统中&#xff0c;配置HTTP隧道代理需要一定的技术知识和经验。下面我们将详细介绍如何配置HTTP隧道代理&#xff0c;以确保网络通信的安全性和稳定性。 首先&#xff0c;我们需要了解HTTP隧道代理的基本原理。HTTP隧道代理是一种通过HTTP协议传输其他协议数…

Android 正圆

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&…

遥感影像-语义分割数据集:山体滑坡数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该遥感滑坡数据集由卫星光学图像、滑坡边界的形状文件和数字高程模型组成。该数据集中的所有图像&#xff0c;即770张滑坡图像&#xff08;红点&#xff09;和2003张非滑坡图像&#xff0c;都是从2018年5月至8月拍摄的TripleSat卫星图像中截取…

NGUI基础-三大基础控件之Sprite精灵图片

目录 Sprite是什么 如何创建Sprite 参数相关 Atlas Sprite Material Fixed Aspect Type Simple(普通模式&#xff09; Sliced(切片模式&#xff09; Tiled(平铺模式&#xff09; Filled(填充模式&#xff09; 常见的填充模式有以下几种&#xff1a; Advanced(高级…

Java IO知识点

1. Java IO IO&#xff0c;即输入&#xff08;in&#xff09;和输出&#xff08;out&#xff09;&#xff0c;指应用程序和外部设备之间的数据传递&#xff0c;常见的外部设备包括文件、管道、网络连接。Java 中是通过流处理 IO 的&#xff0c; 那么什么是流&#xff1f; 流…

AcWing 861. 二分图的最大匹配—匈牙利算法

题目链接:AcWing 861. 二分图的最大匹配 问题描述 分析 该题是一道典型的二分图匹配模板题&#xff0c;求解最大匹配数&#xff0c;可以用匈牙利算法来解决&#xff0c;下面举一个例子来说明匈牙利算法是如何运行的 以该图为例&#xff0c;其中 1可以匹配a,c 2可以匹配a,b 3…

Docker-Compose部署Redis(v7.2)哨兵模式

文章目录 一、前提准备1. 主从集群2. 文件夹结构 二、配置文件1. redis server配置文件2. redis sentinel配置文件3. docker compose文件 三、运行四、测试 环境 docker desktop for windows 4.23.0redis 7.2 一、前提准备 1. 主从集群 首先需要有一个redis主从集群&#x…

C++ 实现对战AI五子棋

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 为了能够快速上手一门语言&#xff0c;我们往往在学习了基本语法后&#x…