Python第二语言(三、Python函数def)

news2024/11/18 4:20:33

目录

1. Python函数(def 函数名():)

1.1 sorted对容器进行排序:无法指定排序规则

1.2 sort对容器自定义排序:可以指定排序规则

1.3 获取变量长度函数(len)

1.4 函数的定义

1.5 函数-传参定义

1.6 函数的说明文档(阅读代码效率低下,使用注释)

1.7 函数的嵌套调用(函数中,再次调用其他函数)

1.8 变量作用域

2. Python函数进阶

2.1 函数的多返回值

2.2 函数的多种传参方式

2.3 匿名函数lambda关键字


1. Python函数(def 函数名():)

1.1 sorted对容器进行排序:无法指定排序规则
arr = [5, 4, 3, 2, 1]
# 默认按照从小到大的方式进行排序
print(sorted(arr))

1.2 sort对容器自定义排序:可以指定排序规则
  • 使用方式:

    列表.sort(key=选择排序依据的函数,reverse=TruelFalse)

    • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据;
    • 参数reverse,是否反转排序结果,True表示降序,False表示升序;

列表的sort方法: 

my_list = [["a", 33], ["b", 11], ["c", 55]]

def choose_sort_key(element):
    return element[1]

# 按照choose_sort_key的值reverse=True降序来排序,False为升序
my_list.sort(key=choose_sort_key, reverse=True)
print(my_list)

lambda简写形式: 

# 简写
my_list = [["a", 33], ["b", 11], ["c", 55]]
# 按照choose_sort_key的值reverse=True降序来排序,False为升序
my_list.sort(key=lambda element: element[1], reverse=True)
print(my_list)

1.3 获取变量长度函数(len)

print(len("张三你好"))

1.4 函数的定义
def fun_name(parm):
    parm = 1
    return parm

def 函数名(传入参数):
    函数体
    return 返回值

调用函数: 

1.5 函数-传参定义
  • 函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数:
    • 参数之间使用逗号进行分隔;
  • 函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值:
    • 传入的时候,按照顺序传入数据,使用逗号分隔;

def(param)函数传参:

def add(x, y):  # 形参
    print(x + y)
    return x + y


# 函数调用传参 实参
add(5, 5)

return返回值: 

  1. 函数在执行完后,返回给调用者的结果;
  2. 使用return关键之来返回结果;
  3. 函数体中在遇到return后就结束了,所以写在return之后的代码不会执行;

None(函数中没有写return,那么就默认是None类型的)

  1. None是类型'NoneType'的字面量,用于表示:空的,无意义的;
  2. 函数在不适用return语句时就返回None,或主动使用return None;
  3. 场景:变量定义;函数返回值;if判断;
# 1.None用于声明无初始内容的变量
name = None


def add(num):
    if num > 3:
        return num
    return None  # 2.函数返回值


# 函数调用传参
result = add(2)

if not result:
    # 3.进入if表示result是None值,也就是False
    print("函数体处于None")

1.6 函数的说明文档(阅读代码效率低下,使用注释)
def add(num):
    """
    
    :param num:
    :return:
    """
    if num > 3:
        return num
    return None

1.7 函数的嵌套调用(函数中,再次调用其他函数)
# 内嵌函数
def add1():
    print(1)
    add2()


def add2():
    print(2)
    add3()


def add3():
    print(3)


# 调用函数
add1()

1.8 变量作用域

局部变量: 

变量作用域指的是变量的作用范围;(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量:

1. 局部变量:是定义在函数体内部的变量,即只在函数体内部生效:

  • 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量;

2. 全局变量:指的是在函数体内、外都能生效的变量;

num = 10  # 定义全局变量


def test_a():
    print(num)  # 访问全局变量


def test_b():
    print(num)  # 访问全局变量


test_a()
test_b()

        变量使用的时候,如果在函数内又重置了一个变量,那此时这个变量又变成了局部变量,仅在当前函数中可用,并不会改变全局的变量;

num = 10  # 定义全局变量


def test_a():
    num = 20  # num现在是个局部变量,不会影响到全局变量
    print(num)  # 访问全局变量


test_a()
print("全局变量:" + str(num))

global将局部变量定义成全局变量: 

在函数内部定义了global全局变量,那么最终结果会被改变;

num = 10  # 定义全局变量


def test_a():
    global num  # global声明num是个全局变量
    num = 20
    print(num)  # 访问全局变量


test_a()
print("全局变量:" + str(num))

2. Python函数进阶

2.1 函数的多返回值
def test_return():
    return 1, 2


x, y = test_return()
print(x)  # 结果1
print(y)  # 结果2

2.2 函数的多种传参方式

1. 函数的多种传参方式: 

  1. 位置参数;
  2. 关键字参数;
  3. 缺省参数;
  4. 不定长参数;

2. 位置传参(根据参数的位置传参)

  • 注意:传递的参数和定义的参数的顺序及个数必须一致;
# 位置参数:调用函数时根据函数定义的参数位置来传递参数
def user_info(name, age, gender):
    print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info('yiyi', 20, '男')

3. 关键字传参(根据参数的名字传参,也可与位置传参 混合传参)

  • 注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序;
# 关键字参数:函数调用时通过"键=值"形式传递参数
def user_info(name, age, gender):
    print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')


# 关键字传参
user_info(name="yiyi", age=20, gender="男")
# 可以不按照固定顺序
user_info(age=20, gender="男", name="yiyi")
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("yiyi", age=20, gender="男")

4. 默认参数 || 缺省参数 (默认给参数传递一个值,如若不传参默认是原本的参数)

  • 注意:函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值;
def user_info(name, age, gender="男"):
    print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info("yiyi", 20)
user_info("zhangsan", 18, "女")

5. 不定长参数(可通过*(*默认位置传参) 或者 ** (**字典传参,需要键值对)不定义长度的参数传递)

  • 不定长参数:不定长参数也叫可变参数,用于不确定调用的时候会传递多个参数(不传参也可以)的场景;
  • 作用:当调用函数时不确定参数个数时,可以使用不定长参数;
  • 不定长参数的类型:
  1. 位置传递;
  2. 关键字传递;

位置传递不定长参数 *args (需要传递的形式为元组tuple形式): 

  • 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递;
# 不定长参数
def user_info(*args):
    print(args)

user_info('yiyi')
user_info('zhangsan', 18)

关键字传递不定长参数(需要传递的形式为字典dict()形式)

参数是"键=值"形式的情况下,所有的"键=值"都会被kwargs接受,同时会根据"键=值"组成字典;

def user_info(**kwargs):
    print(kwargs)

# {'name': 'yiyi', 'age': 18, 'id': 120}
user_info(name='yiyi', age=18, id=120)

2.3 匿名函数lambda关键字

1. 函数作为参数传递(可以将函数当作参数一样,传递给其它函数)

  • 函数本身是可以作为参数,传入另一个函数中进行使用的;
  • 将函数传入的作用在于:传入计算逻辑,而非传入数据;
  • 在代码中,不仅仅是相加,相减、相除等如何逻辑都可以自定义并作为函数传入;

案例:

def test_func(compute):
    result = compute(1, 2)
    print(result)


# 将函数当作参数传入到函数中
def compute(x, y):
    return x + y


test_func(compute)

2. lambda匿名函数(lamdba 参数,参数 : 逻辑代码,只能写一行)临时函数,只可写一次的匿名函数;

  • 定义:
    • def关键字,可以定义带有名称的函数;
    • lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用;

无名称的匿名函数,只可临时使用一次;

使用def和使用lambda,定义的函数功能完全一致,只是lambda关键字定义的函数是匿名的,无法二次使用;

  • 注意:
    • 匿名函数用于临时构建一个函数,只用一次的场景;
    • 匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数;
# 通过def关键字,定义一个函数,并传入
def test_func(compute):
    result = compute(1, 2)
    print(result)


# 通过lambda关键字,传入一个一次性使用的lambda匿名函数
test_func(lambda x, y: x + y)  # 结果为3

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

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

相关文章

JFinal学习06 控制器——getPara()接收数据

JFinal学习06 控制器——getPara()接收数据 视频来源https://www.bilibili.com/video/BV1Bt411H7J9/?spm_id_from333.337.search-card.all.click 文章目录 JFinal学习06 控制器——getPara()接收数据零、JFinal数据提交的三种方式一、get提交二、post提交三、url参数化提交四、…

基于spring boot+vue的校园新闻管理系统

随着网络不断的普及发展,校园新闻网站依靠网络技术的支持得到了快速的发展, 首先要从用户的实际需求出发, 通过了解用户的需求开发出具有针对性的首页、校园 新闻、 论坛交流、 留言反馈、 个人中心、 后台管理功能, 利用目前网络…

MotionEditor_ 通过内容感知扩散编辑视频运动

图1. MotionEditor:一种基于扩散的视频编辑方法,旨在将参考视频的运动转移到源视频中。 摘要 现有的基于扩散的视频编辑模型在随时间编辑源视频的属性方面取得了显著进展,但在修改运动信息的同时保持原始主角的外观和背景方面存在困难。为…

计算机网络 期末复习(谢希仁版本)第2章

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。4 个特性: 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性:指明在接口电缆的各条线上出现…

gitlabcicd-k8s部署gitlab

一.安装准备环境 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-deploy.yaml nfs的ip是192.168.110.190 挂载目录是/data/data 注意所需要的目录需要创建:/data/data/gitlab/config ,/data/data/gitlab/logs ,/dat…

HarmonyOS(二十三)——HTTP请求实战一个新闻列表

在前一篇文章,我们已经知道如何实现一个http请求的完整流程,今天就用官方列子实战一个简单的新闻列表。进一步掌握ArkTS的声明式开发范式,数据请求,常用系统组件以及touch事件的使用。 主要包含以下功能: 数据请求。…

47.各种类型的线程池

线程池继承体系 Executor(interface)->ExecutorService(interface)->ThreadPoolExecutor(class) Executors.newFixedThreadPool 核心线程数最大线程数(没有救急线程被创建),所以也无需超时时间阻塞队列LinkedBlockingQueue,可以放任意…

探索营销系统业务架构的设计与应用

随着市场竞争的日益激烈和消费者需求的不断变化,营销系统作为企业营销管理的重要组成部分,扮演着至关重要的角色。本文将深入探讨营销系统业务架构的设计与应用,从客户关系管理、营销活动管理、数据分析和智能化服务等方面进行全面解析&#…

AWS EMR Serverless

AWS概述 EMR Serverless 简介 在AWS概述一文中简单介绍过AWS EMR, 它是AWS提供的云端大数据平台。借助EMR可以设置集群以便在几分钟内使用大数据框架处理和分析数据。创建集群可参考官方文档:Amazon EMR 入门。但集群创建之后需要一直运行,用户需要管理…

vuInhub靶场实战系列--prime:1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

RPA机器人的技术挑战与解决方案

RPA在企业转型过程中彰显出巨大的潜力,每年为企业节省大量人力以及运营成本,从而实现企业经营的降本提质增效。但要成功部署和实施RPA,需要专业人员、流程和技术的精心组合。企业管理者需要根据自己的实际需求,选择一个稳定可靠、…

Hadoop3:MapReduce之InputFormat数据输入过程整体概览(0)

一、MapReduce中数据流向 二、MapTask并行度 1、原理概览 数据块:Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapRed…

Python私教张大鹏 Vue3 整合 Ant Design Vue

创建项目 npm create vite启动项目 cd vue3_antdesignvue pnpm i pnpm dev使用webstorm打开项目 配置启动 整合AntDesignVue 安装依赖: pnpm install ant-design-vue pnpm install unplugin-vue-components -D修改 vite.config.js import {defineConfig} from …

HarmonyOS鸿蒙-DevEco Studio工具

一、官网下载DevEco Studio工具地址 文章内容: 1、下载工具 2、运行项目 3、安装启动器 https://developer.harmonyos.com/cn/develop/deveco-studio/https://developer.harmonyos.com/cn/develop/deveco-studio/ 下载不同平台工具目录 : 二、 安装DevEco Studio工具 安装的配置…

Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解

前言 在Web开发中,Three.js是一个极为强大的库,它让开发者能够轻松地在浏览器中创建和展示3D图形。随着3D技术在网页设计、游戏开发、数据可视化等领域的广泛应用,用户与3D场景的交互变得日益重要。而要实现这种交互,一个核心的技…

PID算法在电机速度控制上的应用

目录 概述 1 系统硬件框架 1.1 框架介绍 1.2 硬件实物图 2 STM32Cub生成工程 2.1 软件版本信息 2.2 配置参数 ​编辑2.3 生成项目 3 PID算法实现 3.1 概念 3.2 代码实现 4 其他功能实现 4.1 设置电机速度 4.2 PID算法控制电机 4.3 功能函数的调用 5 测试 5.1 …

Dell戴尔XPS 16 9640 Intel酷睿Ultra9处理器笔记本电脑原装出厂Windows11系统包,恢复原厂开箱状态oem预装系统

下载链接:https://pan.baidu.com/s/1j_sc8FW5x-ZreNrqvRhjmg?pwd5gk6 提取码:5gk6 戴尔原装系统自带网卡、显卡、声卡、蓝牙等所有硬件驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell、迈克菲等预装软…

Renesas MCU之SCI_SPI接口驱动LCD

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 FSP配置项目 2.1 配置项目参数 2.2 生成项目框架 3 代码实现 3.1 SPI的库函数 3.1.1 R_SCI_SPI_Open() 3.1.2 R_SCI_SPI_Read() 3.1.3 R_SCI_SPI_Write() 3.2 应用函数…

地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析教程

原文链接:地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606047&idx5&sn8c9701518e13b85d8429186fcfe98ad8&chksmfa821ef8cdf597ee7a8a1…

容器环境中安全性的演变

近年来,容器已成为现代IT基础设施中不可或缺的一部分。它们在部署应用程序时提供了极大的灵活性和效率。 然而,随着容器化的普及,保护这些环境的需求也随之增长。容器安全被定义为在容器化环境中防范威胁并确保符合安全标准。它已成为解决使…