write in front
大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜66 » 总榜1924
本文由 謓泽 原创 CSDN首发如需转载还请通知⚠
个人主页-打打酱油desuCSDN博客
欢迎各位→点赞 + 收藏⭐️ + 留言
系列专栏-【Python】系列_謓泽的博客-CSDN博客[〇~①]
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本
『Python』⇿ 函数(ง •_•)ง
write in front
走进函数
函数的使用包含②个步骤如下↓
封装
面向对象
函数的好处
定义函数
函数调用
第一个函数
自定义add()实现相加
参数↓
函数的调用
函数调用放在函数定义
函数的嵌套调用
任意字符和任意数量组成一条线
Python当中的函数是运用的非常的广泛的,之前我们学习过的函数实际上都是内置函数。例如:print()、input()、del()、len(),这些都是Python当中的 内置函数 我们是可以直接使用的。
那么我们除了可以使用内置函数,实际上我们也可以自己自定义一个函数。可能有小伙伴听到这里有点不明白,謓泽什么是自己自定义一个函数啊。其实这个很好理解的:假设我要实现一个加法、乘法、除法、减法的操作,那么程序当中没有给我们实现这个函数的功能的时候。此时,我们就可以实现一个函数操作,专门用来计算的函数 calculate(),这样是不是特别的好。
所谓的函数,实际上就是把具有独立功能的代码块,组织成一个小模块,当我们需要使用的时候直接调用函数即可。非常的方便☆⌒(*^-゜)v THX!!
函数的使用包含②个步骤如下↓
- 定义函数→ 封装 独立的功能。
- 调用函数→ 享受 封装 的实际。
封装
实际上是计算机当中的术语。封装具有一个最大的特点。
那就是它的保密性极强,简单来说就是隐藏了封装上的属性和实现的细节。这里在设计一个知识点。
面向对象
在编程中,封装(encapsulation)是将对象运行所需的资源封装在程序对象中——基本上,是方法和数据。对象是"公布其接口"。其他附加到这些接口上的对象不需要关心对象实现的方法即可使用这个对象。这个概念就是"不要告诉我你是怎么做的,只要做就可以了。"对象可以看作是一个自我包含的原子。对象接口包括了公共的方法和初始化数据。
降低复杂性
用函数的最首要原因是为了降低程序的复杂性,可以使用函数来隐含信息,从而使你不必再考虑这些信息。
避免重复代码段
如果在两个不同函数中的代码很相似,这往往意味着分解工作有误。这时,应该把两个函数中重复的代码都取出来,把公共代码放入一个新的通用函数中,然后再让这两个函数调用新的通用函数。通过使公共代码只出现一次,可以节约许多空间。
限制改动带来的影响
由于在独立区域进行改动,因此,由此带来的影响也只限于一个或最多几个区域中。
函数能提高应用的模块性,和代码的重复利用率。
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()记得后面还要有冒号(:)。
注意→函数的内容以冒号:开始并且还要缩进(Tab)
- def 是英文 define 的缩写形式。
- 函数名称 应该能够表达函数封装的代码 的功能,方便后续的调用。
- 函数名称 命名应该要 符合标识符的命名规则。
标识符的命名规则有如下↓
- 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
- 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
- Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符
定义函数的形式如下↓
def 函数名(参数列表): 函数的封装的代码 ... //注意缩进Tab
函数调用
调用函数的内容实际上是非常容易的,容易的简直是不能再容易了。连我都会(^∀^●)ノシ
通过函数名()来进行调用即可。
第一个函数
那么我们现在就定义一个hello_word()来实现打印hello word!代码示例如下↓
def hello_word(): print('hello word') hello_word()
运行结果
hello word
自定义add()实现相加
此时张三就来捣乱的说:那我要实现add()两个数字的相加怎么去实现呢。
那我们再来先介绍下函数的形式,如下代码所示↓
def 函数名(参数列表): //实现特定功能的多行代码 return 返回值
形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号(,)分隔。
return 返回值:整体作为函数的可选参参数,用于设置该函数的返回值。也就是说,一个函数,可以用返回值,也可以没有返回值,是否需要根据实际情况而定。接收返回结果也是特别容易的我们只需要创建一个变量来进行接收结果即可。
好了那么当我们了解了基本情况的时候就来实现下,代码示例如下↓
def add(x,y): pass return x + y x = 10 y = 20 ret = add(x,y) print('%d和%d相加的值:%d' % (x,y,ret))
运行结果
10和20相加的值:30
参数↓
下面注意两点函数参数的使用如下↓
- 在函数名的后面的小括号内部需要填写参数
- 多个参数之间需要使用,(逗号)分隔。
上面当中的 add(x,y):是形式参数,而 add(x,y) 是实际参数。区别就是观察后面有没有冒号(:)即可。
- 形参:定义函数的时候,小括号中的参数,是用来接收参数用的,在函数的内部当中会作为变量来进行使用。
- 实参:调用函数的时候,小括号中的参数,是用来吧数据传递到函数的内部当中用的。
函数的调用
上述示例的代码当中我们就是使用到了函数的调用。
函数调用的基本语法如下↓
返回值 = 函数名(形参值)
在函数名即指的是要调用的函数的名称;
形参值指的是当初创建函数时要求传入的各个形参的值;例如上面代码我们分别就传入了x的值和y的值。
如果当我们实现的代码拥有返回值(return)的话,我们就需要一个变量来进行接收,那么这个变量就会获取到返回的值大小。
加入有两个或者多个形参,那么我们可以使用逗号分隔符来进行分割。
如果我们没有加入形参值的话那么后面函数名的 小括号() 我们还是需要保留的。
函数调用放在函数定义
张三:那么我们能不能将函数的定义放在下方,把函数的调用放在上方呢。
謓泽:这是不行的,因为python是一门解释型语言。如果这里是C语言的话那它是可以的,因为在C语言当中我们只需要在函数当中声明下即可。而解释性语言是需要先定义好变量,然后再是才能调用。
接下来我们来用程序来看看,还是调用 hello_word() 来观察程序运行结果,如下代码所示↓
hello_word() def hello_word(): print('hello word')
运行结果
NameError: name 'hello_word' is not defined
上述英文的意思是:名称"hello_word"未定义,从这里我们可以知道运行结果错误。
函数嵌套调用非常的好理解就是:一个函数里面又调用了另一个函数,那么这就是函数嵌套调用的形式。
那么下面我们来举个例子,如果 test1 当中,调用了另外一共函数 test2 中。
规定:test1 当中打印的是 hello python,则 test2 当中打印的是 你好 蟒蛇。
如下代码所示↓
【Python】系列_謓泽的博客-CSDN博客运行结果如下
hello python
你好 蟒蛇在上述图中就是带大家直观的观察它走的每一步的信息,这样方便我们去理解函数嵌套。
任意字符和任意数量组成一条线
在这里我们可以使用函数来完成这道题目。[函数实现]
此时的张三就说这不是有手就行吗。让我来试试,示例代码如下↓
def h_l(): print("*" * 50) pass h_l()
运行结果
**************************************************
张三那你这样岂不是只能规定 字符("*") 和 数量(50),可是我们是需要的是任意,可是你这样岂不就是固定的,没有达到我的题目要求啊。
接下来在看看另一组代码如下↓假设我们要打印的字符("-")和数量(20)
def h_l(char, num): print(char * num) pass h_l("-",20)
运行结果
--------------------
张三不服气的说你这不还是固定的。
那你看下面的代码,如果我用input()来呢。如下代码所示:↓
def h_l(char, num): print(char * num) pass c = str(input('请输入字符:')) n = int(input('请输入数量:')) h_l(c,n)
运行结果
请输入字符:+
请输入数量:35
+++++++++++++++++++++++++++++++++++
张三:那么你能实现定义一个函数实现打印任意行以及任意字符和任意数量组成一条线。
当然可以啊,如下代码所示↓
def h_l(row,char, num): while row: print((char * num)) row = row - 1 r = int(input('请输入行数:')) c = str(input('请输入字符:')) n = int(input('请输入数量:')) h_l(r,c,n)
运行结果
请输入行数:5
请输入字符:/
请输入数量:6
//
//
//
//
//