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变量也是本地变量
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变量也是本地变量
评论
发表评论