函数

函数是什么,随着学习的深入,编写的代码越来越复杂,所以要找到一个方法去吧,重复性的操作变得更加简单高效起来,把一些重复性的的代码块封装成BIF,方便反复调用,减少人力的资源浪费,更加的节约了时间。

函数的创建和调用函数


上面说到函数就是把一次次重复的代码封装成一个BIF这样会更好的利用,那怎么去封装的呢?

看例子

>>> def myfirstfuncion():...     print("第一个函数")...     print("天钧成年了")...     print("可以负法律责任了")>>> myfirstfuncion()第一个函数天钧成年了可以负法律责任了


函数的调用和运行机制,当函数myfistfuncion()发生调用操作时,Python会自动找到>>> def myfirstfuncion():然后依次执行该函数所包含的代码块部分(冒号后面的部分内容)一句调用就实现了函数的所有内容,是不是很方便呢?不用一行行去重复性的劳动了。

打印三次怎么办呢,看见调用函数时后面跟的小括号了吗。

看例子

>>> for i in range(3):...     myfirstfuncion()...第一个函数天钧成年了可以负法律责任了第一个函数天钧成年了可以负法律责任了第一个函数天钧成年了可以负法律责任了


还记得range()吗?前面文章说的for的弹夹哦,想有多少子弹,就有多少子弹。

[小声bb,天钧把公众号底下的菜单给优化了,可以找到专门的Python笔记了不用再去历史文章一章章找去了,后面的owasp tap 10 也方便大家查阅笔记,也请大家多多转发文章,您一直以来的支持,才是我们坚持下去的动力]

函数的参数


函数的参数,关于上面函数大家注意到了,函数后面跟着一个空的小括号,这是为什么呢?

聪明的小伙伴们,可能在上面我使用for循环,反应过来函数不过是对相同的代码进行,打包这样和循环的本质没有什么不同的,所以为了函数能够在每次调用实现不同的风格,才加入了函数的概念。

>>> def myfistfunction(name):...     print(name + "真的很帅")...>>> myfistfunction("variety")variety真的很帅>>> myfistfunction("天钧")天钧真的很帅>>> myfistfunction("老五")老五真的很帅>>> myfistfunction("奥巴马")奥巴马真的很帅

一个参数怎么够咱们玩的,不不不这远远不够,为此还能有两个参数去玩。如下

>>> def add(num1,num2):...     print(num1 + num2)...>>> add(1,45)46

这里咱观察细致一些,如有了两个参数,我要做的是加法运算,那么输出是不用加入双引号的,在调用时add后面应跟两个数,用逗号隔开,下面是错误的例子。


>>> def add(num1,num2):...     print("num1 + num2")...>>> add(12,34)num1 + num2

没有输出应有的效果,因为print里面的是字符串类型了,应该输出字符串。

函数的返回值

返回值是什么,学过C语言的同学立马想到了RETURN这个函数了吧,它在两种语言里代表的含义是一样的,来看看Python里的return同学吧!

>>> def cdd(num1,num2):...     return num1 + num2...>>> cdd(12,34)46

注;因为公众号文章面对的是小白,我尽量用大白话出文章,来照顾小白的学习,更好的去入门Python,才是我们要做的,安全圈很小,天钧应该尽自己所能,去帮助其他人。来了解这个行业,入门这个行业,所以一些学习过的大佬们,可以在后台指出天钧文章里的错误,为了安全圈的繁荣,天钧愿与诸君共同进步。

灵活强大的参数


形参与实参

参数从调用的角度来看是分为形参与实参的

  • 形参;指函数创建和定义过程中小括号里的参数

  • 实参;指函数在调用过程中传递过来的参数

例子

>>> def myfistfunction(name):...     print(name + "wocao")...>>> myfirstfunction("天钧")>>> myfistfunction("天钧")天钧wocao

def myfistfunction(name):里的name就是形参,代表着一个位置一个变量名,而调用的myfirstfunction("天钧")就是实参了,很容易理解对不对,因为它是个具体的内容,是赋值到变量名中的值。


函数文档与关键词参数


函数文档


函数文档是什么,就是给函数写文档,一个团队去写代码时,一般都是很多人一起来的,不知道大家听过一个笑话没有,老板对程序员说,给你6个人,这个项目多久能完成,程序员说10天,那给你10个人呢?程序员说要20天,为什么人越多时间越长呢?,因为人与人写代码的规范是不同的,写函数文档的理由就是,不管是谁阅读你的代码都能看得懂,这是个好习惯。

>>> def myfistfunction(name):...     """输入名字打出很帅"""...     print(name + "真的很帅")...>>> myfistfunction("老五")老五真的很帅

我们看到写在代码开头的三引号里不会打印出来,但会被储存起来,它的功能和注释是一样的。怎么去获取呢?

__doc__

获取函数上场(doc两边的是两个英文状态下的下划线)


>>> myfistfunction.__doc__'输入名字打出很帅'>>>

关键词参数

还记得format()函数吗?

关键词函数跟它原理很像如下

>>> def add(num1,num2):...     print(num1 + num2)...>>> add(1,45)46

这样的是不是很容易搞混,num1与num2呢?

但是关键词函数很直接,如下

>>> def add(num1,num2):...     print(num1 + num2)...>>> add(num1 = 45 ,num2 = 23)68>>>

后台回复cxk,查看小彩蛋


默认参数

什么是默认参数,默认参数是在定义时赋予了默认值得的参数

如下

>>> def add(num1 = "天钧",num2 = "love 老五"):...     print(num1 + num2)...     print("py交易")...>>> add()天钧love 老五py交易>>>

收集参数


可变形参

>>> def tese(* params):...     print("里面有%d个参数" % len(params))...     print("第二个参数是:",params[1])...>>> tese('C','C','S','D','E','W')里面有6个参数第二个参数是: C

其实也不难理解,可以当做参数里的元组,星号(*)既可以把和参数打包也可以解包,怎么操作如下。

>>> def tese(* params):...     print("里面有%d个参数" % len(params))...     print("第二个参数是:",params[1])...>>> tese('C','C','S','D','E','W')里面有6个参数第二个参数是: C>>> a = [1,2,3,4,4,5]>>> tese(a)里面有1个参数Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 3, in teseIndexError: tuple index out of range

这样为什么出错呢,大家不妨思考一下。

正确的如下

>>> def tese(* params):...     print("里面有%d个参数" % len(params))...     print("第二个参数是:",params[1])...>>> tese('C','C','S','D','E','W')里面有6个参数第二个参数是: C>>> a = [1,2,3,4,4,5]>>> tese(*a)里面有6个参数第二个参数是: 2

嘿嘿嘿,怎么样今天的内容大家还理解吗?,不妨记下知识点,方便复习哦,也可以收藏文章,关注本公众号,方便日后查阅。祝大家学有所成。