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

一、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 = 0for i in num:s += ireturn sret = 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 nreturn n * fact(n-1)

采用尾递归的方式:

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

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

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

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

相关文章

利用Redis bitmap 实现签到案例

数据库实现 设计签到功能对应的数据库表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到年份,month tinyint NOT NULL COMMENT 签到月份,date date NOT NULL COMMENT 签…

在Linux操作系统中关于逻辑卷的案例

1.如何去创建一个逻辑卷 1.1先去创建物理卷 如上图所示,physical volume 物理卷 被成功创建。 如上图所示,可以使用pvscan来去查看当前Linux操作系统的物理卷/ 1.2使用创建好的物理卷去创建一个卷组。 如上图所示,可以使用第一步创建的两个…

【中项第三版】系统集成项目管理工程师 | 第 9 章 项目管理概论③ | 9.6 - 9.10

前言 第 9 章对应的内容选择题和案例分析都会进行考查,这一章节理论性较强,学习要以教材为准。本章分值预计在4-5分。 目录 9.6 项目管理过程组 9.7 项目管理原则 9.8 项目管理知识领域 9.9 价值交付系统 9.10 本章练习 9.6 项目管理过程组 项目…

千万不能踏入的渠道管理五大误区!【附策略】

一、引言 在当今激烈的市场竞争环境中,有效的渠道管理是企业获得竞争优势的关键。然而,在实践过程中,不少企业因陷入管理误区而影响了市场拓展和品牌建设。本文旨在揭示渠道管理中常见的五大误区,并提供避免策略,帮助…

web基础与HTTP协议(企业网站架构部署与优化)

补充:http服务首页文件在/var/www/html下的,一定是index.html命名的文件。才会显示出来。 如果该路径下没有相应的文件,会显示/usr/share/httpd/noindex下的index.html文件。 如果/usr/share/httpd/noindex没有index.html文件,会…

BSI 第七届万物互联智慧高峰论坛:主题:拥抱AI时代,标准赋能组织实现可持续发展

BSI 第七届万物互联智慧高峰论坛:主题:拥抱AI时代,标准赋能组织实现可持续发展 主要收到 BSI 温女士的邀请参加的本次论坛。还是学到的很多 。 在科技日新月异的时代背景下,BSI 第七届万物互联智慧高峰论坛于[时间:6…

Object 类中的公共方法详解

Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中,Object…

AI 驱动的数据中心变革与前景

文章主要探讨了AI计算时代数据中心的转型,涉及计算技术的多样性、规格尺寸和加速器的发展、大型语言模型(LLM)的发展、功耗和冷却趋势、基准测试的重要性以及数据中心的发展等方面。为大家提供深入了解AI基础设施发展的视角。 计算技术的多样…

Ubuntu(通用)—网络加固—ufw+防DNS污染+ARP绑定

1. ufw sudo ufw default deny incoming sudo ufw deny in from any to any # sudo ufw allow from any to any port 5353 protocol udp sudo ufw enable # 启动开机自启 # sudo ufw reload 更改后的操作2. 防ARP欺骗 华为云教程 arp -d删除dns记录arp -a显示arp表 ipconfi…

PTrade常见问题系列3

量化允许同时运行回测和交易的策略个数配置。 量化允许同时运行回测和交易的策略个数在哪里查看? 在量化服务器/home/fly/config/custom_config_conf文件中,其中运行回测的策略个数由backtest_switch(是否限制普通回测个数)及ba…

matlab 绘制高等数学中的二维函数示例

matlab 绘制高等数学中的二维函数示例 绘制高等数学中的二维函数示例绘制结果 绘制高等数学中的二维函数示例 clc,clear,close all; % 定义方程 eqn (x, y) (x.^2 y.^2).^3 - y.^4;% 绘制方程曲线和坐标轴 ezplot(eqn, [-2, 2, -2, 2]) hold on % 在同一图形中保持绘图% 绘…

S7-1200PLC学习记录

文章目录 前言一、S7-12001.数字量输入模块2. PNP接法和NPN接法 二、博图软件1. 位逻辑运算Part1. 添加新设备(添加PLC)Part2. 添加信号模块Part3. 添加信号板中模块Part4. 添加新块Part5. Main编程文件案例1案例2 -( S )- 和 -( R )-完整操作过程&#…

昇思25天学习打卡营第8天|ResNet50迁移学习

一、迁移学习定义 迁移学习(Transfer Learning):在一个任务上训练得到的模型包含的知识可以部分或全部地转移到另一个任务上。允许模型将从一个任务中学到的知识应用到另一个相关的任务中。适用于数据稀缺的情况,可减少对大量标记…

掌握Linux网络:深入理解TC —— 你的流量控制利器

目录 简单概述: qdisc(队列): 举例: Bash 整形队列算法: FIFO (First-In-First-Out) PFIFO (Priority FIFO) SFQ (Stochastic Fair Queuing) RED (Random Early Detection) HTB (Hierarchical Token Bucket) TBF…

谷粒商城笔记-04-项目微服务架构图简介

文章目录 一,网络二,网关1,网关选型2,认证鉴权3,动态路由4,限流5,负载均衡6,熔断降级 三,微服务四,存储层五,服务治理六,日志系统七&a…

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

你的机器人购物新体验——安全、高效、无忧

如果你跟我一样,对找到那些“恰到好处”的商品充满渴望,那么,让我来告诉你为什么BFT会成为你的下一个购物“心头好”。 BFT的优势 高效安全的支付体系:BFT交易系统保障了交易的安全性和透明性,让你的每一笔消费都安全…

Build a Large Language Model (From Scratch)附录B(gpt-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

【宠粉赠书】UML 2.5基础、建模与设计实践

为了回馈粉丝们的厚爱,今天小智给大家送上一套系统建模学习的必备书籍——《UML 2.5基础、建模与设计实践》。下面我会详细给大家介绍这本书,文末留有领取方式。 图书介绍 《UML 2.5基础、建模与设计实践》以实战为主旨,结合draw.io免费软件…

verilog行为建模(三):块语句

目录 1.块语句2.延迟赋值语句 微信公众号获取更多FPGA相关源码: 1.块语句 块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。 块语句分为两类: 顺序块:语句置于关键字begin和end之间,块中的语句以顺…