ch16函数基础(python)

def
lambda
return
yield向调用者发回一个结果对象,但是记住了它离开的地方,
像生成器这样的函数也可以通过yield语句来返回值,并挂起他们的状态以便
稍后能够恢复状态。
global
nonlocal
函数是通过对象引用传递的。在python中,参数通过赋值传递给函数


def语句是实时执行的

#函数可以嵌套在语句中
if test:
    def func():            # Define func this way
        ...
else:
    def func():            # Or else this way
        ...
...
func()                   


#函数名赋值,函数仅仅是对象,在程序执行时它清楚记录在了内存之中
othername = func           # Assign function object
othername()                # Call func again



def func(): ...            # Create function object 创建函数
func()                     # Call object  调用函数
func.attr = value          # Attach attributes


#函数第一个例子:
>>> def times(x, y):       # Create and assign function
...     return x * y        # Body executed when called
...


#函数调用:
>>> times(2, 4)             # Arguments in parentheses
8



>>> x = times(3.14, 4)      # Save the result object
>>> x
12.56



>>> times('Ni', 4)          # Functions are "typeless"
'NiNiNiNi'


#python中的多态:一个操作的意义取决于被操作对象的类型
#不习惯在python中写类型检测代码


#寻找序列中的交集

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']


intersect([1,4],range(10))

#列表解析
>>> [x for x in s1 if x in s2]
['S', 'A', 'M']


#重访多态
>>> x = intersect([1, 2, 3], (1, 4))      # Mixed types
>>> x                                     # Saved result object
[1]


#对于intersect函数,这意味着第一个参数必须支持for循环,
第二个参数必须支持成员测试,所有满足这两点的对象都能够正常工作,与它们的类型无关。

#类实现in运算符的时候,要么重载__contains__方法,要么重载__iter__或者较早的__getitem__方法
来支持通用迭代协议。

#本地变量:函数内定义的变量
res本地变量
seq1和seq本地变量
x变量也是本地变量


评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用