Python函数语法详解(与C++对比学习)【未完】

news2024/10/5 15:27:37

一、Python函数的形式

def function_name (参数, ...) -> return value_type:
    # 函数体
    return value
    # 看具体需求
    # 如果没有return语句,函数执行完毕后也会返回结果
    # 只是结果为None。return None可以简写为return

1. Python的返回值

        在Python3中,提供了可以标注函数返回值的类型的功能,但Python是动态类型语言对返回值的类型标注不会像C++这种静态类型语言那样进行严格的类型检查和限制,所以我们可以认为返回值只是给程序员自己看着方便,在语法不会检查。

返回值标注的作用:

  1. 增强代码的可读性:标注返回值类型可以让其他开发者在阅读代码时更清楚地理解函数的预                                   期输出。
  2. 作为文档:有助于为使用该函数的其他开发者提供明确的信息,减少误解和错误使用。
  3. 辅助静态类型检查工具:虽然 Python 本身不强制检查,但结合一些第三方的静态类型检查                                            工具(如 mypy),可以在一定程度上进行类型检查,提前发现潜在                                          的类型错误。

【C++】

        在C++中,函数的返回值类型是必须标注的,静态类型语言必须保证接收函数返回值的时候数据类型是匹配的

2. Python函数返回多个值

        返回的是一个元组对象,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便;

        而C++中返回多个值,可以采用输出型参数或者是返回一个类对象

def function_name (参数, ...):
    return a, b ,c

        如果函数的返回值我们只使用一部分,不关注其他的返回值,可以使用占位符 ‘ _ ’来进行占位

def func():
    return 1, 2, 3


_, _, a = func()
print('a = %d' % a)

3. 空函数

def func():
    pass

二、Python函数的参数

1. 位置参数:

与C++一致,实参的位置与形参的位置相匹配

2. 缺省参数:

与C++一致,形参有缺省参数,可以不传参也可以传参

设置缺省参数的规则:

  • 参数在前,缺省参数在后
  • 当函数有多个参数时,在传参时把变化大的参数放在前面,变化小的参数放在后面(变化小的参数可以作为缺省参数)
  • 必须指向不可变对象

为什么默认参数在后?

        当默认参数在前时,我们传入一个实参,就会发生疑问,这个实参是给缺省参数的?还是给参数的?因为可以一方面通过位置参数来,另一方面可以通过缺省参数来,所以就会产生二义性,为了防止此类事件的发生,规定缺省参数要在参数的后面。

缺省参数的坑:为什么要指向不可变对象?

Python函数缺省参数的 “ 坑 ” (与C++对比学习)-CSDN博客

3. 可变参数:

        支持传入任意个参数,函数内部接收到的是一个元组tuple(在返回值和参数这里使用元组主要是保证传入或输出的对象的安全性,防止恶意篡改)

使用形式:

def func(*num):
    s = 0
    for i in num:
        s += i
    return s


ret = func(1, 2, 3, 4, 5, 6, 7, 8)
print(ret)

4. 显示命名参数

        按照形参名字传参,无视位置,一般搭配缺省参数使用

使用形式:

def func(id_num, name='dd', age=20):
    print('id:', id_num, '\nname:', name, '\nage:', age)


func(1, age=18)

5. 关键字参数

        关键字参数允许我们传入任意个含有参数名的参数,这些关键字参数会在函数内部自动组装为一个dict。

使用形式:

def func(name, age, **kw):
    print('name:', name, '\nage:', age, '\nothers:', kw)


func('dd', 20, city='上海', work='程序员')

简化版本:

        **dic表示把该字典中的所有key:value用关键字参数传入函数的**kw中,需要注意的是kw获得的dict是dic的一份拷贝,对kw的改动不会影响函数外的dic

def func(name, age, **kw):
    print('name:', name, '\nage:', age, '\nothers:', kw)


dic = {'city': '上海', 'work': '程序员'}
func('yy', 18, **dic)

6. 命名关键字参数

        只可以传入命名关键字参数后的关键字参数

使用形式:

  • 特殊分隔符 * 后面的参数被视为命名关键字参数
  • 如果函数定义中有可变参数,后面跟着的命名关键字参数就不需要特殊分隔符*
  • 命名关键字参数必须传入参数名
def fun(name, age, *, city, work):
    print('name:', name, '\nage:', age, '\ncity:', city, '\nwork', work)


fun('wyd', 20, city='上海', work='程序员')

7. 各种参数可以组合使用

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

三、递归函数

        与C++一致,自己调用自己,但是要防止栈溢出,采用的方法是尾递归,保证每次函数调用只占用一个栈帧。

如计算n的阶乘:

采用递归的方式:

n值过大,则会导致栈空间溢出,因为下面这种是不断调用递归,会不断的压栈,从而导致栈空间不足

def fact(n):
    if n == 1:
        return n
    return n * fact(n-1)

采用尾递归的方式:

        每次只用一个栈帧,尾递归的好处就是最外层的函数调用完自身就会销毁函数栈帧,从而保证每次只使用一个栈帧,遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

def fact_operator(n, s):
    if n == 1:
        return s
    return fact_operator(n - 1, n * s)


def fact(n):
    return fact_operator(n, 1)

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

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

相关文章

新手教师经常会遇到的问题

教育是塑造未来的关键力量,而教师则是这一过程中不可或缺的角色。然而,对于新手教师来说,步入教育行业往往伴随着一系列挑战。本文将探讨新手教师在职业生涯初期可能遇到的一些常见困难,并提供一些应对策略。 教学准备的挑战 新手…

improved-diffusion-main代码理解

目录 一、 TimestepEmbedSequential二、PyTorch之Checkpoint机制三、AttentionBlock四、use_scale_shift_norm 和nanoDiffusion-main相比,improved-diffusion-main代码是相似的,但有几个不是很好理解的地方记录一下。 一、 TimestepEmbedSequential 代码…

栈复用(覆盖栈上的有用数据)

栈复用(覆盖栈上的有用数据) 程序给的输入长度,不够溢出 到返回值,甚至都 不到bp位置 ,这是要考虑覆盖之前函数(或当前函数)的栈上的有用数据,任何利用 程序后续函数调用 时要利用该位置上的数据&#xff…

机器人具身智能Embodied AI

强调智能体(如机器人)通过物理身体在物理世界中的实时感知、交互和学习来执行任务。 通过物理交互来完成任务的智能系统。它由“本体”(即物理身体)和“智能体”(即智能核心)耦合而成,能够在复…

《HIRI-ViT: Scaling Vision Transformer with High Resolution Inputs》解读

期刊:TPAMI 年份:2024 摘要 视觉Transformer(ViT)和卷积神经网络(CNN)的混合深度模型已经成为一类强大的视觉任务骨干。扩大这种混合主干网的输入分辨率自然会增强模型的能力,但不可避免地要承受二次扩展的沉重计算成本。相反,…

SQL索引事务

SQL索引事务 索引 创建主键约束(primary key),唯一约束(unique),外键约束(foreign key)时,会自动创建对应列的索引 1.1 查看索引 show index from 表名 现在这个表中没有索引,那么我们现在将这几个表删除之后创建新表 我们现在建立一个班级表一个学生表,并且学生表与班级表存…

高速PCB设计Tips

在进行原理图输入过程中,需要注意将设计分解为功能块,将所有相关组件放在同一页。例如,以太网相关的组件,通常运行在50MHz或更高频率,在原理图设计中应集中在同一页。清晰标记高速连接和电源连接。差分信号和单端阻抗控…

免费分享:中国三级及以上河流(附下载方法)

河流分级法的分级方法是从源头最小河流开始,称为一级河流;两条一级河流汇合成二级河流;以此类推,三级河流等等;最后是干流。本文将介绍中国三级及以上河流数据。 数据简介 1:100万中国三级及以上河流矢量数据是涵盖了全国范围内三级及以上级别河流的详细地理信息和空间分布。这…

5百多本分章节古籍内容大全ACCESS\EXCEL数据库

很多明清小说现在越来越不容易查看其内容,虽然之前搞到过一份《3万8千多古代文学大全ACCESS数据库》,但简体中文总让我感觉有删减、非原版的印象,今天正好遇到一个好的古籍网站,繁体字繁体文,感觉非常不错,…

期权学习必看圣书:《3小时快学期权》要在哪里看?

今天带你了解期权学习必看圣书:《3小时快学期权》要在哪里看?《3小时快学期权》是一本关于股票期权基础知识的书籍。 它旨在通过简明、易懂的语言和实用的案例,让读者在短时间内掌握股票期权的基本概念、操作方法和投资策略。通过这本书&…

LeetCode刷题记录:(15)三角形最小路径和

知识点&#xff1a;倒叙的动态规划 题目传送 解法一&#xff1a;二维动态规划【容易理解】 class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();if (n 1) {return triangle.get(0).get(0);}// dp[i][j]:走到第i层第…

Gemini for China 大更新,现已上架 Android APP!

官网&#xff1a;https://gemini.fostmar.online/ Android APP&#xff1a;https://gemini.fostmar.online/gemini_1.0.apk 一、Android APP 如果是 Android 设备&#xff0c;则会直接识别到并给下载链接。PC 直接对话即可。 二、聊天记录 现在 Gemini for China&#xff…

QWidget成员函数功能和使用详细说明(四)(文字+用例+代码+效果图)

文章目录 1.测试工程配置2.成员函数2.1 void setParent(QWidget *parent)2.2 void setMouseTracking(bool enable)2.3 bool hasMouseTracking() const2.4 void setPalette(const QPalette &)2.5 const QPalette &palette() const2.6 int QWidget::grabShortcut(const Q…

gradle构建工具

setting.gradle // settings.gradle rootProject.name my-project // 指定根项目名称include subproject1, subproject2 // 指定子项目名称&#xff0c;可选jar包名称 方式一 jar {archiveBaseName my-application // 设置 JAR 文件的基本名称archiveVersion 1.0 // 设置…

实验四 图像增强—灰度变换之直方图变换

一&#xff0e;实验目的 1&#xff0e;掌握灰度直方图的概念及其计算方法&#xff1b; 2&#xff0e;熟练掌握直方图均衡化计算过程&#xff1b;了解直方图规定化的计算过程&#xff1b; 3&#xff0e;了解色彩直方图的概念和计算方法 二&#xff0e;实验内容&#xff1a; …

泰迪智能科技企业项目试岗实训——数据分析类型

当今社会&#xff0c;就业技能的瞩目度正与日俱增。在竞争激烈的就业市场中&#xff0c;重视技能的培养和提升&#xff0c;通过学习与实践&#xff0c;增强自己的竞争力&#xff0c;为未来的职业发展打下坚实的基础&#xff0c;不仅有助于解决各类工作技能问题&#xff0c;更能…

跨境干货|最新注册Google账号方法分享

谷歌账号对做跨境外贸业务的人来说是刚需&#xff0c;目前来说大部分的海外社媒平台、工具都可以用谷歌账号来注册。但是仍然有很多朋友并不知道如何注册这个谷歌账号&#xff0c;今天就来给大家分享2个注册谷歌账号的方法&#xff0c;一个是手机号注册&#xff0c;一个是如何跳…

PEFT - 安装及简单使用

LLM、AIGC、RAG 开发交流裙&#xff1a;377891973 文章目录 一、关于 PEFT二、安装1、使用 PyPI 安装2、使用源码安装 三、快速开始1、训练2、保存模型3、推理4、后续步骤 本文翻译整理自&#xff1a;https://huggingface.co/docs/peft/index 一、关于 PEFT &#x1f917;PEFT…

关于如何做好淘汰 IT 资产数据安全销毁工作的思考 文件销毁 硬盘销毁 数据销毁 物料销毁 文件粉碎

在当今数字化时代&#xff0c;企业的 IT 资产不断更新换代&#xff0c;淘汰的 IT 资产中往往存储着大量的敏感数据。如何确保这些数据在资产淘汰过程中被安全销毁&#xff0c;成为了企业面临的重要挑战。以下是对如何做好淘汰 IT 资产数据安全销毁工作的一些思考。 一、明确数…

51单片机STC89C52RC——14.1 直流电机调速

目录 目的/效果 1&#xff1a;电机转速同步LED呼吸灯 2 通过独立按键 控制直流电机转速。 一&#xff0c;STC单片机模块 二&#xff0c;直流电机 2.1 简介 2.2 驱动电路 2.2.1 大功率器件直接驱动 2.2.2 H桥驱动 正转 反转 2.2.3 ULN2003D 引脚、电路 2.3 PWM&…