java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...

不想做一个待宰的羔羊!!!!要自己变得强大。。。。

函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍,方法的目的还是重用和封装

一、方法的定义

方法的定义使用关键词def来定义,定义格式如下:

def方法名(参数定义):

方法体

方法名:方法名的规范同变量名规范一样

参数定义:比较复杂,后面会进行讲解

冒号:这个类似于Java的{},必不可少

方法体:方法实现的功能在此定义即可

简单的例子:

#定义sayHello

defsayHello():print('hello yiwangzhibujian')#调用方法

sayHello()

基本用法还是很简单的,深入起来也不难。

二、方法的返回值

返回值的关键字使用return,一般来说,所有的方法都是有返回值的,如果方法没有使用return,那么Python会在代码结束的时候自动添加:return None

返回值的用法和Java语言一样,用来返回结果或者提前结束方法,但是也有一些不一样的地方

2.1 返回多个结果

这是一个比较特殊的功能,可以返回多个值,实际上返回的是一个tuple,返回值的使用方法和tuple的使用方法是一样的,简单例子如下:

defreturnMulti():return 1,2,3result=returnMulti()print(result)print(isinstance(result, tuple))========控制台输出========(1, 2, 3)

True

所以定义函数的时候写好注释,让使用者明确知道返回值的类型。

2.2 返回函数

除了能够返回数值以后,还能返回一个函数,因为函数也是一个变量。感觉和js一模一样。

三、方法的参数

方法参数的情况就比较多了,除了基本用法以外,其他的也需要好好掌握。

3.1 方法的重载

因为参数没有了类型,所以Python的函数的重载不能靠参数类型了,而只能靠参数的个数,这一点还是比较头疼的,类型需要在方法体内进行判断。

3.2 参数默认值

当需要传入多个参数的时候,如果有的参数的值使用频率非常高,可以把这个值设置为默认值,这样方便使用。

比如说字符串转换数字的全局函数:int()

一个参数的定义:int(x=0)

两个参数的定义:int(x, base=10)

当只有一个参数的时候,即便不输入,也有一个默认值为0:

print(int())print(int(0))print(int('0'))

因此上面三个输出均为0。

当然一般的字符串转数字都是十进制,所以把10当做默认的进制,当然如果需要转换二进制,也是可以设置参数的,这就需要主动设置了:

print(int('10'))print(int('10',base=10))print(int('10',base=2))=========控制台输出=========

10

10

2

这就是默认值的基本用法,但有一点要注意的,默认参数默认值必须放在普通参数后面。

3.3 可变参数

可变参数和Java的可变参数是一样的,用来代表同一处理方式的数量不确定的参数,只是表现形式不一样,下面示例方法打印实际传入方法的参数,具体实现可以根据实际情况来:

def see(*nums):print(nums)print(isinstance(nums, tuple))

see(1,2,3)=========控制台输出=========(1, 2, 3)

True

由此可知,可变参数实际上是以tuple的形式传入方法内部的。使用可变参数也要注意以下事项:

一个方法只能有一个可变参数

可变参数必须放在默认参数的后面

3.4 关键字参数

可变参数还是有它的缺点的,就是只能是同一种元素的多个值,用在不需要区分每个值类型的情况下才能使用,但是当需要区分的时候则需要使用关键字参数,可以连同这个参数的名称一起传进来:

def see(**keyvalue):print(keyvalue)print(isinstance(keyvalue, dict))

see(a=1,b=2,c=3)=======控制台输出======={'a': 1, 'b': 2, 'c': 3}

True

可以发现,实际上Python把关键字参数封装成一个dict并传入到方法内,这样拿到它后就可以进行使用,至于用法等你有这个需求的时候就可以使用了。

关键字参数的输入也是可以加以限制的,使用*分割,后面的即是限定的输入名称:

def info(name,age,*,country,city):print(name,age,country,city)

info('yiwangzhibujian',27,country='Chine',city='BeiJing')=========控制台输出===========yiwangzhibujian27 Chine BeiJing

当然如果关键字参数指定需要的参数值,但是却没有输入的时候,还是会报错的,因此也是可以给关键字参数加上默认值的:

def info(name,age,*,country=’China',city):

print(name,age,country,city)

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了,例如:

def person(name, age, *favoNum, country, city):print(name, age, favoNum, country, city)

掌握以上基本用法就可以了。

3.5 各种类型参数的混用

参数类型多了,怎么使用就很头痛,顺序错了还不行。顺序如下:普通参数、默认参数、可变参数、关键字参数。

四、函数的其他应用

4.1 空函数

当我们定义了一个参数时,如果还没有想好怎么实现,空着的话是会报错的,这时候可以使用pass来表示空着的函数:

defme():pass

这样的话运行就不会报错了,等以后想好实现再来补充。

4.2 参数类型检查

因为Python不是强类型语言,所以参数的类型是不能确定的,可是当我们在参数类型不确定的情况下去假定它的类型并使用它,就会发生异常,因此对传入参数进行类型检查就是有必要的,当传入错误的参数可以进行有效的提醒,参数类型检查使用前面讲过的全局函数isinstance()即可,函数具体使用方法详见:Java程序员学习Python(四)— 内置方法和内置变量中isinstance()的介绍。

4.3 传入函数

既然前面说过函数也是一个对象,那么Python也是允许传入一个方法的。例如定义一个判断方法:

def judge(fun,*num):returnfun(num)print(judge(max,1,2,3))print(judge(min,1,2,3))==========控制台输出===========

3

1

这样就根据传入的方法来获取指定的数字,当然参数类型检查还是有必要的,不然对一个不是函数的参数调用方法肯定是会报错的。

4.4 文档中方法的描述形式

学习Python的过程中还是要经常看文档的,关于文档中对函数的描述简单介绍下,首先你要掌握上面的几种参数类型,这是基本的要求。还有就是对中括号的理解:

例如:str.endswith(suffix[, start[, end]]),中括号代表参数可选择输入,不是必填项,当然可选择也代表着有默认值,注意查看函数的定义,也就是说,这个函数可以如此输入:

str.endswith(suffix)

str.endswith(suffix, start)

str.endswith(suffix, start, end)

这个了解即可,实际定义函数的时候不能这么定义。

4.5 对函数的深层理解

函数也是一个对象和js类似,方法名只是指向函数对象的一个引用,这种特性会有以下效果:

print(abs(-1))

abs2=absprint(abs2(-1))

这个只是基本理解,后续学习后的理解会再来补充。。

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

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

相关文章

java 斜率求角度_计算两条线之间的角度而不必计算斜率? (Java)

我有两条线:L1和L2。我想计算两条线之间的角度。 L1具有点:{(x1,y1),(x2,y2)}和L2具有点:{(x3,y3),(x4,y4)}。如何计算这两条线之间形成的角度,而不必计算斜率…

java runtime类 heap_Java 进阶(一) JVM运行时内存模型

1.JVM运行时数据区域的划分a.程序计数器(Program Counter Register)一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。每个线程拥有独立的一个计数器,如果当前执行的是Native方法,则计数器值为空。b.JVM栈(Java Virtual Ma…

jmeter java性能_jmeter java性能测试

本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post1:新建maven工程,pom文件为1 2 xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd…

mysql 换服务器_更换MYSQL后数据库连接问题

【IT168 服务器学院】查看MYSQL数据库中 数据库与用户的连接方式>mysql -uroot -ppassword>use mysql;>select User,host,Password from user;问题:将备份的MYSQL数据库CP回DATA下后,老是连接数据库出错,或是提示UPDATE之类&#xf…

java 向上转型_java向上转型和向下转型

转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。向上转型:子…

ckeditor java 上传_java使用CKEditor实现图片上传功能

java如何使用ckeditor实现图片上传功能,具体内容如下1.根据实际需要下载指定的ckeditor2.删除文件ckeditor/plugins/image/dialogs/image.js预览框中文本内容,并修改hidden属性值为显示上传选项卡删除image.js中包含在双引号中的上述文本将image.js中的h…

imsi序列号_IPhone 获取IMSI序列号

获取IPhone的IMSI序列号 无 #include dlfcn.h#define PRIVATE_PATH "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony"- void getImsi(){#if !TARGET_IPHONE_SIMULATOR void *kit dlopen(PRIVATE_PATH,RTLD_LAZY); NSString *imsi获取IPh…

java如何实现信号量_使用二进制信号量实现通用信号量

看到你的问题图像后,输入信号量的目的是只允许单个进程/线程等待锁定,如果你不使用它,其他进程将进入等待队列 .why we need the entry semaphore条目信号量未使用任何值初始化,如果它是全局声明的,则它将初始化为0.因…

java定时任务什么时间e结束_Java定时任务

public classQuartzManager {private static SchedulerFactory schedulerFactory newStdSchedulerFactory();/*** Description: 添加一个定时任务**paramjobName 任务名*paramjobGroupName 任务组名*paramtriggerName 触发器名*paramtriggerGroupName 触发器组名*paramjobClas…

Java中运用数组的四种排序方法_JAVA中运用数组的四种排序方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼快速排序public class TestMain {public static void main(String[] args) {Integer[] list{34,3,53,2,23,7,14,10};QuicSort qsnew QuicSort();qs.quick(list);for(int i0;iSystem.out.print(list[i]" ");}System.out.p…

java 时间转中文_使用JScript把时间转成中文

测试页function TimeCtrl(){this.DateObj new Date();this.toGb function(Str){Str Str.toString();if(/^\d$/.test(Str)){var NewStr "";var GBNum "零一二三四五六七八九";for(var i 0; i < Str.length; i){NewStr GBNum.charAt(Str.charAt(i)…

java比赛用多重for_关于 Java 中 for的多重循环

1、i1&#xff0c;赋值2、判断 i < 3(i为1)&#xff0c;结果为 true&#xff0c;进入循环体 A&#xff1a;for (int j 1;j < i;j) {System.out.print("*");} System.out.println(); 这部分。3.0、执行循环体 A。3.1、j 1&#xff0c;赋值3.2、判断 j < i …

java 程序流程控制知识点_JAVA基础知识点梳理三:流程控制语句

条件语句之 if语法&#xff1a;执行过程&#xff1a;例&#xff1a;int score 65;if (score > 60) {System.out.println("该学生及格");}//注&#xff1a;如果 if 条件成立时的执行语句只有一条&#xff0c;大括弧可以省略&#xff0c;但如果执行语句有多条&…

寂静岭3java攻略_《寂静岭3HD》通关心得:感人之佳作

作者&#xff1a;jet1942(原帖点击进入)寂静岭是什么?它是人的内心世界,它是人赎罪的地方。读了这句话后&#xff0c;是不是感觉意境非常深邃&#xff0c;还带有些恐怖感?是的&#xff0c;这就是寂静岭的魅力所在&#xff0c;作为一款AVG类游戏&#xff0c;他与生化危机不同&…

java不要无限循环_java – 看似无限循环终止,除非使用System.out.println

我有一个简单的代码,应该是一个无限循环,因为x将永远增长,并将始终保持大于j.int x 5;int y 9;for (int j 0; j < x; j) {x x y;}System.out.println(y);但是按原样,它打印y并且不会无休止地循环.我无法弄清楚为什么.但是,当我按以下方式调整代码时&#xff1a;int x …

jpg无损压缩 java_使用FreeImage对JPEG进行无损优化

您可以使用FreeImage删除元数据&#xff0c;但是&#xff0c;对于jpeg&#xff0c;图像将在保存时重新压缩&#xff0c;并伴随相关的图像质量损失 . by default, FreeImage will have copied the metadata to the new imageIf Not (args.CopyMetadata) ThenDim tag As New Free…

mysql数据应用从入门_MYSQL数据库应用从入门到精通----读书笔记

mysql1、创建数据库create database database_name;2、查看数据库show database_name;3、选择数据库use database_name;4、删除数据库drop database database_name;5、认识支持的存储引擎show engines \g;6、创建数据库表create table t_dept(deptno int,dname varchar(20),loc…

Java zset 应用_Java简单使用redis-zset实现排行榜

简单使用redis-zset实现排行榜此方法实现一个根据某字段的查询次数进行排行&#xff0c;查询的次数越多排行越前(从大到小排序)&#xff0c;适用于初学者1.添加依赖org.springframework.bootspring-boot-starter-data-redis2.注入RedisTemplate方法Autowiredpublic RedisTempla…

安卓的java无法访问网络_Android网络访问的基本方法

Android访问网络的两种主要方式&#xff1a;1、标准Java接口(java.net) ----HttpURLConnection&#xff0c;可以实现简单的基于URL请求、响应功能&#xff1b;2、Apache接口(org.appache.http)----HttpClient&#xff0c;使用起来更方面更强大。一般来说&#xff0c;用这种接口…

create用法java_Java AcousticEchoCanceler.create方法代碼示例

import android.media.audiofx.AcousticEchoCanceler; //導入方法依賴的package包/類Overridepublic boolean initCapturer() {// initalize audio modeaudioManagerMode.acquireMode(audioManager);// get the minimum buffer size that can be usedint minRecBufSize AudioR…