python3——函数

news2024/11/24 4:08:36

目录

一、函数定义

二、函数调用

1.打印Hello World

2.判断最大值

3.计算矩形面积

4.help说明文档

三、参数传递

(一)位置参数

(二)关键字参数

(三)默认参数(缺省参数)

(四)可变参数(收集参数)

1.位置可变参数(接收所有的位置参数,返回一个元组)

2.关键字可变参数(接收所有关键字,返回一个字典)

(五)变量

1.局部变量

2.全局变量

3.在函数内部修改全局变量(global)

四、多函数程序

(一)多函数程序执行流程

(二)代码示例

五、函数返回值

(一)return

(二)多函数返回值做参数传递

六、拆包

(一)元组拆包

1.代码示例:

2.元组拆包:

(二)字典拆包

七、递归函数

八、Lambda表达式

(一)Lambda表达式概述

1.什么时候用lambda表达式?

2.lambda表达式语法

3.注意事项

(二)lambda表达式参数形式

1.无参数:

2.一个参数:

3.多个参数:

4.默认参数:

5.可变位置参数:

6.带条件的lambda表达式:

7.列表中的字典数据排序:

九、Lambda表达式之——高阶函数

(一)filter(函数名,可迭代对象)

1.查找[1,10]中的偶数:

(二)map(函数名,迭代对象)

1.计算[1,4]中每个元素的平方:

(三) reduce(函数名(x,y),可迭代对象)

1.求列表内值的累加和:

2.计算[1,100]累加和:


一、函数定义

        函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。python中的函数相当于java中的方法。

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):

        函数体

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

注意:函数名要小写,函数一定要调用,不调用不会执行,有形参要传入参数

二、函数调用

1.打印Hello World

def helloworld():
    print('Hello World!!!')


helloworld()  # Hello World!!!

2.判断最大值

def nummax(a, b):
    if b > a:
        return b
    else:
        return a


a = 10
b = 8
print(nummax(a, b))   # 10

3.计算矩形面积

# 计算面积函数(长*宽)
def area(height, width):
    return height * width


i = area(height=10, width=2)
print('面积为:', i)   # 面积为: 20

4.help说明文档

注意:help的内容一定要写在函数名下方才可以打印出来,否则无效,支持换行

def test01(a, b):  # a,b是形参
    """最大值
    函数"""  # 说明文档可以换行
    if a >= b:
        return a
    else:
        return b


# 调用函数
print('最大值为:', test01(4, 8))
help(test01)

运行结果:

三、参数传递

(一)位置参数

定义:在定义函数时,参数的名字和位置已被确定。

def 函数名(姓名,年龄,性别):

        print(f'您的姓名是{姓名},性别是{性别},年龄是{年龄}')

函数名(‘张三’,20,男)

注意:形参与实参位置对应才能够生效

def abc(姓名, 年龄, 性别):
    print(f'您的姓名是{姓名},性别是{性别},年龄是{年龄}岁')


abc('张三', 20, '男')    # 您的姓名是张三,性别是男,年龄是20岁

(二)关键字参数

        定义:传入实参时,明确参数的变量名,参数之间不存在先后顺序。函数调用时,通过“键-值”的形式加以指定,清除了参数的顺序问题。

def test02(姓名, 年龄, 性别):
    print(f'您的姓名是{姓名},性别是{性别},年龄是{年龄}岁')


test02('张三', 性别='男', 年龄=20)    # 您的姓名是张三,性别是男,年龄是20岁

注意:调用函数时,如果有位置参数,位置参数必须在关键字参数的前面,否则会报错。

(三)默认参数(缺省参数)

        定义:参数指定默认值,调用时不传实参,就用默认值。

def test03(姓名, 年龄, 性别='男'):
    print(f'您的姓名是{姓名},性别是{性别},年龄是{年龄}岁')

test03('张三', 20)    # 您的姓名是张三,性别是男,年龄是20岁
test03('李四', 23, 性别='男')   # 您的姓名是李四,性别是男,年龄是23岁

注意:调用函数时,如果由位置参数,位置参数必须在默认参数的前面,否则会报错。

(四)可变参数(收集参数)

1.位置可变参数(接收所有的位置参数,返回一个元组)

def 函数名(*args):

print(args)

def test04(*args):
    print(args)


test04(20, 80)  # (20, 80)

2.关键字可变参数(接收所有关键字,返回一个字典)

def test05(**kwargs):
    print(kwargs)


test05(name='王五', age=17, gender='男')

# {'name': '王五', 'age': 17, 'gender': '男'}

(五)变量

1.局部变量

        定义在函数内部的变量,即只在函数内部生效。

def test06():
    a = 45  # 定义局部变量
    print(a)  # 函数体内部(定义函数下方缩进代码)访问,能访问到a这个变量


test06()  # 调用函数
print(a)  # 报错!!!  a是内部变量,作用域在函数内部,外部无法访问

2.全局变量

        定义在函数外部的变量,即只在函数内部和外部都生效。

a = 78


def test07():
    print(a)


test07()    # 调用函数    78
print(a)    # 78

3.在函数内部修改全局变量(global)

注意:不要轻易修改全局变量,除非万不得已!!!

a = 78


def test07():
    global a  # 声明a为全局变量(外部变量)
    a = 10  # 对变量a重新赋值
    print(a)


test07()  # 调用函数  10

四、多函数程序

(一)多函数程序执行流程

        一般在实际开发过程中,一个程序往往由多个函数组成,并且多个函数共享某些数据。

多函数公用全局变量的流程:

1.声明全局变量

2.定义两个函数

3.函数1修改全局变量,函数2访问全局变量

4.先调用函数1(函数1修改了全局变量),再调用函数2时就可以使用修改后的全局变量了。

(二)代码示例

a = 999


def test08():
    global a  # 声明a是一个全局变量,就是外部变量
    a = 20  # 修改变量a的值
    print(a)


def test09():
    print(a)


test09()  # 999
test08()  # 20

五、函数返回值

(一)return

        原理与java中的return一样。

1.如果函数中有多个return只返回符合条件的那一句,遇到return退出当前函数。

2.多个返回值携程return a,b 返回为一个元组。

3.return后面可以连接列表、元组或字典,也能返回多个返回值。

代码示例:

def test10(a, b):
    return a + b


i = test10(4, -9)
print(i)  # -5

(二)多函数返回值做参数传递

编写步骤:

1.定义函数1,return返回一个值。

2.定义带形参的函数2,打印形参。

3.将调用函数1的返回值,赋值给一个变量。例如:变量名=函数名1()。

4.调用函数2,用刚才的变量做参数。例如:函数名2(变量名)。

代码示例:

def test11():
    return 11


def test12(a):
    return a


b = test11()
print(b)  # 11
c = test12(b)
print(c)  # 11

六、拆包

(一)元组拆包

元组拆包——return后面有多个变量,用","号分割会返回一个元组。

如果不显示元组,而是分开显示后面的变量值就要用到元组拆包。

1.代码示例:

def test13(a, b, c):
    return a, b, c


i = test13(7, 8, 9)
print(i)  # (7, 8, 9)

2.元组拆包:

def test14():
    return 11, 45


a, b = test14()
print(a)  # 11
print(b)  # 45

(二)字典拆包

        对字典拆包取来的是字典的“键”。

代码示例:

# 新建一个字典
sites = {'name': '张三', 'age': 18}


def test14():
    return sites


a, b = test14()
print(a)  # 返回键
print(b)

print(sites[a])  # 返回键对应的值
print(sites[b])

print(a, '-->', sites[a])  # 返回键和值
print(b, '-->', sites[b])

运行结果:

七、递归函数

函数内部自己调用自己,必须留有出口。

经典案例:计算1~100的和

递归只能计算[1,998]以内的累加和,>=999就会报RecursionError错误。

# 计算1~100的和
def test15(a):
    if a == 1:
        return 1  # 如果是1,直接返回1--设置的出口
    num = a + test15(a - 1)  # 如果不是1,重复执行累加
    return num  # 返回累加的结果


i = test15(100)
print(i)  # 5050

八、Lambda表达式

(一)Lambda表达式概述

1.什么时候用lambda表达式?

当函数有一个返回值,且只有一句代码,可以用lambda简写。

2.lambda表达式语法

lambda 形参:表达式

3.注意事项

1.形参可以省略,函数的参数在lambda中也适用。

2.lambda函数能接收任何数量的参数但只能返回一个表达式的值。

(二)lambda表达式参数形式

1.无参数:

def test16():
    return 16


print(test16())  # 16

# 使用lambda改进后:
test17 = lambda: 100
print(test17())    # 100

# 更简洁的写法:
print((lambda: 100)())    # 100

2.一个参数:

def test18(a):
    return a


print(test18(100))  # 100

# lambda写法
print((lambda a: a)(100))  # 100

3.多个参数:

def test19(a, b):
    return a + b


print(test19(10, -1))  # 9

# lambda写法:
print((lambda a, b: a + b)(10, -1))  # 9

4.默认参数:

def test20(name, age, gender='男'):
    return name, age, gender


print(test20('张三', 10))  # ('张三', 10, '男')

# lambda写法:
print((lambda a, b, c=5: a + b + c)(1, 3))  # 9

5.可变位置参数:

def test21(*args):
    return args


print(test21(1, 2, 3))  # (1, 2, 3)


# 返回元组
print((lambda *args: args)(1, 2, 3))  # (1, 2, 3)

# 返回字典
print((lambda **kwargs: kwargs)(name='张三', age=20))  # {'name': '张三', 'age': 20}

6.带条件的lambda表达式:

条件语句(三目运算):条件成立执行的表达式if条件else条件不成立执行的表达式。

print((lambda a, b: a if a > b else b)(1, 4))  # 4

7.列表中的字典数据排序:

sites = [{'name': '张三', 'age': 48}, 
         {'name': '李四', 'age': 28}, 
         {'name': '王五', 'age': 38}]
sites.sort(key=lambda x: x['age'], reverse=False)
print(sites)
# [{'name': '李四', 'age': 28}, {'name': '王五', 'age': 38}, {'name': '张三', 'age': 48}]

九、Lambda表达式之——高阶函数

高阶函数就是基于已有的函数定义新函数,以函数作为参数,返回也是函数。

(一)filter(函数名,可迭代对象)

1.查找[1,10]中的偶数:

print(list(filter(lambda x: x % 2 == 0, range(1, 11))))
# [2, 4, 6, 8, 10]

(二)map(函数名,迭代对象)

1.计算[1,4]中每个元素的平方:

print(list(map(lambda x: x ** 2, range(1, 5))))  # [1, 4, 9, 16]

(三) reduce(函数名(x,y),可迭代对象)

1.求列表内值的累加和:

import functools  # 导入模块

sites = [1, 2, 3, 4]


def test21(a, b):
    return a + b


num = functools.reduce(test21, sites)
print(num)  # 10

2.计算[1,100]累加和:

import functools  # 导入模块
print(functools.reduce(lambda x, y: x + y, range(1, 101)))  # 5050

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

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

相关文章

高通开发系列 - MSM8909 lk aboot阶段点灯操作

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 第一种LK提供的接口实现第二种直接操作寄存器这篇文章之前请参考下:高通开发系列 - MSM8909指示灯操作 在LK中点灯有两种方式,一种…

JAVA-定位排查bug

在开发过程中难免会遇到bug,理解bug的含义,定位bug的位置,对于解决bug至关重要!掌握高效的排错技巧,对于程序员来说必不可少。 目录 一、错误异常的分类 二、常见报错信息及原因(持续更新中)…

域内权限维持:AdminSDHolder

01、简介 AdminSDHolder是一个特殊的AD容器,通常作为某些特权组成员的对象的安全模板。Active Directory将采用AdminSDHolder对象的ACL并定期将其应用于所有受保护的AD账户和组,以防止意外和无意的修改并确保对这些对象的访问是安全的。如果攻击者能完全…

Flex布局和主要属性用法详解

目录 前言 一个小例子 基本概念: 设置在主轴上的排列方式 设置在侧轴上的排列方式 更换主轴和侧轴方向 换行 align-content属性 元素(子容器)的相关属性 flex-basis flex-grow flex-shrink属性 flex属性 前言 flex布局是继标准…

JDBC-Statement

1.Statement执行静态sql语句(“字符串”) 返回结果 2.!实际工作一般用PreparedStatement来进行sql语句的执行,因为sql注入的风险 3and4.SQl注入就是Statement没有检查我们输入sql语句,一些别有用心的可能写一些危害数据…

智能手表主控芯片盘点,智能手表GUI,智能手表市场

聚焦:无线连接芯片,市场,技术 祝大家新年快乐,开工大吉!趁寒假简单梳理了下智能手表应用,做个分享,不对的地方欢迎交流指正; 01 市场容量,分类及拓扑 2个数据供参考 一个…

C++ dll、lib 的定义以及引用,

最近在研究socket,发现socket程序要依赖ws2_32.dll,涉及到动态链接库,有点懵,上网恶补了一下链接库的知识,最后总结出这么一篇文章 链接库分为两种:动态链接库(dll) 和静态链接库(lib) 动态链接库 : 动态链…

【C++】C++11语法解析

🌈欢迎来到C专栏~~C11 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x1f…

大数据分析案例-基于多元线性回归算法构建用户信用评分模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

ue4c++日记9(指定区域生成角色)

目录 创建C类 头文件 代码文件 结果 创建C类 头文件 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "ASPawnVolum.generated…

vSphere with Tanzu概念介绍

vSphere with Tanzu是在vSphere7.0及之后出现的新功能,它可以在虚拟化层创建一个Kubernetes 控制平面,并将vSphere 集群资源转化为Kubernetes集群资源,这样可以直接在ESXI主机上运行Kubernetes工作负载,创建Kubernetes集群并部署容…

测试环境频繁Full GC问题的解决思路

背景 上游调用方,反馈当前welink-front服务不可用; 临时解决办法 手动重启welink-front服务,重启之后观测到业务日志正常刷,说明该问题暂时得到了解决; 但没过多久,上游调用方的同学又找来了&#xff0…

C++ 继承

一. 概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对程序设计的层次结构,体现了由…

IDEA开发 常用代码规范插件 常用辅助类插件

规范类 阿里巴巴规范 Alibaba Java Coding Guidelines 插件地址 阿里官方出的开源的代码规范插件 GitHub地址 配合阿里出的规范手册《码出高效 Java开发手册》食用效果更佳 不用购买哈!GitHub上开源的 码出高效:Java开发手册下载 静态代码检查 Sonar…

数学建模学习笔记(14)聚类模型

聚类模型K均值聚类算法和K均值聚类算法系统聚类算法(层次聚类)DBSCAN聚类算法聚类问题概述:把样本划分为由相似的对象组成的多个类的过程。 K均值聚类算法和K均值聚类算法 K均值聚类算法流程: 指定需要划分的簇的个数K。随机选…

【Redis | 黑马点评】商户查询缓存

文章目录什么是缓存?添加商户缓存缓存更新策略主动更新策略实现商铺查询的缓存与数据库双写一致缓存穿透问题的解决思路编码解决商品查询的缓存穿透问题缓存雪崩问题及解决思路缓存击穿问题及解决思路基于互斥锁的方式解决缓存击穿问题基于逻辑过期的方式解决缓存击…

初始网络编程

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.网络发展史 1.1 独立模式 1.2 网络互联 1.3 局…

一文全解决 数据库连接报错Communications link failure,create connection SQLException

具体报错如下: 解决思路: 当时看到数据库报错Communications link failure我就想到应该是数据库连接不上的问题,具体想了以下几种情况 1.数据库未连接 1.1过期了,mysql里有一个wait_timeout的值需要大于数据库连接池的最大超时时…

新来测试用一手Postman实现UI自动化测试拿下了大厂面试官

看到这篇文章的标题,是不是有小伙伴会感到惊讶呢? Postman不是做接口测试的吗?为什么还能做UI自动化测试呢? 其实,只要你了解Selenium的运行原理,就可以理解为什么Postman也能实现UI自动化测试了。 Sele…

Lua 错误处理

Lua 错误处理 参考至菜鸟教程。 程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。 任何程序语言中&am…