Python中函数使用def定义的函数还有就是lambda 定义的函数。
使用def关键字声明的函数,返回使用return关键字,如果到达函数仍然没有遇到return语句,就会自动返回None.
a = None
def bind_var():
a = []
for i in range(5):
a.append(i)
print(a)
print(bind_var())
函数有两种连接变量的方式:全局变量,本地变量。在使用全局变量的时候,在使用关键字global表示这个变量是个全局变量,如果不使用global会被默认为本地变量。
a = None
def bind_vvar():
global a
a = []
bind_vvar()
print(a)在python可以返回多个值,也就是相当于一个元组,在C++中有tuple的类型,可供来返回多个值,而在python中我们可以直接返回多个值。
def f():
a = 5
b = 7;c=8
return a,b,c
a,b,c = f()
print(a,b,c)
在Python中每一个函数都是一个对象,可以将函数作为一个参数传递到其他的函数中,相当于一种回调的使用。lambda是一种匿名函数,在c++中也有lambda函数,在Python定义匿名函数可以直接使用lambda关键字。匿名函数没有一个显示的__name__属性。
exp_val = lambda x : x*x
print(exp_val(10))
了解到一个新的词语,柯里化函数:部分参数应用,它是通过部分参数应用的方式从已有的函数产生新的函数,内建的functools可以使用pratial函数简化处理:
from functools import partial
def add_numbers(x,y):
return x+y
add_five = partial(add_numbers,5)
print(add_five(10))
这与C++ 的bind函数很像,可以对函数使用占位符并确定某些位置的参数,形成一个新的函数对象。Python中通过一致的方式遍历序列这也就是迭代器模式。迭代器在Python中是一种用在上下文中向Python解释器生成对象的对象。生成器是构造新的可遍历序列的一种简洁的方式,如果需要创建生成器需要使用yield关键字,即将return换成yield关键字即可。
def squares(n = 10):
for i in range(1,n+1):
yield i**2
gen = squares()
print(gen)
print(list(gen))
生成器表达式可以很方便的创建生成器,生成器表达式与列表的推导式很相似,只需要将列表推导式的中括号换成小括号就行。生成器表达式也可以代替列表推导式。
gen = (x**2 for x in range(1,11))
print(gen)
print(list(gen))
mapping = dict((x,x**2) for x in range(1,11))
print(mapping)
itertools模块是适用于大多数数据集合算法的生成器,可以查看相应的文档来学习
错误和异常处理使用try/except捕获和处理异常