python函数基础

函数是python为了代码最大程度的重用和最小化代码冗余(rǒng yú)而提供的最基本的程序结构。

python函数中一些主要概念
def是可执行的代码
def创建了一个对象并将其赋值给某一变量名
函数是通过赋值(对象引用)传递的

def的一般格式

def	(arg1,arg2,...argN):
	

或者包含一条return语句

def	(arg1,arg2,...argN):
	...
	return 

python的def语句实际上是一个可执行的语句:当它运行的时候,它创建一个新的函数对象并将其赋值给一个变量名。(python中所有的语句都是实时运行的,没有像独立的编译时间这样的流程)因为它是一个语句,一个def可以出现在任一语句可以出现的地方——甚至是嵌套在其他的语句中。

定义和调用
python函数基础_第1张图片
python函数基础_第2张图片

多态
就像我们看到那样,times函数中表达式 x*y 的意义完全取决于x和y的对象类型,同样的函数,在下一个实例执行的乘法,在另一个实例下执行却是重复。python将对某一对象在某种语法的合理性交由对象自身判断。实际上,” * “在针对正被处理的对象进行了随机应变。这种依赖类型的行为称为多态。

多态就是一个操作的意义取决于被操作对象的类型
因为python是动态类型语言,所有多态在python中随处可见。在python中每个操作都是多态的操作:print、index、 * 操作符,还有很多。

例:寻找序列的交集
python函数基础_第3张图片当然实际上,这个函数可用一个单独的列表解析表达式来替代,因为它展示了经典的循环搜集器代码模式:
python函数基础_第4张图片
和所有的python中的函数一样,intersect是多态的。也就是说,它可以支持多种类型,只要其支持扩展对象接口:
python函数基础_第5张图片
给函数传递了不同类型的对象(一个列表和一个元组【混合类型】),并且仍然是选择出共有的元素。因为你没有必要去定义预先定义参数的类型,这个intersect函数很容易对传递给它的任何序列对象进行迭代,只要这些序列支持预期的接口就行了。
对于intersect函数,这意味着第一个参数必须支持for循环,并且第二个参数支持成员测试。所有满足这两点的对象都能够正常工作,与他们的类型无关。
如果我们传入了不支持这些接口的对象(例如,数字),python将会自动检测出不匹配,并抛出一个异常。

你可能感兴趣的:(python)