【Python】Java程序员学习Python(五)— 函数的定义和使用
不想做一个待宰的羔羊!!!!要自己变得强大。。。。
函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍,方法的目的还是重用和封装
一、方法的定义
方法的定义使用关键词def来定义,定义格式如下:
def 方法名(参数定义):
方法体
- 方法名:方法名的规范同变量名规范一样
- 参数定义:比较复杂,后面会进行讲解
- 冒号:这个类似于Java的{},必不可少
- 方法体:方法实现的功能在此定义即可
简单的例子:
#定义sayHello
def sayHello():
print('hello yiwangzhibujian')
#调用方法
sayHello()
基本用法还是很简单的,深入起来也不难。
二、方法的返回值
返回值的关键字使用return,一般来说,所有的方法都是有返回值的,如果方法没有使用return,那么Python会在代码结束的时候自动添加:return None
返回值的用法和Java语言一样,用来返回结果或者提前结束方法,但是也有一些不一样的地方
2.1 返回多个结果
这是一个比较特殊的功能,可以返回多个值,实际上返回的是一个tuple,返回值的使用方法和tuple的使用方法是一样的,简单例子如下:
def returnMulti():
return 1,2,3
result=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。
当然一般的字符串转数字都是十进制,所以把10当做默认的进制,当然如果需要转换二进制,也是可以设置参数的,这就需要主动设置了:
print(int(''))
print(int('',base=10))
print(int('',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')
=========控制台输出===========
yiwangzhibujian 27 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来表示空着的函数:
def me():
pass
这样的话运行就不会报错了,等以后想好实现再来补充。
4.2 参数类型检查
因为Python不是强类型语言,所以参数的类型是不能确定的,可是当我们在参数类型不确定的情况下去假定它的类型并使用它,就会发生异常,因此对传入参数进行类型检查就是有必要的,当传入错误的参数可以进行有效的提醒,参数类型检查使用前面讲过的全局函数isinstance()即可,函数具体使用方法详见:Java程序员学习Python(四)— 内置方法和内置变量中isinstance()的介绍。
4.3 传入函数
既然前面说过函数也是一个对象,那么Python也是允许传入一个方法的。例如定义一个判断方法:
def judge(fun,*num):
return fun(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=abs
print(abs2(-1))
这个只是基本理解,后续学习后的理解会再来补充。。
【Python】Java程序员学习Python(五)— 函数的定义和使用的更多相关文章
- 【Python】Java程序员学习Python(二)— 开发环境搭建
巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. ...
- 【Python】Java程序员学习Python(三)— 基础入门
一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...
- 【Python】Java程序员学习Python(六)— 流程控制、异常处理
和Java语言一样,Python也有基本的流程控制,简单了解下即可. 一.流程控制的元素 条件 条件就是布尔值或者布尔值的表达式,要么是True要么是False. 代码块 在Python中,代码块不是 ...
- 【Python】Java程序员学习Python(一)— 为什么学习Python
现在是6月份,毕业快3年了,虽然不能说对Java掌握的程度达到了如火纯青的地步,但是依然感觉到了瓶颈期,Java用的多了,也到了随心所欲的地步了,所以学第二门语言的想法一直在我脑海里闪现,有想法了就要 ...
- 【Python】Java程序员学习Python(十)— 类、包和模块
我觉得学习到现在应该得掌握Python的OOP编程了,但是现在还没有应用到,先留一个坑. 一.类和对象 说到类和对象其实就是在说面向对象编程,学完Java以后我觉得面向对象编程还是很不错的,首先封装了 ...
- 【Python】Java程序员学习Python(七)— 文本类详解(字符串、str)
如果一个女孩子喜欢看龙猫,那么请珍惜她,呵护她 任何一门语言,字符串总是最基本也是最需要掌握的一个变量,想想入门的Hello World,输出的就是字符串. 官方文档:https://docs.pyt ...
- 【Python】Java程序员学习Python(四)— 内置方法和内置变量
<假如爱有天意> 当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱 ...
- 【Python】Java程序员学习Python(十一)— IO
一.前言 io的内容其实还是有很多的,现在我也只是了解初步用法,当然详细内容还是应该参照官方api的: 官方api:https://docs.python.org/3/library/os.html. ...
- 【Python】Java程序员学习Python(九)— 集合(list、tuple、range)和映射(dict)
集合是一门语言最重要的一个特性,对集合支持的程度越好,使用起来越方便 一.表现形式 1.1 list list的基本用法: 使用中括号包裹,[1,2,3] 元素类型可以是任意类型,同样可以是list ...
随机推荐
- eolinker接口测试平台的安装部署
1.从GitHub下载安装包: https://github.com/eolinker/CHN-EOLINKER-AMS-Lite-4.0-For-Java 使用 git clone https:// ...
- CSSREM
一个CSS的px值转rem值的Sublime Text 3自动完成插件. 安装 下载本项目,比如:git clone https://github.com/flashlizi/cssrem 进入pac ...
- web测试总结—用户体验
一.什么是用户体验 用户体验,英文叫做user experience,缩写为UE,或者UX.一个较常见的定义是“指用户访问一个网站或者使用一个产品时的全部体验.他们的印象和感觉,是否成功,是否享受,是 ...
- 6.6. Access Control
解读 6.6.2.2. Qualified Access to a protected Constructor https://docs.oracle.com/javase/specs/jls/se7 ...
- Shiro的Filter机制详解---源码分析
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- Nodejs学习笔记(十二)—定时任务(node-schedule)
写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非 ...
- mongodb带认证的副本集搭建
Mongodb副本集带用户认证的 概述 本次实验是在一台虚拟机上做的,正式环境一定要分开实现,以免影响服务的正常使用和性能. 准备工作: 操作系统:centos7.2 Mongodb版本:3.4.1 ...
- 原生js实现拖动滑块验证
拖动滑块验证是现在的网站随处可见的,各式各样的拖动法都有. 下面实现的是某宝的拖动滑块验证: <!DOCTYPE html> <html lang="en"> ...
- Tornado简介
Tornado是一个具有强大异步功能的Python Web框架. Hello World 使用pip安装tornado: pip install tornado 编写控制器: import torna ...
- PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理
PHP中关于时间(戳).时区.本地时间.UTC时间等的梳理 在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎 ...