用“餐厅打包”的故事说明白Python里面的自定义函数
注:博主并非Python专业程序员,年龄12岁,Python龄不到1岁,才疏学浅,如有错误还请大佬指教! 希望能通过本专栏帮助到一些Python小白!
嗨~大家好!上篇博文咱们说了,万一有一些上万行才能实现的功能没有库,只能自己写了,那么如何简化咱们复制粘贴上万行的这个过程嘞?

函数是个啥?

呃,不要担心,函数其实就是我们去饭店吃饭,然后要求服务员打包。

不不不,就是这样的,至少在Python里是这样的。我们举例来说明。
| 标准名称 | 实际意义 |
|---|---|
| 函数 | 打包 |
| 函数里面的东西 | 打包的食物 |
如何定义函数
好了,先说这么多,来讲讲怎么定义一个函数。
def blablabla():
print('我就是函数的内容!欧耶!')
a = True
while a:
print('快快关注我!')
a = False
注意几点
1. 函数的命名规范
和变量一样~~
- 要让人能看懂。
- 函数名必须是英文字母,数字和下划线的结合,数字不能做变量名称的第一个字符,
- 变量名称也不能跟Python内置的东西(也就是内置的函数)重名。要不然Python同学又该糊涂了。
2. 标点符号
定义函数时必须遵守如下格式:
def 函数名():
并且函数的内部的代码必须缩进,如果忘记了缩进或者是把缩进删掉了,在那行前按下Tab键即可。

如何运行函数
很简单~
在定义好函数名以后就直接输入
函数名()
比如我的:blablabla()
运行结果就是:

切记:运行函数有且仅有这种方式!!
这时,你或许会发现一个问题。

没错,那么这个问题该怎么解决呢?

对,我们可以在括号里面加上一些东西,这些“东西”类似于变量,但又不是变量。这就好比什么呢?去打包的时候,你跟服务员说:

那么,怎么定义这种函数呢?走起~
如何定义有参数的函数
def blablabla(name):
print('我就是函数的内容!欧耶!')
a = True
while a:
print('快快关注我!',name)
a = False
只要在括号里加上可变元素的名称即可,运行也一样:
如何运行有参数的函数
blablabla('工具人001A')
运行就会得到:
我就是函数的内容!欧耶!
快快关注我! 工具人001A
注意常见几个BUG出没地
1. 你给了参数的地方,但运行时不给参数
反面教材:
def blablabla(name):
print('我就是函数的内容!欧耶!')
a = True
while a:
print('快快关注我!',name)
blablabla()
报错提示:


注:“可变元素”是非正式称呼,正式称呼为“参数”。
2. 反之,你给了参数,但是没给参数的地方
反面教材:
def blablabla():
print('我就是函数的内容!欧耶!')
a = True
while a:
print('快快关注我!',name)
a = False
blablabla('hhh')
报错提示:


注:“可变元素”是非正式称呼,正式称呼为“参数”。
如何定义与运行有多个参数的函数
嘿这就有意思了。其实就是用逗号分隔。
def all_about_you(name,sex,age,hobby):
print('wow, your name is',name,'and your sex is',sex,'and you are',age,'years old and you like',hobby)
all_about_you('xiaocao162020','boy',12,'writing Python')
这样运行就会得到:
wow, your name is xiaocao162020 and your sex is boy and you are 12 years old and you like writing Python
啊别管没有标点符号的问题哈,写着玩而已,这个也有几个bug,比如你给了3个可变元素地方,运行时只输入2个可变元素,或者反之。都会报错。下面给大家看另一种BUG,准确地说,不算BUG:
def all_about_you(name,sex,age,hobby):
print('wow, your name is',name,'and your sex is',sex,'and you are',age,'years old and you like',hobby)
all_about_you('writing Python','12','boy','xiaocao162020')
运行,没有报错,但是显示了:
wow, your name is writing Python and your sex is 12 and you are boy years old and you like xiaocao162020
翻译过来绝对笑死你:


为了保证不会这样,我们可以按顺序输入或者这样:
def all_about_you(name,sex,age,hobby):
print('wow, your name is',name,'and your sex is',sex,'and you are',age,'years old and you like',hobby)
all_about_you(hobby='writing Python',age='12',sex='boy',name='xiaocao162020')
有木有一种很亲切的感觉?
是的!咱们用Python操作文件那一篇的对于打开文件的代码正是:
file1 = open('blablabla.txt',encoding='utf-8',mode='r')
没错没错,正是你想的那样!open实际上是Python的一个内置函数!内置函数和自定义函数的运行方式完全一致!
好吧,这篇貌似该收尾了,有问题欢迎联系我哈~

用“餐厅打包”的故事说明白Python里面的自定义函数的更多相关文章
- python学习之--自定义函数:
Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...
- python怎么导入自定义函数
python 编程中经常需要调用自己定义的函数,在大型程序中自定义的函数一般会和main函数分开,这么主要讲下在不同文件下定义的函数怎么调用: 首先在有文件夹test_python文件夹下有main. ...
- Python基础(二)自定义函数
1.判断字符串,内容是否为数字 我们用python:xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型 我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我 ...
- python 基础篇 自定义函数
多态 我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型.列表.字符串等等的操作中. 在编 ...
- Python学习教程(learning Python)--2.1 Python下自定义函数
在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆. 函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则 ...
- python的自定义函数
今天想把上次参考着网上教程写的scrapy爬虫改写成requests和beautifulsoup的普通爬虫,写着写着发现自己对python的自定义函数还不是太熟悉(自己TCL了.........流泪) ...
- Python中关于Lambda函数的使用总结
lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...
- python中常用的函数与库一
1, collections.deque 在python里如果我们用列表作为队列使用也是可以的,只是当从队尾删除或者增加元素的时候是很快的,但是从队首删除或者增加元素则要慢得多,这是因为在队首进行操作 ...
- python基础-内置函数详解
一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...
- python中使用zip函数出现<zip object at 0x02A9E418>
在Python中使用zip函数,出现<zip object at 0x02A9E418>错误的原因是,你是用的是python2点多的版本,python3.0对python做了改动 zip方 ...
随机推荐
- v-html渲染页面的时候 css样式无效
感谢: https://www.cnblogs.com/niuxiaoxian/p/9443873.html 当我们用v-html渲染页面的时候会发现样式并没有添加上,如下 复制代码 <temp ...
- 如何理解Spring框架中的ioc?
目录 如何理解Spring框架中的ioc? DI 耦合和内聚 如何理解Spring框架中的ioc? ioc,Inversion of Control(控制反转),是Spring中的一种设计思想而非技术 ...
- 【开发宝典】Java并发系列教程(四)
作者:京东零售 刘跃明 Monitor概念 Java对象的内存布局 对象除了我们自定义的一些属性外,还有其它数据,在内存中可以分为三个区域:对象头.实例数据.对齐填充,这三个区域组成起来才是一个完整的 ...
- C++并发-同步并发
1.等待事件 std::mutex m; void wait() { std::unique_lock<std::mutex> lk(m); lk.unlock(); std::this_ ...
- rt-thread模糊到清晰系列: thread切换相关
// 创建thread tid = rt_thread_create("main", main_thread_entry, RT_NULL, RT_MAIN_THREAD_STAC ...
- Excel操作技巧
命令 获取行号ROW(D2).COLOUM(D2) 快捷键 alt+=求和:alt+f1生成柱形图:alt+回车强制换行:alt+178输入平方:alt+179输入立方: shitf+大十字光标 换位 ...
- Spring注解篇,学完注解深入了解SpringBoot更容易
由于Spring Boot项目底层也都是Spring,使用Spring Boot就需要对Spring的注解有一定的了解,这次就把Spring的部分注解聊一下.熟悉了Spring的注解使用Spring ...
- 基于C++的OpenGL 09 之材质
1. 引言 本文基于C++语言,描述OpenGL的材质 前置知识可参考: 基于C++的OpenGL 08 之基础光照 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍
由于GrapeOS目前只支持x86,所以本讲我们简单的介绍一下x86. 百度百科上是这样介绍的:x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构. 中央处理器就是我们平时说的C ...
- pat乙级 1021个位数统计
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...