def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
print(list1) #[10]
list2 = extendList(123, [])
print(list2) #[123]
list3 = extendList('a')
print(list3) #[10,a]
'''
a = 5
a = 6
print(a)
lst = []
lst.append(1)
print(lst)
lst.append(2)
print(lst)
lst = []
lst.append(1)
print(lst)
'''
"""
函数如果定义一个默认形参,那么这个值会在内存当中提前保留一份
在函数调用时,如果用户定义了实参,那么使用用户自己的实际值
如果用户没有给与实际参数,那么使用默认形参值
print("<===>")
def func(a = 5):
print(a)
func() # a = 5
func(6)
def func(val, list=[]):
list.append(val)
print( list)
func(1)
func(2,[5,6,7])
func(3)
"""
# ###3.res多少?
def func():
return [lambda x : i*x for i in range(4)]
res = [m(2) for m in func()]
print(res)
'''
在ceshi函数当中 跑循环4遍 ,循环定义4个函数
注意的是,遍历的时候仅仅是定义,只有在调用的时,才会运行函数体,
所以定义时,i变量不会直接走入函数体内参与运算
最后通过lst返回,lst当中包含4个函数,因为内函数func使用了外函数ceshi的变量i,
所以变量i延长了它的生命周期,这是闭包的特点
返回出来之后,通过列表推导式 , 循环调用了4次函数,这个时候 2 与先前的i 参与运算,
因为i值已经全部循环结束,最后的i = 3,所以每个函数的运算结果 都是 2*i => 2 * 3 =>6
因为循环4次,所以列表里 产生了4 个 6;
'''
def ceshi():
lst = []
for i in range(4):
def func(x):
return i*x
lst.append(func)
return lst
lst = ceshi()
print(lst)
res = len(lst) #4
'''
#
[
<function ceshi.<locals>.func at 0x000001805BB50EA0>,
<function ceshi.<locals>.func at 0x000001805BB50F28>,
<function ceshi.<locals>.func at 0x000001805BB50E18>,
<function ceshi.<locals>.func at 0x000001805BB85048>
]
lst = [函数1,函数2,函数3,函数4]
'''
for m in lst:
'''
def func(x):
return i*x
'''
res = m(2)
print(res)
'''
函数的定义处和函数的调用处要分开
只有在函数调用的时候,才会执行函数体,
定义的时候只是单纯的定义包括参数,而没有去调用里面的内容
'''
for i in range(4):
pass
print(i)
# ###4.打印多少?
def add(a,b): #普通求和函数
return a + b
def test(): #生成器函数
for i in range(4):
yield i
# 初始化生成器函数 返回生成器
g=test()
for n in [2,10]:
g=(add(n,i) for i in g)
print(list(g))
"""
定义一个生成器可以使用两种方式 要么使用生成器表达式,要么使用生成器函数,
注意只有调用时,才能执行生成器里面的内容 , next,for,list都是在调用生成器
而g=(add(n,i) for i in g) 写法是在定义生成器
next(g) for .. in g list(g) 是在调用
在循环时候,只是定义了生成器2次,没有在调用,下次再拿取n的时,n已经等于10
第一次调用生成器
先计算g=(add(n,i) for i in (0,1,2,3)) 得到结果得范围 g = (10,11,12,13)
第二次调用生成器
先计算g=(add(n,i) for i in (10,11,12,13)) 得到结果得范围 g = (20,21,22,23)
list进行强转,得到列表[20,21,22,23]
"""
'''
g=(add(n,i) for i in g) # i的范围 0 1 2 3
add(n,0) => add(10,0) => 10
add(n,1) => add(10,1) => 11
add(n,2) => add(10,2) => 12
add(n,3) => add(10,3) => 13
g = (10,11,12,13)
g=(add(n,i) for i in g)
add(n,10) => add(10,10) => 20
add(n,11) => add(10,11) => 21
add(n,12) => add(10,12) => 22
add(n,13) => add(10,13) => 23
[20,21,22,23]
'''
for n in [2,10]:
pass
print(n)