python自定义函数def的应用详解


Posted in Python onJune 03, 2020

这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数

自定义函数,编程里面的精髓!

def

自定义函数的必要函数:def

使用方法:

def 函数名(参数1,参数2,参数…):
  函数体(语句块)
  return [返回值]

注意事项

  • 函数名的命名规则:和标识符的基本规则是一样的,基本上由小写字母和数字下划线构成
  • def 是关键字,不能够修改(define的简称)
  • 函数后面一定要加括号(英文状态的)括号里面是否加参数看具体情况
  • 括号后面的冒号不能够忘记
  • 函数体必须加上缩进(建议4个空格)

案例分析

def hello(): #自定义hello()函数
  print('hello world !')
  
hello() # 调用函数

hello world ! # 输出结果

该处是定义了一个输出‘hello world !'的函数,只要调用hello()即可实现对函数体的调用。

来个复杂点的练练手,感受一下磨刀霍霍向木兰

def add(x, y): # 新建add()
  return x+y

add(3, 7) # 调用add()

运行ing
输出none

啊累累!啊累累!啊累累!
我写了个bug还是写了一个寂寞?

哦哦哦!我建了一个房子没有留门(泪目)
没有输出怎么能够有结果?

print(add(3, 7))
print(add('hello ', 'world'))

#运行结果
10
hello world

作死挑战

记得每一次调用函数都加了 ()那么不加括号的是什么东西?

难道就是传说中的写了个寂寞还是什么东西?

让我们一起来作死看看

print(hello) # 调用hello
print(add) # 调用add

结果:
<function hello at 0x0000020213737048>
<function add at 0x0000020213737678>

哇哦!他真的可以有
经过查询他显示的是这个函数的内存地址,而不是这个函数的结果什么的,函数并没有被调用

  • 温馨提示
  • 调用函数一定要在函数名后面加上括号

函数参数

自定义函数的参数,分为几大类:

  • 位置传参
  • 关键字传参
  • 必选参数
  • 默认参数
  • 可变参数
  • ……

形参与实参

白话时间:(个人理解基础的表达,如有不同之处请指教提出)
形参:
就是参数名称,一个没有被赋值的变量名,不会实际的参与函数的运算,而是起到一个类似占位符的作用。

实参:
实际参加函数运算的值,已经赋值给了相对应的变量名。

ps:以上基于个人理解,本非准确表达,在个人理解基础上的白话表达

位置参数

位置参数就是按照参数的位置进行表达和相对应的

python自定义函数def的应用详解

参数写的位置决定了它所对应的值,这种写法如果有多个参数必须注意,写错位置整个函数有可能会报错,整个程序有可能会奔溃!!!

关键字参数

关键字参数虽然写法较为麻烦但是很好的解决了多个参数因为位置错误导致的函数报错及程序不稳定问题

python自定义函数def的应用详解

通过定义的参数名称来确定对应参数的值,可以有效的解决问题

例:print() 里面除了经常用的输出内容还有end参数
end参数默认是‘\n',如果通过关键字参数进行重新定义就可以改变

for i in range(10):
  print(i)

结果:
0
1
2
3
4
5
6
7
8
9

for i in range(10):
  print(i,end= ' ')

结果:
0 1 2 3 4 5 6 7 8 9

默认参数

在函数涉及过程中很多参数不一定所有人一定用的上,可以设置一个默认值,这样子需要的人可以DIY,没有需要的就采用默认参数
比如print()中 end 就是默认参数默认值为‘\n'

def add(x=0, y=0):
  return x+y

print(add())

结果:
0

必选参数

必选参数就是必须要写的参数,这个与默认参数相对,不是默认参数就是必选参数,如果没有对必选参数进行导入就会引发报错,导致系统函数奔溃

def add(x, y): # 新建add()
  return x+y
  
print(add())

Traceback (most recent call last):
  print(add())
TypeError: add() missing 2 required positional arguments: 'x' and 'y'

这个就是缺少x,y参数导致的异常。
所有在使用函数及自定义时要注意必选参数的设置

可变参数

可变参数这个名字比较高大上,但是实际上很简单
比如要写一个多个数字相加的函数怎么办呢?
直接写?

def add(x, y): # 新建add()
  return x+y

那如果是3个值呢?
会应为多了一个参数报错
那么就改成三个参数?

def add(x, y, z): # 新建add()
  return x+y+z

问题来了如果是2个值那么就会报错缺一个参数,如果是4个及以上就会报错,多了参数
啊啊啊啊啊啊啊啊啊!
只是什么东西,难度python一世英名就毁在这里了嘛?

不不不!
神奇的事情发生了

def 函数名(参数1,参数2,参数…,*可变参数):
  函数体(语句块)
  返回值

emmm,奇怪的知识增长了

def add(x, *y):
  for num in y:
    x += num
  return x

print(add(2,3,4))

结果
9

ps:*y 所产生的是一个tuple(元组)
我们需要先逐个遍历才能够拿到每一个的结果。

可变关键字参数

如果有多个关键字参数或者字典的导入使用 *参数名 无法满足怎么办
难道python一世英名就这样子栽了吗?
不不不
一个 * 不行那么就来两个 **

def personinfo(name, age, **message):
  print(f'name:{name},age:{age},{message}')

personinfo('张三', 23, message = {'city':'北京', 'heigh': 180})

结果:
name:张三,age:23,{'message': {'city': '北京', 'heigh': 180}}

在里面得到的结果是一个字典,看例子可以知道得到了一个镶嵌的字典

参数问题解答参数的书写要求:
① 必选参数写在最前面
②默认参数写在必选参数后面
③默认参数后面是关键字参数
④关键字后面是*函数名(可变参数)
⑤后面跟着可变关键字参数(**函数名)

ps:按照该顺序走,没有的可以不写

def a(x , y=0, *z, **i):
  print(f'x:{x};y:{y};z:{z};i')

以上就是举例子,命名方式不符合规定,不要借鉴
不安以上方式可能出现各种奇怪的情况

到此这篇关于python自定义函数def的应用详解的文章就介绍到这了,更多相关python自定义函数def内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python程序设计入门(2)变量类型简介
Jun 16 Python
Python编写生成验证码的脚本的教程
May 04 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python选课系统开发程序
Sep 02 Python
python matlibplot绘制3D图形
Jul 02 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
python爬取天气数据的实例详解
Nov 20 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
Python中的整除和取模实例
Jun 03 #Python
python 负数取模运算实例
Jun 03 #Python
Python小白学习爬虫常用请求报头
Jun 03 #Python
Python新手学习函数默认参数设置
Jun 03 #Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 #Python
Python新手学习raise用法
Jun 03 #Python
Django实现任意文件上传(最简单的方法)
Jun 03 #Python
You might like
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
Python类定义和类继承详解
2015/05/08 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
Python如何读取、写入JSON数据
2020/07/28 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
应聘医药销售自荐书范文
2014/02/08 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
捐助倡议书范文
2014/04/15 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang