python -【四】函数
函数
一、函数的基础
函数:是组织好的,可以重复使用的,用来实现特定功能的代码段
语法
def 函数名(入参):
return 出参
# 定义函数
def out_hello():print('hello ~~~')# 调用/使用/执行函数
out_hello()
练习题
自定义一个函数,返回一个整型数字,输入一个字符串
# 定义函数
def convert(str_):print(f'输入的内容是:{str_}, 类型:{type(str_)}')return int(str_)# 执行函数
v = convert('123')
print(f'输出的内容是:{v}, 类型:{type(v)}')"""
输入的内容是:123, 类型:<class 'str'>
输出的内容是:123, 类型:<class 'int'>
"""
二、函数的参数
def add(x, y):z = x + yprint(f' {x} + {y} = {z}')add(5, 5)"""
x, y : 形参
5, 5: 实参
输出结果:5 + 5 = 10
"""
三、函数的返回值
def add(x, y):return x + yv = add(5, 5)
print(v)"""
输出结果:10
"""
def none_func_1():print('')def none_func_2():print('')return Noneres = none_func_2()
print(f'无返回值的函数返回结果是:{res}, 返回结果类型是:{type(res)}')
res2 = none_func_1()
print(f'无返回值的函数返回结果是:{res2}, 返回结果类型是:{type(res2)}')"""
无返回值的函数1返回结果是:None, 返回结果类型是:<class 'NoneType'>
无返回值的函数2返回结果是:None, 返回结果类型是:<class 'NoneType'>
"""
四、None 使用场景
None:在函数内,无论有没有写 return 语句,默认都是有 return 语句的,只是 return None
# 1. 声明变量的初始值为 None
name = None# 2. None 用于条件表达式
def check_age(age):if age >= 18:return 'SUCCESS'else:# 3. 函数的返回值return Noneresult = check_age(16)
# 表示 None 的时候进入,False
if not result:print('未成年,无法入内 ...')
五、函数的注释
def add(x, y):"""两数之和:param x: x:param y: y:return: x + y"""z = x + yprint(f' {x} + {y} = {z}')
六、函数的嵌套
def func_1():print(1)def func_2():print(2)def func_3():print(3)def func():func_1()func_2()func_3()func()"""
1
2
3
"""
七、局部变量
局部变量:函数内的变量,作用在函数内,函数调用结束后局部变量失效
def test_num():num = 100# 正常输出print(f'函数内部 num={num}')test_num()
# NameError: name 'num' is not defined. Did you mean: 'sum'?
print(f'函数外部 num={num}')
八、全局变量
全局变量:函数内和函数外都能使用该变量
# 定义全局变量 num
num = 100# 函数内使用 num 变量
def test_num():print(f'函数内部 num={num}')# 执行 test_num 函数
test_num()
# 函数外部访问 num
print(f'函数外部 num={num}')
九、global 关键字
global 关键字作用:在函数体内修改全局变量,会导致该全局变量在外部无法文档修改后的内容,效果如下:
count = 200def read_count():print(f'read_count 函数内 count = {count}')def modify_count():count = 3000print(f'modify_count 函数内 count = {count}')# 1. 读取函数,count = 200
read_count()
# 2. 修改,count = 3000
modify_count()
# 3. count = 200 第二步种修改的无法作用到函数外
print(f'函数外 count = {count}')"""
read_count 函数内 count = 200
modify_count 函数内 count = 3000
函数外 count = 200
"""
在 modify_count 函数内,加上 global 关键字后
global 语法:global 被指定的全局变量名
count = 200def read_count():print(f'read_count 函数内 count = {count}')def modify_count():# 如下:将 count 本次的修改指向全局global countcount = 3000print(f'modify_count 函数内 count = {count}')read_count()
modify_count()
print(f'函数外 count = {count}')"""
read_count 函数内 count = 200
modify_count 函数内 count = 3000
函数外 count = 3000
"""
十、函数综合案例
"""
综合案例:ATM 机主菜单
----------主菜单-----------
张三,您好,欢迎进入 ATM 系统,请选择:
查询余额 [输入1]
取款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:查询余额----------查询余额-----------
张三,您好,您的余额剩余:100元----------存款-----------
张三,您好,您存款 200元
张三,您好,您的余额剩余:300元----------取款-----------
张三,您好,您取款 200元
张三,您好,您的余额剩余:100元
"""money = 0def read_in(str_):return int(input(str_))def main_menu():menu = """----------主菜单-----------张三,您好,欢迎进入 ATM 系统,请选择:查询余额 [输入1]存款 [输入2]取款 [输入3]退出 [输入4]"""print(menu)def query_money():menu = f"""----------查询余额-----------张三,您好,您的余额剩余:{money}元"""print(menu)def save_money(m: float):global moneymoney += mmenu = f"""----------存款-----------张三,您好,您存款 {m}元张三,您好,您的余额剩余:{money}元"""print(menu)def draw_money(m: float):global moneymoney -= mmenu = f"""----------取款-----------张三,您好,您取款 {m}元张三,您好,您的余额剩余:{money}元"""print(menu)def main_func():while True:main_menu()op = read_in('请输入您的选择: ')if op == 1:query_money()elif op == 2:m = read_in('请输入您的存款金额: ')save_money(m)elif op == 3:m = read_in('请输入您的取款金额: ')draw_money(m)elif op == 4:breakprint('已退出ATM系统...')if __name__ == '__main__':main_func()
十一、函数多返回值
def multi_result():return 1, 2x, y = multi_result()
print(f'x={x}, y={y}')def multi_result_2():return 1, '哈哈哈', [1, 2, 3], Truea, b, c, d = multi_result_2()
print(f'a={a}, b={b}, c={c}, d={d}')"""
x=1, y=2
a=1, b=哈哈哈, c=[1, 2, 3], d=True
"""
十二、参数传递
函数 ‘建=值’ 传参
# 不能省略的参数
def params(name, age, worker):print(f'params函数内:name={name}, age={age}, worker={worker}')# 缺省参数:设置缺省参数必要让被指定的参数在形参列表中最后面,否则会报错,如下
# def params_2(name='王五', age, worker):
def params_2(name, age, worker='码农'):print(f'params_2函数内:name={name}, age={age}, worker={worker}')# 调用方式1,顺序传参
params('张三', 20, '码农')
# 方式2:k=v传参,无序顺序指定
params(age=25, worker='码农', name='张三')
# 缺省参数
params_2(age=30, name='李四')
不定长参数
不定长参数:
位置不定长:*args
元组
参数不定长:**kwargs
k=v
# 位置不定长
def args_func(*args):print(f'位置不定长:{args}, 类型是:{type(args)}')# 参数不定长
def kwargs_func(**kwargs):print(f'参数不定长:{kwargs}, 类型是:{type(kwargs)}')args_func('张三', 18.0, '码农', ['alibaba', 'bytedance'])
kwargs_func(name='张三', age=18.0, worker='码农', company=['alibaba', 'bytedance'])"""
位置不定长:('张三', 18.0, '码农', ['alibaba', 'bytedance']), 类型是:<class 'tuple'>
参数不定长:{'name': '张三', 'age': 18.0, 'worker': '码农', 'company': ['alibaba', 'bytedance']}, 类型是:<class 'dict'>
"""
函数作为参数传递
"""
函数作为参数进行传递
"""def calc(x, y):return x + ydef test_calc(calc_func):print(f'calc的类型是:{type(calc_func)}')return calc_func(2, 1)res = test_calc(calc)
print(f'计算结果:{res}')
lambda 匿名函数
lambda 函数
语法:lambda 传入参数:函数体(一行代码)
lambda 函数体只能写一行,且不可重复调用
def test_lambda(add_func):print(f'add_func 的类型是:{type(add_func)}')return add_func(2, 1)# 调用匿名函数
result = test_lambda(lambda x, y: x + y)
print(f'匿名函数返回结果:{result}')# 定义多参数的匿名函数
def test_lambda_2(add_func):print(f'add_func 的类型是:{type(add_func)}')return add_func(2, 1, 3, 4)# 调用匿名函数
result = test_lambda_2(lambda x, y, z, a: x + y + z + a)
print(f'匿名函数返回结果:{result}')
result_2 = test_lambda_2(lambda x, y, z, a: x + y + z - a)
print(f'匿名函数返回结果:{result_2}')"""
calc的类型是:<class 'function'>
计算结果:3
add_func 的类型是:<class 'function'>
匿名函数返回结果:3
add_func 的类型是:<class 'function'>
匿名函数返回结果:10
add_func 的类型是:<class 'function'>
匿名函数返回结果:2
"""
十三、类型注释
13.1 基础类型的类型注解
帮助第三方
IDE
工具对代码进行类型推断,协助做代码提示
帮助开发者自身对变量进行类型注释
不会对程序有任何影响,只是作为提示,仅此而已
方式1:指定变量类型 语法:变量名:类型 = 值
方式2:使用注释指定类型 语法:
i = 10 # type: int
"""
方式1:变量名:类型 = 值
"""# 容器的类型注解
my_list: list[int] = [1, 2, 3, 4]
my_tuple: tuple[str, int, bool] = ('a', 1, True)
my_set: set[int] = {1, 2, 3, 4}
my_dict: dict[str, int] = {'a': 1, 'b': 2}
my_str: str = '123456'# 基础类型的注解
va_1: int = 10
va_2: str = '123456'
va_3: bool = True
va_4: float = 2.3# 类的注解
class Path:passpa: Path = Path()
"""
方式2:i = 10 # type: int
"""m = random.randint(1, 100) # type: int
j = json.loads('{"name":"张三"}') # type: dict[str, str]def func():return 1f = func() # type: int
13.2 函数的类型注解
# data: dict[str, int] 表示输入的类型是 dict[str, int]
# idx: int 表示输入的类型是 int
# -> list[str] 表示返回值的类型是 list[str]
def func(data: dict[str, int], idx: int) -> list[str]:print(f'dict:{data}, idx:{idx}')return list(data.keys())
13.3 Union 类型注解
首先看一个例子:
my_list = [1, 2, 3, 4, '北京', 'GPT4', True]
以上的 my_list 是一个复合类型的容器,想要表述这种类型就需要用到 Union 类型的注解
from typing import Union# 在变量中展示
# 在变量中展示
my_list: list[Union[str, int, bool]] = [1, 2, 3, 4, '北京', 'GPT4', True]my_dict: dict[str, Union[str, int, bool]] = {'name': '张三','age': 20,'good_student': True
}# 在函数中展示
def func(data: Union[str, int]) -> Union[str, int]:return dataprint(f'func(1) 返回值类型是:{type(func(1))}') # func(1) 返回值类型是:<class 'int'>
print(f'func("哈") 返回值类型是:{type("哈")}') # func("哈") 返回值类型是:<class 'str'>
相关文章:
python -【四】函数
函数 一、函数的基础 函数:是组织好的,可以重复使用的,用来实现特定功能的代码段 语法 def 函数名(入参): return 出参 # 定义函数 def out_hello():print(hello ~~~)# 调用/使用/执行函数 out_hello()练习题 自定义一个函数,…...
力扣 5. 最长回文子串 python AC
动态规划 class Solution:def longestPalindrome(self, s):size len(s)maxl 1start 0dp [[False] * size for _ in range(size)]for i in range(size):dp[i][i] Truefor L in range(2, size 1):for i in range(size):j L i - 1if j > size:breakif s[i] s[j]:if L…...

【微机原理及接口技术】可编程计数器/定时器8253
【微机原理及接口技术】可编程计数器/定时器8253 文章目录 【微机原理及接口技术】可编程计数器/定时器8253前言一、8253的内部结构和引脚二、8253的工作方式三、8253的编程总结 前言 本篇文章就8253芯片展开,详细介绍8253的内部结构和引脚,8253的工作方…...

23种设计模式之一— — — —装饰模式详细介绍与讲解
装饰模式详细讲解 一、定义二、装饰模式结构核心思想模式角色模式的UML类图应用场景模式优点模式缺点 实例演示图示代码演示运行结果 一、定义 装饰模式(别名:包装器) 装饰模式(Decorator Pattern)是结构型的设计模式…...
2024年2月28日 星期三
2024年2月28日 星期三 农历正月十九 1. 住建部:各城市要做好今明两年住房发展计划,防止市场大起大落。 2. 政协委员赵长龙建议:增加元旦、端午、中秋高速免费,周六日半价。 3. 人民法院案例库开始对社会开放,与中国…...
Java中的super关键字详解
在Java编程中,super关键字是一个非常重要的概念,尤其是在继承和多态的场景中。理解super关键字的使用方法和其背后的机制,对于掌握面向对象编程(OOP)的基本概念至关重要。本篇博客将详细讲解super关键字的各种用法及其…...
消消乐游戏开发,三消游戏,消除小游戏
消消乐是一款非常受欢迎的休闲消除类游戏,通常也被称为“三消游戏”。这类游戏的主要目标是通过交换和匹配三个或更多相同的物品来清除它们,从而得分并通过关卡。以下是一些消消乐游戏的基本特点和玩法: 基本玩法 交换和匹配:玩…...

三十三、openlayers官网示例Drawing Features Style——在地图上绘制图形,并修改绘制过程中的颜色
这篇讲的是使用Draw绘制图形时根据绘制形状设置不同颜色。 根据下拉框中的值在styles对象中取对应的颜色对象,new Draw的时候将其设置为style参数。 const styles {Point: {"circle-radius": 5,"circle-fill-color": "red",},LineS…...

Vue——事件修饰符
文章目录 前言阻止默认事件 prevent阻止事件冒泡 stop 前言 在官方文档中对于事件修饰符有一个很好的说明,本篇文章主要记录验证测试的案例。 官方文档 事件修饰符 阻止默认事件 prevent 在js原生的语言中,可以根据标签本身的事件对象进行阻止默认事件…...

Go语言GoFly框架快速新增接口/上手写代码
拿到一个新框架大家可能无从下手,因为你对框架设计思路、结构不了解,从而产生恐惧,所以我们框架是通过简单可视化界面安装,安装后即可看到效果,然后点击先点点看各个功能,看现有的功能是怎么写的࿰…...
【Vue】v-else 和 v-else-if
作用:辅助v-if进行判断渲染 语法: v-else v-else-if"表达式"PS:需要紧接着v-if使用 示例代码: <body><div id"app"><p v-if"gender 1">性别:♂ 男</p><…...

一致性hash算法原理图和负载均衡原理-urlhash与least_conn案例
一. 一致性hash算法原理图 4台服务器计算hash值图解 减少一台服务3台服务器计算hash值图解 增加一台服务器5台服务器计算hash值图解 二. 负载均衡原理-urlhash与least_conn 2.1.urlhash案例 # urlhash upstream tomcats {hash $requ...

MySQL建库
删除数据库 新建数据库 右键-新建数据库 字符集选中utf8(支持中文) 修改字符集 右键--数据库的属性 将字符集支持的数量变少可以修改...

系统资源监控器工具glances的使用详解
目录 1、glances工具介绍 2、安装方式 3、glances的工具界面说明 4、常用的参数选项 5、常用快捷键说明 1、glances工具介绍 glances可以分析系统的 CPU使用率、内存使用率、内核统计信息和运行队列信息磁盘I/O速度、传输和读/写比率、磁盘适配器网络I/O速度、传输和读/写…...

JDBC使用QreryRunner简化SQL查询注意事项
QreryRunner是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。 注意事项 1. 使用QreryRunner必须保证实体类的变量名,和sql语句中要查找的字段名必须相同,否则查询 不到数据,会出…...

前缀和(下)
目录 热身: 寻找数组的中心下标 题解: 代码: 进阶: 除自身之外数组的乘积 题解: 代码: 和为K的子数组 题解: 代码: 和可被 K 整除的子数组 题解: 同余定理…...

【排序算法】希尔排序
前言:学习希尔排序前最好先掌握插入排序,在进行;不会的可以点击——>【排序算法】插入排序-CSDN博客 一、希尔排序: 希尔排序,也称为缩小增量排序,是一种基于插入排序的快速改进算法。由Donald Shell于1…...

数学建模--LaTex插入表格详细介绍
目录 1.插入普通的边线表格 3.三线表的插入和空格说明 3.基于复杂情况下表格的插入 1.插入普通的边线表格 (1)像这个右边的生成的这个比较普通的表格,我们是使用下面的代码实现的: (2)和插入一个一个图片…...
未来已来:Flutter引领的安卓与跨平台开发奇幻之旅
引言 随着移动开发技术的飞速发展,跨平台开发框架如Flutter正逐渐改变着传统的安卓和iOS开发格局。作为一名资深的安卓开发工程师,我深刻感受到了Flutter带来的变革和机遇。今天,我想与大家分享Flutter在跨平台开发中的奇幻之旅,…...

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤
序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...