菜鸟学习日记(python)——函数
函数是组织好的,用来实现某些功能的代码块,它可以重复使用。
函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但我们也可以自己创建函数,这被叫做用户自定义函数。
定义函数
用户自定义函数的用法如下:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,返回一个值给调用方,不带表达式的 return 相当于返回 None。
函数的一般格式如下:
def 函数名(参数列表):
函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
以下是简单的实例:
#不带参数的函数
def hello():print('hello python')
a=3
b=4
hello()
#带参数的函数
def hello(a,b):print(a*b)
a=3
b=4
hello(a,b)
#比较两个数的大小
def max(a,b):if a>b:return aelse:return b
print(max(3,4))
函数调用
定义函数时,我们给了函数的名称,指定了函数的参数和代码块结构。那么调用函数时,按照以下格式调用:
函数名(函数实参列表)
上面的max(3,4)就是函数调用,
参数传递
在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的
a=[1,2,3]
print(id(a))
a="Runoob"
print(id(a))
执行以上代码,结果如下:
可以看到,a的id改变了,这是因为, a 没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型([1,2,3])对象,也可以是指向 String 类型("Runoob")对象。
可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
-
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。
-
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
-
不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
-
可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
下面是传不可变对象和可变对象的实例:
#传不可变类型
def change1(a):print('没改前:',id(a))a=6print('改后:',id(a))return a
a=1
print('没改前:',id(a))
print(change1(a)) #调用change1(a),并将返回结果打印出来#传可变类型
def change1(list1):print('没改前:',id(list2))list1.append([4,5,6])print('改后:',id(list2))return list1
list2=[1,2,3]
print('没改前:',id(list2))
print(change1(list2))
可以看到,如果传的是不可变的数据类型(a),那么重新赋值,会让数据的id改变,说明不是在原有的数据上进行了修改,而是将a重新指向了一个新的对象。
如果传的是可变的数据类型(list2),那么改变它的值后,数据的id并没有改变,说明它是在原有的数据的基础上进行了修改。
参数
python中调用函数时,可使用的正式参数类型如下:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
必需参数
必需参数须以正确的顺序传入函数。调用时参数的数量必须和声明时的一样。
例如,执行以下代码,就会报错
def test2(a,b):print('a*b的值为:',a*b)
a=3
b=2
test2(a)
关键字参数
关键字参数是指在函数调用时,通过指定参数名来传递参数值。关键字参数的主要特点是可以不按照定义顺序传递参数。关键字参数的使用可以增加函数调用的可读性,避免参数顺序混淆的问题。执行下面的代码:
def test3(name,sex):print('姓名为:',name)print('性别为:',sex)
test3(sex='男',name='花花')
可以看到,函数调用时,参数没有按照函数声明时的顺序去写,但是不会报错。
默认参数
默认参数是在函数定义时给参数赋予一个默认值,如果在调用函数时没有传递对应的参数,函数将使用默认值。使用默认参数,可以简化函数的调用,尤其是在函数需要被频繁调用的情况下,示例代码如下:
def test4(a,b=4):print('a+b的值为:',a+b)
a=3
test4(a)
我们没有给出b对应的值,但是b默认为4,计算出来a+b的值是7
要注意的是:我们在定义函数时,参数顺序是:有默认值的参数必须在没有默认值的参数后面,不能默认参数在前。
不定长参数(可变参数)
你可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数。不定长参数在函数定义时不确定参数个数的情况下,可以接收任意数量的参数。Python提供了两种方式来实现不定长参数:使用星号(*)和双星号(**)。
1.使用星号(*)来定义可变参数
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
下面是一个简单的例子:
def printinfo(arg1, *vartuple):"打印任何传入的参数"print("输出: ")print(arg1)print(vartuple)# 调用printinfo 函数
printinfo(70, 60, 50)
vartuple就是一个不定长参数,从上面可以看到,它是由60,50组成的一个元组
如果在函数调用时没有指定参数,它就是一个空元组。执行这条语句:printinfo(70)
结果如下:
1.使用两个星号(**)来定义可变参数,参数会以字典的形式导入,以下是一个实例:
def printinfo(arg1, **vardict):print("输出: ")print(arg1)print(vardict)
# 调用printinfo 函数
printinfo(1, a=2, b=3)
强制位置参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:
def f(a, b, /, c, d, *, e, f):print(a, b, c, d, e, f)#正确用法
f(10, 20, 30, d=40, e=50, f=60)#错误用法
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式
return 语句
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式或值。
def sum(a,b):return a+b
a=sum(1,2) #将返回值赋值给a
print(a) #打印a的值
相关文章:
菜鸟学习日记(python)——函数
函数是组织好的,用来实现某些功能的代码块,它可以重复使用。 函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但我们也可以自己创建函数,这被叫做用户自定义函数。 定义函数 用…...
垃圾回收 (GC) 在 .NET Core 中是如何工作的?
提起GC大家肯定不陌生,但是让大家是说一下GC是怎么运行的,可能大多数人都不太清楚,这也很正常,因为GC这东西在.NET基本不用开发者关注,它是依靠程序自动判断来释放托管堆的,我们基本不需要主动调用Collect(…...
Appium 图像识别技术 OpenCV
在我们做App自动化测试的时候,会发现很多场景下元素没有id、content-desc、text等等属性,并且有可能也会碰到由于开发采用的是自定义View,View中的元素也无法识别到,很多的自动化测试框架对此类场景束手无策。Appium在V1.9.0中有给…...
产品Axure的元组件以及案例
前言 产品<Axure的安装以及组件介绍-CSDN博客经过上文我们可以知道我们Axure是一款适用于网站、移动应用和企业软件的交互式原型设计工具。它可以帮助用户创建高保真的交互式原型,包括线框图、流程图、模型、注释和规格等,以便与客户、开发人…...
智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.头脑风暴算法4.实验参数设定5.算法结果6.…...
flutter Pageview组件
PageView组件说明 组件说明PageView,PageController的源码简单demo 组件说明 属性说明scrollDirection滑动反向 Axis.vertical上下滑动 Axis.horizontal左右滑动reverse是否反转 true从最后一个记0controllerPageController见下文physics滚动方式pageSnapping是否有…...
如何用 Cargo 管理 Rust 工程系列 丙
以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/viSsCaFR2x9hZOvo1PoRqA 添加依赖项 前面已经提到过在 cargo 配置文件 Cargo.toml 中如何手动添加工程依赖项,cargo 同样提供了 add …...
Vue学习笔记-Vue3中的provide与inject
作用 provide和inject用于实现祖孙间的数据通信 用法 导入:import {provide,inject} from vue 使用: provide:祖组件使用该方法提供数据(可以给任意后代组件,但一般用于孙组件及其后代组件,因为父子间的…...
2021年数维杯国际大学生数学建模A题新冠肺炎背景下港口资源优化配置策略求解全过程文档及程序
2021年数维杯国际大学生数学建模 A题 新冠肺炎背景下港口资源优化配置策略 原题再现: 2020年初,新型冠状病毒(COVID-19)在全球迅速蔓延。根据世界卫生组织2021年7月31日的报告,新冠病毒疫情对人类的影响可能比原先预…...
【css】css实现文字两端对齐效果:
文章目录 一、方法1:二、方法2:三、注意: 一、方法1: 给元素设置 text-align: justify;text-align-last: justify;并且加上text-justify: distribute-all-line; 目的是兼容ie浏览器 p{width: 130px;text-align: justify;text-alig…...
ElasticSearch指南 - Mapping - Metadata fields
Metadatas - fields 每份doc都有关联它的metadata数据, 例如_index 和 _id字段. 这些metadatas字段的一些行为能在创建mapping的时候被定制化. 表示唯一性的metadatas字段 _index 表示doc属于哪个index _id doc的id 源doc的metadatas字段 _source doc的原始json字符串 _s…...
12.15每日一题(备战蓝桥杯摘花生)
12.15每日一题(备战蓝桥杯摘花生) 题目 摘花生 Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。 地里每个道路的交叉点上都有种着一株花生苗,上…...
VUE-脚手架搭建
文章目录 一、概述二、前提准备1. 安装 node-js2. npm 镜像设置3. 安装 vs-code 三、脚手架搭建1. Vue-2 搭建1. Vue-3 搭建 一、概述 官网:http://cn.vuejs.org/ vue 有两个大版本,分别是 vue-2 和 vue-3,目前新项目的话用 vue-3 的会比较多…...
ArcGIS Pro SDK根据Xml/Json文件反向生成几何
需求: geometry文件导出后的xml,在另一台电脑上反向生成geometry 解决方案: 点 MapPoint minPointImport MapPointBuilderEx.FromXml(xml); 线 包络线 Envelope envelopeImport EnvelopeBuilderEx.FromXml(xml); 面 var geometryB…...
LY/T 3301-2022 实木厚芯胶合板检测
实木厚芯胶合板是指按照相邻层单板木纹方向垂直组坯,通过胶黏剂将表板、中间层板和芯板黏合而成的5层或5层以上的对称结构板材。 LY/T 3301-2022实木厚芯胶合板测试: 测试项目 测试方法 静曲强度 GB/T 17657 弹性模量 GB/T 17657 含水率 GB/T 17…...
代码随想录算法训练营第十六天| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数
代码随想录算法训练营第十六天| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数 题目 104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 # Defin…...
字符串——OJ题
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、字符串相加1、题目讲解2、思路讲解3、代码实现 二、仅仅反转字母1、题目讲解2、思路讲解3…...
Linux---cp和mv命令选项
1. cp命令选项 命令选项说明-i交互式提示-r递归拷贝目录及其内容-v显示拷贝后的路径描述-a保留文件的原有权限 cp -i命令选项效果图: cp -r命令选项效果图: cp -v命令选项效果图: cp -a命令选项效果图: -a选项说明: -a 选项还支持拷贝文件夹并且文件夹中的文件权限不丢失 …...
LVS负载均衡器(nat模式)+nginx(七层反向代理)+tomcat(多实例),实现负载均衡和动静分离
目录 前言 一、配置nfs共享存储 二、配置2个nginx节点服务的网页页面 节点1:192.168.20.10 步骤一:修改网关指向调度器的内网ip地址 步骤二:将nfs共享的目录进行挂载,并修改nginx的配置文件中location的root指向挂载点 步骤三ÿ…...
【深度学习】TensorFlow深度模型构建:训练一元线性回归模型
文章目录 1. 生成拟合数据集2. 构建线性回归模型数据流图3. 在Session中运行已构建的数据流图4. 输出拟合的线性回归模型5. TensorBoard神经网络数据流图可视化6. 完整代码 本文讲解: 以一元线性回归模型为例, 介绍如何使用TensorFlow 搭建模型 并通过会…...
智能插座是什么
智能插座 电工电气百科 文章目录 智能插座前言一、智能插座是什么二、智能插座的类别三、智能插座的原理总结 前言 智能插座的应用广泛,可以用于智能家居系统中的电器控制,也可以应用在办公室、商业场所和工业控制中,方便快捷地实现电器的远…...
5G工业网关视频传输应用
随着科技的不断进步,5G网络技术已经成为了当前最热门的话题之一。而其中一个引人注目的领域就是5G视频传输和5G工业网关应用。在传统网络通信中,由于带宽和延迟的限制,视频传输常常受到限制,而工业网关应用也存在着链路不稳定、数…...
Axure电商产品移动端交互原型,移动端高保真Axure原型图(RP源文件手机app界面UI设计模板)
本作品是一套 Axure8 高保真移动端电商APP产品原型模板,包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由一百三十多个界面上千个交互元件及事件组…...
【k8s】使用Finalizers控制k8s资源删除
文章目录 词汇表基本删除操作Finalizers是什么?Owner References又是什么?强制删除命名空间参考 你有没有在使用k8s过程中遇到过这种情况: 通过kubectl delete指令删除一些资源时,一直处于Terminating状态。 这是为什么呢? 本文将…...
vscode
文章目录 变量引用Multi-selections(multi-cursor)Column (box) selection在正则表达式替换中改变大小写tasks.jsonlaunch.json vscode工作空间下有一个.vscode文件夹,该文件夹下放置了vscode的配置文件,主要有: settings.json : vscode的设置…...
Jrebel 在 Idea 2023.3中无法以 debug 的模式启动问题
Jrebel 在 Idea 2023.3中无法以 debug 的模式启动问题 Idea 在升级了2023.3以后,Jrebel 无法以 debug 的模式启动,找了半天,最后在插件主页的评论区找到了解决方案 特此记录一下...
【C++】模版初阶(初识模版)
目录 一、引言 二、函数模版 (一)函数模版的原理 (二)函数模版的实例化 1.隐式实例化 2.显式实例化 (三)模板参数的匹配原则 三、类模版 类模版的实例化 一、引言 我们在练习题目的时候总会遇到需…...
智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.差分进化算法4.实验参数设定5.算法结果6.…...
10 种隐藏元素的 CSS 技术
10 种隐藏元素的 CSS 技术 在 Web 开发中,在许多情况下我们可能希望操纵网站上某些元素的可见性。本文将考虑各种用例,探讨使用 CSS 隐藏元素的十种不同方法。 隐藏元素的具体行为可能会根据我们的需要而有所不同。我们可能需要为隐藏元素保留空间的方…...
SQL Server数据库使用T-SQL语句简单填充
文章目录 操作步骤:1.新建数据库起名RGB2.新建表起名rgb3.添加三个列名4.点击新建查询5.填入以下T-SQL语句,点击执行(F5)6.刷新之后,查看数据 操作环境: win10 Microsoft SQL Server Management Studio 20…...
django做企业级网站/拉新推广渠道
毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdbwindows里是这样的Linux下是这样的一般我在linux下来调试Java程序好,那么,问题来了&am…...
烟台市住房和规划建设管理局网站/网上推广专员是什么意思
转载于:https://www.cnblogs.com/cicser/archive/2010/07/20/1781437.html...
香河网站建设/网站软件下载
转载于:https://www.cnblogs.com/panda88/p/6006372.html...
如何在自己电脑上做网站服务器/数据网站
2.1 问题 创建randpass.py脚本,要求如下: 编写一个能生成8位随机密码的程序 使用random的choice函数随机取出字符 改进程序,用户可以自己决定生成多少位的密码 2.2 方案 导入random模块,通过random静态对象调用choice()方法&…...
驻马店做网站的公司/seo的工具有哪些
viewpager.getChildCount() 非常easy误解成viewpager子页面的size。它和getCount还是有差别的 getChildCount() 是表示当前可见页size 比方:Viewpager总共3页 当到第一页时候可见页面为2(在滑动过程,可见第一张和第二张)ÿ…...
郑州建设企业网站公司/怎么找到精准客户资源
4.2 长训练序列的生成 从时域上来看,帧结构在短训练序列之后是长训练序列,其长度为8us,其中包括二个有效OFDM符号的长度(每个3.2us)和一个长型保护间隔的长度(1.6us)。 长训练序列主要用于精确的…...