平和的心态对待python中的函数

1

心态

其实到函数这一阶段,用到的数学知识还不是很多,只是这时候我们应该建立一种模块化的思维方式来解决问题,对于刚接触编程的人来说,函数这一块的确是一个比较难理解的点。

但是,我们只要以一种平稳的心态去学习,不急不躁的梳理自己解决问题的思路,和同学之间多交流交流,或许难住你的就是一个简单的缩进问题,一些老程序员都有这样的困境,这个地方或许就有一个微小的思维差异,但是因为没有标记,没有留意,就困在里面迟迟出不来。

 

所以,即使是你以为理解的程序,多写几遍,多用几种方法,将这些知识点总结起来,都是一笔不小的学习财富。

 

函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量,然而我们在编程当中使用的函数也是这样,我们根据用户输入的值,返回一个相应的结果,函数就是封装好的一个小型工厂,你只需要给出原料,我就可以给你生产出成型的产品。

2

函数和方法

函数是将对象放在括号里面,将对象作为实参传入进去进行操作,然后返回一个符合我们逻辑的值,而方法是在对象后面加点的操作,先对这个对象定义一个类,然后在这个类中定义很多种方法,比如说字符串中的加/乘运算,这些在定义字符串的时候都已经设置好它的方法。

 

简单的来说,在类之外定义的可执行的函数,单独定义的一个function,我们都叫做函数,

 

在类中定义的普通方法,将来是要对对象进行实例化操作,这就属于一个方法。还有在类中定义的类方法,它传入的第一个参数必须是cls,与cls本身是绑定关系,它是属于方法。

 

在这里注意的是类中定义的静态方法,它与任何对象都没有联系,等同于是在class外定义函数,所以它是属于函数的范畴。

3

传参是一门技术活

如果你了解了如果你不了解这块知识点,传参的时候你就会各种碰壁,甚至传不进去自己想要传的参数。

 

序列传参的思想比较好理解,一个萝卜一个坑,从我们日常的操作角度来考虑,序列赋值语句实际上支持右侧任何可迭代的对象,而不局限于任何序列。我们可以根据以下的实例做更深一步的了解。

高级序列赋值的语句

在python2中,“=”符号两侧混合相匹配的序列类型,右边元素的数目还要和左边变量的数目相同,不然会产生错误,当然,在python2中还有一种解决方法,可以用切片的方式来解决这个问题,报错原因的单词unpack是拆包的意思,

我们可以确定刚开始的两个值,剩下的我全给最后一个变量,如下图实例:

这相当于一个拆包的过程
在这里,我们还可以玩得更高级,让他变成赋值嵌套循环,python先把右边的第一个字符串“SP”和左边的第一个元组((a,b))配对,然后一次赋值一个字符,接着再把第二个字符串(“AM”)一次赋值给变量c。
在这个过程中,左边对象的序列嵌套的形状必须符合右边对象的形状,利用已知形状取出数据结构的组成部分,也是很方便的。

4

还有一种情况,元组赋值语句的地方就是,在循环中把序列分割为开头和剩余两个部分,这样我们就能完整的拿出序列中的数值,然后进行判断,这样可以用来对max函数进行重写。

在python3.0中,我们可以在目标中使用单个星号的名称来更通用的匹配。前面没有标识符星号的一人一份,分好之后,然后多余的全部分给带星号的变量,如下案例所示:
而且这些带星号的变量可以出现在目标中的任何地方,注意星号一定要标在变量的前面,不管拆包的是什么可迭代对象,它的带星号的变量一定是列表,它是这样的:
5

边界情况

尽管扩展的序列解包很灵活,一些边界情况还是值得注意。首先,带星号的名称可能只匹配单个的项,但是,总是会向其赋值一个列表,如果没有剩下的内容可以匹配带星号的名称。

有多个带星号的名称或者如果值少了而没有带星号的名称,以及只有一个带星号的名称,但是没有编到列表和元组当中,都将会引发错误。
但是加了逗号或者用中括号括起来,那么就不会报错。

6

多目标赋值语句应注意的问题

记住,在这里只有一个对象,由三个变量共享(全都指向内存内同一对象)。这种行为对于不可变类型不会产生太大的影响,但是对于可变类型,比如列表或者字典,因为两个变量绑定相同的对象,这样任意一个对象引用进行的修改都会将在原处进行修改。所以,我们为了解决这个问题,要在单独的语句中初始化可变对象,以便分别执行独立的常量表达式来创建独立的空对象。

7

函数的传参

而在函数当中,函数传参的方式位置传参,位置传参包括元组传参和列表传参,而关键字传参通常是用字典进行传参。

 

通常我们在函数传参过程中遵循一定的顺序,先进行位置传参,然后再进行关键字传参,位置传参,我们必须要知道传入参数的结构,这样才能用相应的形参来接收传入的实参。而关键字传参只需要知道形参名就可以了,有时候元组和字典传参一定要区分开来。

关键字传参:形参名要知道,参数不同,我们传参的形式也会不相同,有多少种传参模式

为什么在传参这一块要强调这么多遍,是因为传参时,先位置传参,后关键字传参,关键字传参主要是字典传参。

因为字典中键必须要是字符串,所以改正以后呈现下面的运行结果。
8

函数的缺省值

函数的缺省参数也有它不可磨灭的作用,虽然说它已经被设定好了,但是有新的参数传进来就会使用新的参数,没有就以它的默认值进行传参,所以即使函数里面有三个形参,只要设定了缺省值, 不管你传入一个参数,还是两个参数,只要不超过形参的数目,甚至不传参的话,都不会报错。

所以说用缺省值来写的函数的通用性比较强,你有就用你的,没有就用我的默认值,两者不冲突,缺省参数一定要放在后面,放在前面就会报错。

在用到星号元组传参的时候,我们一般用*args来代替,args绑定的是元组,这是一个可迭代对象,也可以直接用sum函数进行求和。

Print()里面给多少个参数都可以接受,所以不得不佩服python语言的开发者,赋予了print这么强大的功能。