平和的心态对待python中的函数
1
心态
其实到函数这一阶段,用到的数学知识还不是很多,只是这时候我们应该建立一种模块化的思维方式来解决问题,对于刚接触编程的人来说,函数这一块的确是一个比较难理解的点。
但是,我们只要以一种平稳的心态去学习,不急不躁的梳理自己解决问题的思路,和同学之间多交流交流,或许难住你的就是一个简单的缩进问题,一些老程序员都有这样的困境,这个地方或许就有一个微小的思维差异,但是因为没有标记,没有留意,就困在里面迟迟出不来。
所以,即使是你以为理解的程序,多写几遍,多用几种方法,将这些知识点总结起来,都是一笔不小的学习财富。
函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量,然而我们在编程当中使用的函数也是这样,我们根据用户输入的值,返回一个相应的结果,函数就是封装好的一个小型工厂,你只需要给出原料,我就可以给你生产出成型的产品。
2
函数和方法
函数是将对象放在括号里面,将对象作为实参传入进去进行操作,然后返回一个符合我们逻辑的值,而方法是在对象后面加点的操作,先对这个对象定义一个类,然后在这个类中定义很多种方法,比如说字符串中的加/乘运算,这些在定义字符串的时候都已经设置好它的方法。
简单的来说,在类之外定义的可执行的函数,单独定义的一个function,我们都叫做函数,
在类中定义的普通方法,将来是要对对象进行实例化操作,这就属于一个方法。还有在类中定义的类方法,它传入的第一个参数必须是cls,与cls本身是绑定关系,它是属于方法。
在这里注意的是类中定义的静态方法,它与任何对象都没有联系,等同于是在class外定义函数,所以它是属于函数的范畴。
3
传参是一门技术活
如果你了解了如果你不了解这块知识点,传参的时候你就会各种碰壁,甚至传不进去自己想要传的参数。
序列传参的思想比较好理解,一个萝卜一个坑,从我们日常的操作角度来考虑,序列赋值语句实际上支持右侧任何可迭代的对象,而不局限于任何序列。我们可以根据以下的实例做更深一步的了解。
在python2中,“=”符号两侧混合相匹配的序列类型,右边元素的数目还要和左边变量的数目相同,不然会产生错误,当然,在python2中还有一种解决方法,可以用切片的方式来解决这个问题,报错原因的单词unpack是拆包的意思,
我们可以确定刚开始的两个值,剩下的我全给最后一个变量,如下图实例:
4
还有一种情况,元组赋值语句的地方就是,在循环中把序列分割为开头和剩余两个部分,这样我们就能完整的拿出序列中的数值,然后进行判断,这样可以用来对max函数进行重写。
边界情况
尽管扩展的序列解包很灵活,一些边界情况还是值得注意。首先,带星号的名称可能只匹配单个的项,但是,总是会向其赋值一个列表,如果没有剩下的内容可以匹配带星号的名称。
6
多目标赋值语句应注意的问题
记住,在这里只有一个对象,由三个变量共享(全都指向内存内同一对象)。这种行为对于不可变类型不会产生太大的影响,但是对于可变类型,比如列表或者字典,因为两个变量绑定相同的对象,这样任意一个对象引用进行的修改都会将在原处进行修改。所以,我们为了解决这个问题,要在单独的语句中初始化可变对象,以便分别执行独立的常量表达式来创建独立的空对象。
函数的传参
而在函数当中,函数传参的方式位置传参,位置传参包括元组传参和列表传参,而关键字传参通常是用字典进行传参。
通常我们在函数传参过程中遵循一定的顺序,先进行位置传参,然后再进行关键字传参,位置传参,我们必须要知道传入参数的结构,这样才能用相应的形参来接收传入的实参。而关键字传参只需要知道形参名就可以了,有时候元组和字典传参一定要区分开来。
为什么在传参这一块要强调这么多遍,是因为传参时,先位置传参,后关键字传参,关键字传参主要是字典传参。
函数的缺省值
函数的缺省参数也有它不可磨灭的作用,虽然说它已经被设定好了,但是有新的参数传进来就会使用新的参数,没有就以它的默认值进行传参,所以即使函数里面有三个形参,只要设定了缺省值, 不管你传入一个参数,还是两个参数,只要不超过形参的数目,甚至不传参的话,都不会报错。
所以说用缺省值来写的函数的通用性比较强,你有就用你的,没有就用我的默认值,两者不冲突,缺省参数一定要放在后面,放在前面就会报错。
在用到星号元组传参的时候,我们一般用*args来代替,args绑定的是元组,这是一个可迭代对象,也可以直接用sum函数进行求和。
Print()里面给多少个参数都可以接受,所以不得不佩服python语言的开发者,赋予了print这么强大的功能。