朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
让我们再来看一个函数的例子,以便进一步地解释函数的基本概念。
下面将一段代码封装在了函数中,使它成为一个通用搜索交集的工具。
def intersect(seq1,seq2):
res = [] # Start empty
for x in seq1: # Scan seq1
if x in seq2: # Common item?
res.append(x) # Add to end
return res
我们可以通过在括号中传递两个序列对象从而调用这个函数:
>>>s1 = "SPAM"
>>>s2 = "SCAM"
>>>intersect(s1,s2) # Strings
['S','A','M']
这里,我们传递了两个字符串,并且得到了一个包含着用逗号分隔的字符的列表。这个函数的算法相当的简单:“对于第一个参数中的所有元素,如果也出现在第二个参数之中,将它增加至结果之中”。
实际上,这个函数里的代码可以用一个单独的列表解析表达式来替代:
>>>[x for x in s1 if x in s2]
['S','A','M']
和所有的Python中的函数一样,intersect这个函数是多态的。也就是说,它可以支持多种类型:
>>>x = intersect([1,2,3],(1,4)) # Mixed types
>>>x # Saved result object
[1]
这次,我们给函数传递了不同类型的对象[一个列表和一个元组(混合类型)]。这个intersect函数可以对传递给它的任何序列对象进行迭代,只要这些序列支持预期的接口就行了。
对于intersect函数,第一个参数必须支持for循环,并且第二个参数支持成员测试。所有满足这两点的对象都能够正常工作,与它们的类型无关,例如,字符串和列表,文件和字典。
如果我们传入了不支持这些接口的对象(例如,数字),Python将会自动检测出不匹配,并抛出一个异常。
intersect函数中的res变量在Python中叫做本地变量——这个变量只是在def内的函数中是可见的,并且仅在函数运行时是存在的。实际上,由于所有的在函数内部进行赋值的变量名都默认为本地变量,所以intersect函数内的所有的变量均为本地变量。
•res是明显的被赋值过的,所以它是一个本地变量。
•参数也是通过赋值被传入的,所以seq1和seq2也是本地变量。
•for循环将元素赋值给了一个变量,所以变量x也是本地变量。
所有的本地变量都会在函数调用时出现,并在函数退出时消失——intersect函数末尾的return语句返回结果对象,但是变量res却消失了。