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使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
浅谈python中set使用
Jun 30 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
Python获取当前路径实现代码
May 08 Python
Python模拟三级菜单效果
Sep 11 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
Aug 25 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
Django 用户认证Auth组件的使用
Nov 30 Python
python中Mako库实例用法
Dec 31 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
征婚广告词
2014/03/17 职场文书
保密承诺书范文
2014/03/27 职场文书
小学校本培训方案
2014/06/06 职场文书
小学英语复习计划
2015/01/19 职场文书
赵氏孤儿观后感
2015/06/09 职场文书